diff --git a/docs/404.html b/docs/404.html index d94e749283..3d495138c7 100644 --- a/docs/404.html +++ b/docs/404.html @@ -70,13 +70,13 @@ - - + + -

404

Looks like we've got some broken links.
+ - + diff --git a/docs/apis-and-interfaces.html b/docs/apis-and-interfaces.html index caf5a2e3cc..762c32e214 100644 --- a/docs/apis-and-interfaces.html +++ b/docs/apis-and-interfaces.html @@ -70,8 +70,8 @@ - - + +
- +

# APIs and interfaces

# Examples

# SDK for immudb

SDKs for Java, Golang, .net, Python and Node are fully compatible with latest immudb release v0.8.0:

  1. immudb4j immudb4j
  2. Golang immudb-go
  3. .net immudb4dotnet
  4. Python immudb-py
  5. Node.js immudb-node

# immudb gRPC API reference

Here the gRPC documentation that shows available endpoints with protobuffer protocol

immudb gRPC

# immugw RESTful API reference

immugw can be found in a different repository

You can find the swagger schema here:

swagger immugw

If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:

docker run -d -it -p 8081:8080 --name swagger-immugw -v ${PWD}/pkg/api/gw.schema.swagger.json:/openapi.json -e SWAGGER_JSON=/openapi.json  swaggerapi/swagger-ui
+
+ diff --git a/docs/apis-references.html b/docs/apis-references.html new file mode 100644 index 0000000000..7a397a8899 --- /dev/null +++ b/docs/apis-references.html @@ -0,0 +1,109 @@ + + + + + + APIs reference | immudb - The lightweight, high-speed immutable database + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# APIs reference

# immudb gRPC API reference

Here the gRPC documentation that shows available endpoints with protobuffer protocol

immudb gRPC

# immugw RESTful API reference

immugw can be found in a different repository

You can find the swagger schema here:

swagger immugw

If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:

docker run -d -it -p 8081:8080 --name swagger-immugw -v ${PWD}/pkg/api/gw.schema.swagger.json:/openapi.json -e SWAGGER_JSON=/openapi.json  swaggerapi/swagger-ui
+

# Examples

+ + + diff --git a/docs/assets/css/0.styles.545c2cf9.css b/docs/assets/css/0.styles.310aaeac.css similarity index 83% rename from docs/assets/css/0.styles.545c2cf9.css rename to docs/assets/css/0.styles.310aaeac.css index 84b7f57bdb..76365225f8 100644 --- a/docs/assets/css/0.styles.545c2cf9.css +++ b/docs/assets/css/0.styles.310aaeac.css @@ -1 +1 @@ -*,:after,:before{box-sizing:border-box}html{-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-overflow-style:scrollbar}body{margin:0;color:#343a40;background-color:#fff}body.inkline{transition-property:background-color,color;transition-duration:.21s;transition-timing-function:ease}body.inkline.-dark{color:#f8f9fa;background-color:#202229}body.inkline.-light{color:#2c3e50;background-color:#fff}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}figure{margin:0 0 1rem}[tabindex="-1"]:focus{outline:none!important}hr{box-sizing:content-box;height:0;overflow:visible}a{color:#37598d;text-decoration:none;-webkit-text-decoration-skip:objects;background-color:transparent}a:active,a:focus,a:hover{color:#2c4771;text-decoration:underline;outline-width:0}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:none}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}abbr[data-original-title],abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;cursor:help;border-bottom:0}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1rem}dfn{font-style:italic}small{font-size:80%}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none;vertical-align:middle}svg:not(:root){overflow:hidden}progress{display:inline-block;vertical-align:baseline}details,menu{display:block}summary{display:list-item}canvas,output{display:inline-block}template{display:none}[hidden]{display:none!important}pre{overflow:auto}table{border-collapse:collapse}caption{text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}fieldset{min-width:0;padding:0;margin:0;border:none}legend{display:block;width:100%;max-width:100%;padding:0;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}label,legend{margin-bottom:.5rem}label{display:inline-block}textarea{overflow:auto;resize:vertical}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;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}}body.-modal{overflow:hidden}@font-face{font-family:inkline;src:url(/node_modules/@inkline/inkline/src/assets/icons/inkline.eot?kszcvl),url(/node_modules/@inkline/inkline/src/assets/icons/inkline.eot?kszcvl#iefix) format("embedded-opentype"),url(/node_modules/@inkline/inkline/src/assets/icons/inkline.ttf?kszcvl) format("truetype"),url(/node_modules/@inkline/inkline/src/assets/icons/inkline.woff?kszcvl) format("woff");font-weight:400;font-style:normal}code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;padding:.15rem .4rem;font-size:90%;color:#bd4147;background-color:#f8f9fa;border-radius:.25rem;transition-property:background-color,color,text-shadow;transition-duration:.21s;transition-timing-function:ease}a>code{padding:0;color:inherit;background-color:inherit}.inkline.-dark code{background-color:#3f474e;color:#ff6d6b}kbd{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;padding:.15rem .4rem;font-size:90%;color:#fff;background-color:#202229;border-radius:.2rem;box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:#202229;transition-property:background-color,color,text-shadow;transition-duration:.21s;transition-timing-function:ease}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0;transition-property:none}pre.-scrollable{max-height:340px;overflow-y:scroll}.inkline.-dark pre{color:#fff}.inkline.-dark pre code{color:inherit;background-color:transparent}samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.figure{display:inline-block}.figure>.img{margin-bottom:.5rem;line-height:1}.figure>.caption{font-size:90%;color:#868e96}.image.-polaroid,.image.-responsive,.image.-thumbnail,.img.-polaroid,.img.-responsive,.img.-thumbnail{max-width:100%;height:auto}.image.-fluid,.img.-fluid{width:100%;height:auto}.image[src$=".svg"],.img[src$=".svg"]{width:100%\9}.image.-polaroid,.image.-thumbnail,.img.-polaroid,.img.-thumbnail{padding:.5rem;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;transition:all .2s ease-in-out;box-shadow:0 1px 2px rgba(0,0,0,.075)}.image.-polaroid,.img.-polaroid{padding-bottom:3rem}.fade-in-transition-enter-active,.fade-in-transition-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.fade-in-transition-enter,.fade-in-transition-leave-active{opacity:0}.fade-in-linear-transition-enter-active,.fade-in-linear-transition-leave-active{transition:opacity .3s cubic-bezier(.23,1,.32,1)}.fade-in-linear-transition-enter,.fade-in-linear-transition-leave,.fade-in-linear-transition-leave-active{opacity:0}.slide-in-right-transition-enter-active,.slide-in-right-transition-leave-active{transition:transform .3s ease;transform-origin:left}.slide-in-right-transition-enter,.slide-in-right-transition-leave-to{transform:translateX(-100%)}.slide-in-right-transition-enter-to,.slide-in-right-transition-leave{transform:translateX(0)}.zoom-in-bottom-transition-enter-active,.zoom-in-bottom-transition-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center bottom}.zoom-in-bottom-transition-enter,.zoom-in-bottom-transition-leave-active{opacity:0;transform:scaleY(0)}.zoom-in-center-transition-enter-active,.zoom-in-center-transition-leave-active{opacity:1;transition:all .3s cubic-bezier(.55,0,.1,1);transform-origin:center center}.zoom-in-center-transition-enter,.zoom-in-center-transition-leave-active{opacity:0;transform:scale(0)}.zoom-in-top-transition-enter-active,.zoom-in-top-transition-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.zoom-in-top-transition-enter,.zoom-in-top-transition-leave-active{opacity:0;transform:scaleY(0)}.zoom-in-left-transition-enter-active,.zoom-in-left-transition-leave-active{opacity:1;transform:scale(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top left}.zoom-in-left-transition-enter,.zoom-in-left-transition-leave-active{opacity:0;transform:scale(.45)}.zoom-in-right-transition-enter-active,.zoom-in-right-transition-leave-active{opacity:1;transform:scale(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top right}.zoom-in-right-transition-enter,.zoom-in-right-transition-leave-active{opacity:0;transform:scale(.45)}.blockquote{margin:0 0 1rem;font-size:1.32rem}.blockquote.-left{text-align:left}.blockquote.-left.-bordered{padding-left:1rem;border-left:3px solid #dee2e6}.blockquote.-center{text-align:center}.blockquote.-right{text-align:right}.blockquote.-right.-bordered{padding-right:1rem;border-right:3px solid #dee2e6}.blockquote>p{margin-bottom:0}.blockquote>.footer,.blockquote>footer{display:block;font-size:80%;color:#868e96}.blockquote>.footer:before,.blockquote>footer:before{content:"\2014 \00A0"}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{font-size:1.1rem;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;line-height:1.5;letter-spacing:0;text-align:left;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}.d1,.h1,h1{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h1,h1{font-size:2.75rem}.d1,.h1,h1{font-weight:600;line-height:1.1}.d1{font-size:6.05rem}.d2,.h2,h2{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h2,h2{font-size:2.2rem}.d2,.h2,h2{font-weight:600;line-height:1.1}.d2{font-size:5.5rem}.d3,.h3,h3{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h3,h3{font-size:1.925rem}.d3,.h3,h3{font-weight:600;line-height:1.1}.d3{font-size:4.95rem}.d4,.h4,h4{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h4,h4{font-size:1.65rem}.d4,.h4,h4{font-weight:600;line-height:1.1}.d4{font-size:4.4rem}.d5,.h5,h5{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h5,h5{font-size:1.375rem}.d5,.h5,h5{font-weight:600;line-height:1.1}.d5{font-size:3.85rem}.d6,.h6,h6{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h6,h6{font-size:1.1rem}.d6,.h6,h6{font-weight:600;line-height:1.1}.d6{font-size:3.3rem}.list>.item,.list>li,dl>.item,dl>li,ol>.item,ol>li,ul>.item,ul>li{margin-bottom:.5rem}.list.-inline,.list.-unstyled,dl.-inline,dl.-unstyled,ol.-inline,ol.-unstyled,ul.-inline,ul.-unstyled{padding-left:0;list-style:none}.list.-inline>.item,.list.-inline>li,dl.-inline>.item,dl.-inline>li,ol.-inline>.item,ol.-inline>li,ul.-inline>.item,ul.-inline>li{display:inline-block;margin-bottom:0}.list.-inline>.item:not(:last-child),.list.-inline>li:not(:last-child),dl.-inline>.item:not(:last-child),dl.-inline>li:not(:last-child),ol.-inline>.item:not(:last-child),ol.-inline>li:not(:last-child),ul.-inline>.item:not(:last-child),ul.-inline>li:not(:last-child){margin-right:1rem}hr{margin:1rem 0;border:none;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:.88rem}.mark,mark{padding:.2rem .4rem;background-color:#fcf8e3;color:#343a40}.lead{font-size:1.32rem;font-weight:300}.initialism{font-size:90%;text-transform:uppercase}._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}._border{border-width:1px!important;border-style:solid!important;border-color:#e9ecef}._border-0{border:none!important}._border-top{border-top-width:1px!important;border-top-style:solid!important;border-top-color:#e9ecef}._border-right{border-right-width:1px!important;border-right-style:solid!important;border-right-color:#e9ecef}._border-bottom{border-bottom-width:1px!important;border-bottom-style:solid!important;border-bottom-color:#e9ecef}._border-left{border-left-width:1px!important;border-left-style:solid!important;border-left-color:#e9ecef}._border-top-0{border-top:none!important}._border-right-0{border-right:none!important}._border-bottom-0{border-bottom:none!important}._border-left-0{border-left:none!important}._border-color-primary{border-color:#37598d!important}._border-top-color-primary{border-top-color:#37598d!important}._border-right-color-primary{border-right-color:#37598d!important}._border-bottom-color-primary{border-bottom-color:#37598d!important}._border-left-color-primary{border-left-color:#37598d!important}._border-color-secondary{border-color:#5d65b9!important}._border-top-color-secondary{border-top-color:#5d65b9!important}._border-right-color-secondary{border-right-color:#5d65b9!important}._border-bottom-color-secondary{border-bottom-color:#5d65b9!important}._border-left-color-secondary{border-left-color:#5d65b9!important}._border-color-light{border-color:#e9ecef!important}._border-top-color-light{border-top-color:#e9ecef!important}._border-right-color-light{border-right-color:#e9ecef!important}._border-bottom-color-light{border-bottom-color:#e9ecef!important}._border-left-color-light{border-left-color:#e9ecef!important}._border-color-dark{border-color:#343a40!important}._border-top-color-dark{border-top-color:#343a40!important}._border-right-color-dark{border-right-color:#343a40!important}._border-bottom-color-dark{border-bottom-color:#343a40!important}._border-left-color-dark{border-left-color:#343a40!important}._border-color-transparent{border-color:transparent!important}._border-top-color-transparent{border-top-color:transparent!important}._border-right-color-transparent{border-right-color:transparent!important}._border-bottom-color-transparent{border-bottom-color:transparent!important}._border-left-color-transparent{border-left-color:transparent!important}._border-color-white{border-color:#fff!important}._border-top-color-white{border-top-color:#fff!important}._border-right-color-white{border-right-color:#fff!important}._border-bottom-color-white{border-bottom-color:#fff!important}._border-left-color-white{border-left-color:#fff!important}._border-color-gray-10{border-color:#f8f9fa!important}._border-top-color-gray-10{border-top-color:#f8f9fa!important}._border-right-color-gray-10{border-right-color:#f8f9fa!important}._border-bottom-color-gray-10{border-bottom-color:#f8f9fa!important}._border-left-color-gray-10{border-left-color:#f8f9fa!important}._border-color-gray-20{border-color:#e9ecef!important}._border-top-color-gray-20{border-top-color:#e9ecef!important}._border-right-color-gray-20{border-right-color:#e9ecef!important}._border-bottom-color-gray-20{border-bottom-color:#e9ecef!important}._border-left-color-gray-20{border-left-color:#e9ecef!important}._border-color-gray-30{border-color:#dee2e6!important}._border-top-color-gray-30{border-top-color:#dee2e6!important}._border-right-color-gray-30{border-right-color:#dee2e6!important}._border-bottom-color-gray-30{border-bottom-color:#dee2e6!important}._border-left-color-gray-30{border-left-color:#dee2e6!important}._border-color-gray-40{border-color:#ced4da!important}._border-top-color-gray-40{border-top-color:#ced4da!important}._border-right-color-gray-40{border-right-color:#ced4da!important}._border-bottom-color-gray-40{border-bottom-color:#ced4da!important}._border-left-color-gray-40{border-left-color:#ced4da!important}._border-color-gray-50{border-color:#adb5bd!important}._border-top-color-gray-50{border-top-color:#adb5bd!important}._border-right-color-gray-50{border-right-color:#adb5bd!important}._border-bottom-color-gray-50{border-bottom-color:#adb5bd!important}._border-left-color-gray-50{border-left-color:#adb5bd!important}._border-color-gray-60{border-color:#868e96!important}._border-top-color-gray-60{border-top-color:#868e96!important}._border-right-color-gray-60{border-right-color:#868e96!important}._border-bottom-color-gray-60{border-bottom-color:#868e96!important}._border-left-color-gray-60{border-left-color:#868e96!important}._border-color-gray-70{border-color:#495057!important}._border-top-color-gray-70{border-top-color:#495057!important}._border-right-color-gray-70{border-right-color:#495057!important}._border-bottom-color-gray-70{border-bottom-color:#495057!important}._border-left-color-gray-70{border-left-color:#495057!important}._border-color-gray-80{border-color:#343a40!important}._border-top-color-gray-80{border-top-color:#343a40!important}._border-right-color-gray-80{border-right-color:#343a40!important}._border-bottom-color-gray-80{border-bottom-color:#343a40!important}._border-left-color-gray-80{border-left-color:#343a40!important}._border-color-gray-90{border-color:#202229!important}._border-top-color-gray-90{border-top-color:#202229!important}._border-right-color-gray-90{border-right-color:#202229!important}._border-bottom-color-gray-90{border-bottom-color:#202229!important}._border-left-color-gray-90{border-left-color:#202229!important}._border-color-black{border-color:#000!important}._border-top-color-black{border-top-color:#000!important}._border-right-color-black{border-right-color:#000!important}._border-bottom-color-black{border-bottom-color:#000!important}._border-left-color-black{border-left-color:#000!important}._border-color-success{border-color:#5fb072!important}._border-top-color-success{border-top-color:#5fb072!important}._border-right-color-success{border-right-color:#5fb072!important}._border-bottom-color-success{border-bottom-color:#5fb072!important}._border-left-color-success{border-left-color:#5fb072!important}._border-color-danger{border-color:#f25f5c!important}._border-top-color-danger{border-top-color:#f25f5c!important}._border-right-color-danger{border-right-color:#f25f5c!important}._border-bottom-color-danger{border-bottom-color:#f25f5c!important}._border-left-color-danger{border-left-color:#f25f5c!important}._border-color-warning{border-color:#f1ac53!important}._border-top-color-warning{border-top-color:#f1ac53!important}._border-right-color-warning{border-right-color:#f1ac53!important}._border-bottom-color-warning{border-bottom-color:#f1ac53!important}._border-left-color-warning{border-left-color:#f1ac53!important}._border-color-info{border-color:#62bec1!important}._border-top-color-info{border-top-color:#62bec1!important}._border-right-color-info{border-right-color:#62bec1!important}._border-bottom-color-info{border-bottom-color:#62bec1!important}._border-left-color-info{border-left-color:#62bec1!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,._rounded-top-left{border-top-left-radius:.25rem!important}._rounded-top-right{border-top-right-radius:.25rem!important}._rounded-bottom-left{border-bottom-left-radius:.25rem!important}._rounded-bottom-right{border-bottom-right-radius:.25rem!important}._rounded-circle{border-radius:50%!important}._rounded-0{border-radius:0!important}._background-red{color:#fff;background-color:#f25f5c!important}._background-orange{color:#fff;background-color:#f1ac53!important}._background-yellow{color:#343a40;background-color:#ffe066!important}._background-green{color:#fff;background-color:#5fb072!important}._background-teal{color:#fff;background-color:#62bec1!important}._background-blue{color:#fff;background-color:#178bb2!important}._background-purple{color:#fff;background-color:#5d65b9!important}._background-pink{color:#fff;background-color:#ff6f80!important}._background-primary{color:#fff;background-color:#37598d!important}._background-secondary{color:#fff;background-color:#5d65b9!important}._background-light{color:#343a40;background-color:#e9ecef!important}._background-dark{color:#fff;background-color:#343a40!important}._background-transparent{color:#fff}._background-white{color:#343a40;background-color:#fff!important}._background-gray-10{color:#343a40;background-color:#f8f9fa!important}._background-gray-20{color:#343a40;background-color:#e9ecef!important}._background-gray-30{color:#343a40;background-color:#dee2e6!important}._background-gray-40{color:#343a40;background-color:#ced4da!important}._background-gray-50{color:#fff;background-color:#adb5bd!important}._background-gray-60{color:#fff;background-color:#868e96!important}._background-gray-70{color:#fff;background-color:#495057!important}._background-gray-80{color:#fff;background-color:#343a40!important}._background-gray-90{color:#fff;background-color:#202229!important}._background-black{color:#fff;background-color:#000!important}._background-success{color:#fff;background-color:#5fb072!important}._background-danger{color:#fff;background-color:#f25f5c!important}._background-warning{color:#fff;background-color:#f1ac53!important}._background-info{color:#fff;background-color:#62bec1!important}._background-facebook{color:#fff;background-color:#3b5998!important}._background-twitter{color:#fff;background-color:#1da1f2!important}._background-google{color:#fff;background-color:#dd4b39!important}._background-instagram{color:#fff;background-color:#fd1d1d!important}._background-dribbble{color:#fff;background-color:#ea4c89!important}._background-behance{color:#fff;background-color:#1769ff!important}._background-flickr{color:#fff;background-color:#ff0084!important}._background-linkedin{color:#fff;background-color:#0077b5!important}._background-youtube{color:#fff;background-color:#b31217!important}._background-pinterest{color:#fff;background-color:#bd081c!important}._background-github{color:#fff;background-color:#333!important}._background-tumblr{color:#fff;background-color:#35465c!important}._background-twitch{color:#fff;background-color:#6441a5!important}._background-envato{color:#fff;background-color:#82b541!important}._background-vine{color:#fff;background-color:#00bf8f!important}._background-transparent{background-color:transparent!important}._text-red{color:#f25f5c!important}._text-orange{color:#f1ac53!important}._text-yellow{color:#ffe066!important}._text-green{color:#5fb072!important}._text-teal{color:#62bec1!important}._text-blue{color:#178bb2!important}._text-purple{color:#5d65b9!important}._text-pink{color:#ff6f80!important}._text-primary{color:#37598d!important}._text-secondary{color:#5d65b9!important}._text-light{color:#e9ecef!important}._text-dark{color:#343a40!important}._text-transparent{color:transparent!important}._text-white{color:#fff!important}._text-gray-10{color:#f8f9fa!important}._text-gray-20{color:#e9ecef!important}._text-gray-30{color:#dee2e6!important}._text-gray-40{color:#ced4da!important}._text-gray-50{color:#adb5bd!important}._text-gray-60{color:#868e96!important}._text-gray-70{color:#495057!important}._text-gray-80{color:#343a40!important}._text-gray-90{color:#202229!important}._text-black{color:#000!important}._text-success{color:#5fb072!important}._text-danger{color:#f25f5c!important}._text-warning{color:#f1ac53!important}._text-info{color:#62bec1!important}._text-facebook{color:#3b5998!important}._text-twitter{color:#1da1f2!important}._text-google{color:#dd4b39!important}._text-instagram{color:#fd1d1d!important}._text-dribbble{color:#ea4c89!important}._text-behance{color:#1769ff!important}._text-flickr{color:#ff0084!important}._text-linkedin{color:#0077b5!important}._text-youtube{color:#b31217!important}._text-pinterest{color:#bd081c!important}._text-github{color:#333!important}._text-tumblr{color:#35465c!important}._text-twitch{color:#6441a5!important}._text-envato{color:#82b541!important}._text-vine{color:#00bf8f!important}@media screen and (max-width:575px){._display-xs-none{display:none!important}._display-xs-inline{display:inline!important}._display-xs-inline-block{display:inline-block!important}._display-xs-block{display:block!important}._display-xs-table{display:table!important}._display-xs-table-cell{display:table-cell!important}._display-xs-flex{display:flex!important}._display-xs-inline-flex{display:inline-flex!important}}@media screen and (min-width:576px) and (max-width:767px){._display-sm-none{display:none!important}._display-sm-inline{display:inline!important}._display-sm-inline-block{display:inline-block!important}._display-sm-block{display:block!important}._display-sm-table{display:table!important}._display-sm-table-cell{display:table-cell!important}._display-sm-flex{display:flex!important}._display-sm-inline-flex{display:inline-flex!important}}@media screen and (min-width:768px) and (max-width:991px){._display-md-none{display:none!important}._display-md-inline{display:inline!important}._display-md-inline-block{display:inline-block!important}._display-md-block{display:block!important}._display-md-table{display:table!important}._display-md-table-cell{display:table-cell!important}._display-md-flex{display:flex!important}._display-md-inline-flex{display:inline-flex!important}}@media screen and (min-width:992px) and (max-width:1199px){._display-lg-none{display:none!important}._display-lg-inline{display:inline!important}._display-lg-inline-block{display:inline-block!important}._display-lg-block{display:block!important}._display-lg-table{display:table!important}._display-lg-table-cell{display:table-cell!important}._display-lg-flex{display:flex!important}._display-lg-inline-flex{display:inline-flex!important}}@media screen and (min-width:1200px){._display-xl-none{display:none!important}._display-xl-inline{display:inline!important}._display-xl-inline-block{display:inline-block!important}._display-xl-block{display:block!important}._display-xl-table{display:table!important}._display-xl-table-cell{display:table-cell!important}._display-xl-flex{display:flex!important}._display-xl-inline-flex{display:inline-flex!important}}._display-none{display:none!important}._display-inline{display:inline!important}._display-inline-block{display:inline-block!important}._display-block{display:block!important}._display-table{display:table!important}._display-table-cell{display:table-cell!important}._display-flex{display:flex!important}._display-inline-flex{display:inline-flex!important}._display-print-block{display:none!important}@media print{._display-print-block{display:block!important}}._display-print-inline{display:none!important}@media print{._display-print-inline{display:inline!important}}._display-print-inline-block{display:none!important}@media print{._display-print-inline-block{display:inline-block!important}}@media print{._display-print-none{display:none!important}}._embed{position:relative;display:block;width:100%;padding:0;overflow:hidden}._embed:before{display:block;content:""}._embed>._embed-item,._embed embed,._embed iframe,._embed object,._embed video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:none}._embed-21by9:before{padding-top:42.85714%}._embed-16by9:before{padding-top:56.25%}._embed-4by3:before{padding-top:75%}._embed-1by1:before{padding-top:100%}._flex-direction-xs-row{flex-direction:row!important}._flex-direction-xs-column{flex-direction:column!important}._flex-direction-xs-row-reverse{flex-direction:row-reverse!important}._flex-direction-xs-column-reverse{flex-direction:column-reverse!important}._flex-xs-wrap{flex-wrap:wrap!important}._flex-xs-nowrap{flex-wrap:nowrap!important}._flex-xs-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-xs-fill{flex:1 1 auto!important}._flex-xs-grow-1{flex-grow:1!important}._flex-xs-grow-0{flex-grow:0!important}._flex-xs-shrink-1{flex-shrink:1!important}._flex-xs-shrink-0{flex-shrink:0!important}._justify-content-xs-start{justify-content:flex-start!important}._justify-content-xs-end{justify-content:flex-end!important}._justify-content-xs-center{justify-content:center!important}._justify-content-xs-space-between{justify-content:space-between!important}._justify-content-xs-space-around{justify-content:space-around!important}._align-items-xs-start{align-items:flex-start!important}._align-items-xs-end{align-items:flex-end!important}._align-items-xs-center{align-items:center!important}._align-items-xs-baseline{align-items:baseline!important}._align-items-xs-stretch{align-items:stretch!important}._align-content-xs-start{align-content:flex-start!important}._align-content-xs-end{align-content:flex-end!important}._align-content-xs-center{align-content:center!important}._align-content-xs-space-between{align-content:space-between!important}._align-content-xs-space-around{align-content:space-around!important}._align-content-xs-stretch{align-content:stretch!important}._align-self-xs-auto{align-self:auto!important}._align-self-xs-start{align-self:flex-start!important}._align-self-xs-end{align-self:flex-end!important}._align-self-xs-center{align-self:center!important}._align-self-xs-baseline{align-self:baseline!important}._align-self-xs-stretch{align-self:stretch!important}._order-xs-1{order:1}._order-xs-2{order:2}._order-xs-3{order:3}._order-xs-4{order:4}._order-xs-5{order:5}._order-xs-6{order:6}._order-xs-7{order:7}._order-xs-8{order:8}._order-xs-9{order:9}._order-xs-10{order:10}._order-xs-11{order:11}._order-xs-12{order:12}._order-xs-first{order:1}._order-xs-last{order:-1}._flex-direction-sm-row{flex-direction:row!important}._flex-direction-sm-column{flex-direction:column!important}._flex-direction-sm-row-reverse{flex-direction:row-reverse!important}._flex-direction-sm-column-reverse{flex-direction:column-reverse!important}._flex-sm-wrap{flex-wrap:wrap!important}._flex-sm-nowrap{flex-wrap:nowrap!important}._flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-sm-fill{flex:1 1 auto!important}._flex-sm-grow-1{flex-grow:1!important}._flex-sm-grow-0{flex-grow:0!important}._flex-sm-shrink-1{flex-shrink:1!important}._flex-sm-shrink-0{flex-shrink:0!important}._justify-content-sm-start{justify-content:flex-start!important}._justify-content-sm-end{justify-content:flex-end!important}._justify-content-sm-center{justify-content:center!important}._justify-content-sm-space-between{justify-content:space-between!important}._justify-content-sm-space-around{justify-content:space-around!important}._align-items-sm-start{align-items:flex-start!important}._align-items-sm-end{align-items:flex-end!important}._align-items-sm-center{align-items:center!important}._align-items-sm-baseline{align-items:baseline!important}._align-items-sm-stretch{align-items:stretch!important}._align-content-sm-start{align-content:flex-start!important}._align-content-sm-end{align-content:flex-end!important}._align-content-sm-center{align-content:center!important}._align-content-sm-space-between{align-content:space-between!important}._align-content-sm-space-around{align-content:space-around!important}._align-content-sm-stretch{align-content:stretch!important}._align-self-sm-auto{align-self:auto!important}._align-self-sm-start{align-self:flex-start!important}._align-self-sm-end{align-self:flex-end!important}._align-self-sm-center{align-self:center!important}._align-self-sm-baseline{align-self:baseline!important}._align-self-sm-stretch{align-self:stretch!important}._order-sm-1{order:1}._order-sm-2{order:2}._order-sm-3{order:3}._order-sm-4{order:4}._order-sm-5{order:5}._order-sm-6{order:6}._order-sm-7{order:7}._order-sm-8{order:8}._order-sm-9{order:9}._order-sm-10{order:10}._order-sm-11{order:11}._order-sm-12{order:12}._order-sm-first{order:1}._order-sm-last{order:-1}._flex-direction-md-row{flex-direction:row!important}._flex-direction-md-column{flex-direction:column!important}._flex-direction-md-row-reverse{flex-direction:row-reverse!important}._flex-direction-md-column-reverse{flex-direction:column-reverse!important}._flex-md-wrap{flex-wrap:wrap!important}._flex-md-nowrap{flex-wrap:nowrap!important}._flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-md-fill{flex:1 1 auto!important}._flex-md-grow-1{flex-grow:1!important}._flex-md-grow-0{flex-grow:0!important}._flex-md-shrink-1{flex-shrink:1!important}._flex-md-shrink-0{flex-shrink:0!important}._justify-content-md-start{justify-content:flex-start!important}._justify-content-md-end{justify-content:flex-end!important}._justify-content-md-center{justify-content:center!important}._justify-content-md-space-between{justify-content:space-between!important}._justify-content-md-space-around{justify-content:space-around!important}._align-items-md-start{align-items:flex-start!important}._align-items-md-end{align-items:flex-end!important}._align-items-md-center{align-items:center!important}._align-items-md-baseline{align-items:baseline!important}._align-items-md-stretch{align-items:stretch!important}._align-content-md-start{align-content:flex-start!important}._align-content-md-end{align-content:flex-end!important}._align-content-md-center{align-content:center!important}._align-content-md-space-between{align-content:space-between!important}._align-content-md-space-around{align-content:space-around!important}._align-content-md-stretch{align-content:stretch!important}._align-self-md-auto{align-self:auto!important}._align-self-md-start{align-self:flex-start!important}._align-self-md-end{align-self:flex-end!important}._align-self-md-center{align-self:center!important}._align-self-md-baseline{align-self:baseline!important}._align-self-md-stretch{align-self:stretch!important}._order-md-1{order:1}._order-md-2{order:2}._order-md-3{order:3}._order-md-4{order:4}._order-md-5{order:5}._order-md-6{order:6}._order-md-7{order:7}._order-md-8{order:8}._order-md-9{order:9}._order-md-10{order:10}._order-md-11{order:11}._order-md-12{order:12}._order-md-first{order:1}._order-md-last{order:-1}._flex-direction-lg-row{flex-direction:row!important}._flex-direction-lg-column{flex-direction:column!important}._flex-direction-lg-row-reverse{flex-direction:row-reverse!important}._flex-direction-lg-column-reverse{flex-direction:column-reverse!important}._flex-lg-wrap{flex-wrap:wrap!important}._flex-lg-nowrap{flex-wrap:nowrap!important}._flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-lg-fill{flex:1 1 auto!important}._flex-lg-grow-1{flex-grow:1!important}._flex-lg-grow-0{flex-grow:0!important}._flex-lg-shrink-1{flex-shrink:1!important}._flex-lg-shrink-0{flex-shrink:0!important}._justify-content-lg-start{justify-content:flex-start!important}._justify-content-lg-end{justify-content:flex-end!important}._justify-content-lg-center{justify-content:center!important}._justify-content-lg-space-between{justify-content:space-between!important}._justify-content-lg-space-around{justify-content:space-around!important}._align-items-lg-start{align-items:flex-start!important}._align-items-lg-end{align-items:flex-end!important}._align-items-lg-center{align-items:center!important}._align-items-lg-baseline{align-items:baseline!important}._align-items-lg-stretch{align-items:stretch!important}._align-content-lg-start{align-content:flex-start!important}._align-content-lg-end{align-content:flex-end!important}._align-content-lg-center{align-content:center!important}._align-content-lg-space-between{align-content:space-between!important}._align-content-lg-space-around{align-content:space-around!important}._align-content-lg-stretch{align-content:stretch!important}._align-self-lg-auto{align-self:auto!important}._align-self-lg-start{align-self:flex-start!important}._align-self-lg-end{align-self:flex-end!important}._align-self-lg-center{align-self:center!important}._align-self-lg-baseline{align-self:baseline!important}._align-self-lg-stretch{align-self:stretch!important}._order-lg-1{order:1}._order-lg-2{order:2}._order-lg-3{order:3}._order-lg-4{order:4}._order-lg-5{order:5}._order-lg-6{order:6}._order-lg-7{order:7}._order-lg-8{order:8}._order-lg-9{order:9}._order-lg-10{order:10}._order-lg-11{order:11}._order-lg-12{order:12}._order-lg-first{order:1}._order-lg-last{order:-1}._flex-direction-xl-row{flex-direction:row!important}._flex-direction-xl-column{flex-direction:column!important}._flex-direction-xl-row-reverse{flex-direction:row-reverse!important}._flex-direction-xl-column-reverse{flex-direction:column-reverse!important}._flex-xl-wrap{flex-wrap:wrap!important}._flex-xl-nowrap{flex-wrap:nowrap!important}._flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-xl-fill{flex:1 1 auto!important}._flex-xl-grow-1{flex-grow:1!important}._flex-xl-grow-0{flex-grow:0!important}._flex-xl-shrink-1{flex-shrink:1!important}._flex-xl-shrink-0{flex-shrink:0!important}._justify-content-xl-start{justify-content:flex-start!important}._justify-content-xl-end{justify-content:flex-end!important}._justify-content-xl-center{justify-content:center!important}._justify-content-xl-space-between{justify-content:space-between!important}._justify-content-xl-space-around{justify-content:space-around!important}._align-items-xl-start{align-items:flex-start!important}._align-items-xl-end{align-items:flex-end!important}._align-items-xl-center{align-items:center!important}._align-items-xl-baseline{align-items:baseline!important}._align-items-xl-stretch{align-items:stretch!important}._align-content-xl-start{align-content:flex-start!important}._align-content-xl-end{align-content:flex-end!important}._align-content-xl-center{align-content:center!important}._align-content-xl-space-between{align-content:space-between!important}._align-content-xl-space-around{align-content:space-around!important}._align-content-xl-stretch{align-content:stretch!important}._align-self-xl-auto{align-self:auto!important}._align-self-xl-start{align-self:flex-start!important}._align-self-xl-end{align-self:flex-end!important}._align-self-xl-center{align-self:center!important}._align-self-xl-baseline{align-self:baseline!important}._align-self-xl-stretch{align-self:stretch!important}._order-xl-1{order:1}._order-xl-2{order:2}._order-xl-3{order:3}._order-xl-4{order:4}._order-xl-5{order:5}._order-xl-6{order:6}._order-xl-7{order:7}._order-xl-8{order:8}._order-xl-9{order:9}._order-xl-10{order:10}._order-xl-11{order:11}._order-xl-12{order:12}._order-xl-first{order:1}._order-xl-last{order:-1}._flex-direction-row{flex-direction:row!important}._flex-direction-column{flex-direction:column!important}._flex-direction-row-reverse{flex-direction:row-reverse!important}._flex-direction-column-reverse{flex-direction:column-reverse!important}._flex-wrap{flex-wrap:wrap!important}._flex-nowrap{flex-wrap:nowrap!important}._flex-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-fill{flex:1 1 auto!important}._flex-grow-1{flex-grow:1!important}._flex-grow-0{flex-grow:0!important}._flex-shrink-1{flex-shrink:1!important}._flex-shrink-0{flex-shrink:0!important}._justify-content-start{justify-content:flex-start!important}._justify-content-end{justify-content:flex-end!important}._justify-content-center{justify-content:center!important}._justify-content-space-between{justify-content:space-between!important}._justify-content-space-around{justify-content:space-around!important}._align-items-start{align-items:flex-start!important}._align-items-end{align-items:flex-end!important}._align-items-center{align-items:center!important}._align-items-baseline{align-items:baseline!important}._align-items-stretch{align-items:stretch!important}._align-content-start{align-content:flex-start!important}._align-content-end{align-content:flex-end!important}._align-content-center{align-content:center!important}._align-content-space-between{align-content:space-between!important}._align-content-space-around{align-content:space-around!important}._align-content-stretch{align-content:stretch!important}._align-self-auto{align-self:auto!important}._align-self-start{align-self:flex-start!important}._align-self-end{align-self:flex-end!important}._align-self-center{align-self:center!important}._align-self-baseline{align-self:baseline!important}._align-self-stretch{align-self:stretch!important}._order-1{order:1}._order-2{order:2}._order-3{order:3}._order-4{order:4}._order-5{order:5}._order-6{order:6}._order-7{order:7}._order-8{order:8}._order-9{order:9}._order-10{order:10}._order-11{order:11}._order-12{order:12}._order-first{order:1}._order-last{order:-1}@media screen and (max-width:575px){._float-xs-left{float:left!important}._float-xs-right{float:right!important}._float-xs-none{float:none!important}}@media screen and (min-width:576px) and (max-width:767px){._float-sm-left{float:left!important}._float-sm-right{float:right!important}._float-sm-none{float:none!important}}@media screen and (min-width:768px) and (max-width:991px){._float-md-left{float:left!important}._float-md-right{float:right!important}._float-md-none{float:none!important}}@media screen and (min-width:992px) and (max-width:1199px){._float-lg-left{float:left!important}._float-lg-right{float:right!important}._float-lg-none{float:none!important}}@media screen and (min-width:1200px){._float-xl-left{float:left!important}._float-xl-right{float:right!important}._float-xl-none{float:none!important}}._float-left{float:left!important}._float-right{float:right!important}._float-none{float:none!important}._cursor-pointer{cursor:pointer!important}._cursor-default{cursor:default!important}._overflow-auto{overflow:auto!important}._overflow-hidden{overflow:hidden!important}._overlay,._overlay-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}._overlay-link:after{pointer-events:auto;content:""}._position-static{position:"static"!important}._position-relative{position:"relative"!important}._position-absolute{position:"absolute"!important}._position-fixed{position:"fixed"!important}._position-sticky{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}}._width-25{width:25%!important}._height-25{height:25%!important}._width-50{width:50%!important}._height-50{height:50%!important}._width-75{width:75%!important}._height-75{height:75%!important}._width-100{width:100%!important}._height-100{height:100%!important}._max-height-100{max-height:100%!important}._max-width-100{max-width:100%!important}._vw-100{width:100vw!important}._vh-100{height:100vh!important}._max-vw-100{max-width:100vw!important}._max-vh-100{max-height:100vh!important}@media screen and (max-width:575px){._margin-xs-1-2{margin:.5rem!important}._margin-top-xs-1-2,._margin-y-xs-1-2{margin-top:.5rem!important}._margin-right-xs-1-2,._margin-x-xs-1-2{margin-right:.5rem!important}._margin-bottom-xs-1-2,._margin-y-xs-1-2{margin-bottom:.5rem!important}._margin-left-xs-1-2,._margin-x-xs-1-2{margin-left:.5rem!important}._margin-xs-1-3{margin:.33333rem!important}._margin-top-xs-1-3,._margin-y-xs-1-3{margin-top:.33333rem!important}._margin-right-xs-1-3,._margin-x-xs-1-3{margin-right:.33333rem!important}._margin-bottom-xs-1-3,._margin-y-xs-1-3{margin-bottom:.33333rem!important}._margin-left-xs-1-3,._margin-x-xs-1-3{margin-left:.33333rem!important}._margin-xs-2-3{margin:.66667rem!important}._margin-top-xs-2-3,._margin-y-xs-2-3{margin-top:.66667rem!important}._margin-right-xs-2-3,._margin-x-xs-2-3{margin-right:.66667rem!important}._margin-bottom-xs-2-3,._margin-y-xs-2-3{margin-bottom:.66667rem!important}._margin-left-xs-2-3,._margin-x-xs-2-3{margin-left:.66667rem!important}._margin-xs-1-4{margin:.25rem!important}._margin-top-xs-1-4,._margin-y-xs-1-4{margin-top:.25rem!important}._margin-right-xs-1-4,._margin-x-xs-1-4{margin-right:.25rem!important}._margin-bottom-xs-1-4,._margin-y-xs-1-4{margin-bottom:.25rem!important}._margin-left-xs-1-4,._margin-x-xs-1-4{margin-left:.25rem!important}._margin-xs-3-4{margin:.75rem!important}._margin-top-xs-3-4,._margin-y-xs-3-4{margin-top:.75rem!important}._margin-right-xs-3-4,._margin-x-xs-3-4{margin-right:.75rem!important}._margin-bottom-xs-3-4,._margin-y-xs-3-4{margin-bottom:.75rem!important}._margin-left-xs-3-4,._margin-x-xs-3-4{margin-left:.75rem!important}._margin-xs-0{margin:0!important}._margin-top-xs-0,._margin-y-xs-0{margin-top:0!important}._margin-right-xs-0,._margin-x-xs-0{margin-right:0!important}._margin-bottom-xs-0,._margin-y-xs-0{margin-bottom:0!important}._margin-left-xs-0,._margin-x-xs-0{margin-left:0!important}._margin-xs-1{margin:1rem!important}._margin-top-xs-1,._margin-y-xs-1{margin-top:1rem!important}._margin-right-xs-1,._margin-x-xs-1{margin-right:1rem!important}._margin-bottom-xs-1,._margin-y-xs-1{margin-bottom:1rem!important}._margin-left-xs-1,._margin-x-xs-1{margin-left:1rem!important}._margin-xs-2{margin:2rem!important}._margin-top-xs-2,._margin-y-xs-2{margin-top:2rem!important}._margin-right-xs-2,._margin-x-xs-2{margin-right:2rem!important}._margin-bottom-xs-2,._margin-y-xs-2{margin-bottom:2rem!important}._margin-left-xs-2,._margin-x-xs-2{margin-left:2rem!important}._margin-xs-3{margin:3rem!important}._margin-top-xs-3,._margin-y-xs-3{margin-top:3rem!important}._margin-right-xs-3,._margin-x-xs-3{margin-right:3rem!important}._margin-bottom-xs-3,._margin-y-xs-3{margin-bottom:3rem!important}._margin-left-xs-3,._margin-x-xs-3{margin-left:3rem!important}._margin-xs-4{margin:4rem!important}._margin-top-xs-4,._margin-y-xs-4{margin-top:4rem!important}._margin-right-xs-4,._margin-x-xs-4{margin-right:4rem!important}._margin-bottom-xs-4,._margin-y-xs-4{margin-bottom:4rem!important}._margin-left-xs-4,._margin-x-xs-4{margin-left:4rem!important}._margin-xs-5{margin:5rem!important}._margin-top-xs-5,._margin-y-xs-5{margin-top:5rem!important}._margin-right-xs-5,._margin-x-xs-5{margin-right:5rem!important}._margin-bottom-xs-5,._margin-y-xs-5{margin-bottom:5rem!important}._margin-left-xs-5,._margin-x-xs-5{margin-left:5rem!important}._margin-xs-6{margin:6rem!important}._margin-top-xs-6,._margin-y-xs-6{margin-top:6rem!important}._margin-right-xs-6,._margin-x-xs-6{margin-right:6rem!important}._margin-bottom-xs-6,._margin-y-xs-6{margin-bottom:6rem!important}._margin-left-xs-6,._margin-x-xs-6{margin-left:6rem!important}._margin-xs-7{margin:7rem!important}._margin-top-xs-7,._margin-y-xs-7{margin-top:7rem!important}._margin-right-xs-7,._margin-x-xs-7{margin-right:7rem!important}._margin-bottom-xs-7,._margin-y-xs-7{margin-bottom:7rem!important}._margin-left-xs-7,._margin-x-xs-7{margin-left:7rem!important}._margin-xs-8{margin:8rem!important}._margin-top-xs-8,._margin-y-xs-8{margin-top:8rem!important}._margin-right-xs-8,._margin-x-xs-8{margin-right:8rem!important}._margin-bottom-xs-8,._margin-y-xs-8{margin-bottom:8rem!important}._margin-left-xs-8,._margin-x-xs-8{margin-left:8rem!important}._padding-xs-1-2{padding:.5rem!important}._padding-top-xs-1-2,._padding-y-xs-1-2{padding-top:.5rem!important}._padding-right-xs-1-2,._padding-x-xs-1-2{padding-right:.5rem!important}._padding-bottom-xs-1-2,._padding-y-xs-1-2{padding-bottom:.5rem!important}._padding-left-xs-1-2,._padding-x-xs-1-2{padding-left:.5rem!important}._padding-xs-1-3{padding:.33333rem!important}._padding-top-xs-1-3,._padding-y-xs-1-3{padding-top:.33333rem!important}._padding-right-xs-1-3,._padding-x-xs-1-3{padding-right:.33333rem!important}._padding-bottom-xs-1-3,._padding-y-xs-1-3{padding-bottom:.33333rem!important}._padding-left-xs-1-3,._padding-x-xs-1-3{padding-left:.33333rem!important}._padding-xs-2-3{padding:.66667rem!important}._padding-top-xs-2-3,._padding-y-xs-2-3{padding-top:.66667rem!important}._padding-right-xs-2-3,._padding-x-xs-2-3{padding-right:.66667rem!important}._padding-bottom-xs-2-3,._padding-y-xs-2-3{padding-bottom:.66667rem!important}._padding-left-xs-2-3,._padding-x-xs-2-3{padding-left:.66667rem!important}._padding-xs-1-4{padding:.25rem!important}._padding-top-xs-1-4,._padding-y-xs-1-4{padding-top:.25rem!important}._padding-right-xs-1-4,._padding-x-xs-1-4{padding-right:.25rem!important}._padding-bottom-xs-1-4,._padding-y-xs-1-4{padding-bottom:.25rem!important}._padding-left-xs-1-4,._padding-x-xs-1-4{padding-left:.25rem!important}._padding-xs-3-4{padding:.75rem!important}._padding-top-xs-3-4,._padding-y-xs-3-4{padding-top:.75rem!important}._padding-right-xs-3-4,._padding-x-xs-3-4{padding-right:.75rem!important}._padding-bottom-xs-3-4,._padding-y-xs-3-4{padding-bottom:.75rem!important}._padding-left-xs-3-4,._padding-x-xs-3-4{padding-left:.75rem!important}._padding-xs-0{padding:0!important}._padding-top-xs-0,._padding-y-xs-0{padding-top:0!important}._padding-right-xs-0,._padding-x-xs-0{padding-right:0!important}._padding-bottom-xs-0,._padding-y-xs-0{padding-bottom:0!important}._padding-left-xs-0,._padding-x-xs-0{padding-left:0!important}._padding-xs-1{padding:1rem!important}._padding-top-xs-1,._padding-y-xs-1{padding-top:1rem!important}._padding-right-xs-1,._padding-x-xs-1{padding-right:1rem!important}._padding-bottom-xs-1,._padding-y-xs-1{padding-bottom:1rem!important}._padding-left-xs-1,._padding-x-xs-1{padding-left:1rem!important}._padding-xs-2{padding:2rem!important}._padding-top-xs-2,._padding-y-xs-2{padding-top:2rem!important}._padding-right-xs-2,._padding-x-xs-2{padding-right:2rem!important}._padding-bottom-xs-2,._padding-y-xs-2{padding-bottom:2rem!important}._padding-left-xs-2,._padding-x-xs-2{padding-left:2rem!important}._padding-xs-3{padding:3rem!important}._padding-top-xs-3,._padding-y-xs-3{padding-top:3rem!important}._padding-right-xs-3,._padding-x-xs-3{padding-right:3rem!important}._padding-bottom-xs-3,._padding-y-xs-3{padding-bottom:3rem!important}._padding-left-xs-3,._padding-x-xs-3{padding-left:3rem!important}._padding-xs-4{padding:4rem!important}._padding-top-xs-4,._padding-y-xs-4{padding-top:4rem!important}._padding-right-xs-4,._padding-x-xs-4{padding-right:4rem!important}._padding-bottom-xs-4,._padding-y-xs-4{padding-bottom:4rem!important}._padding-left-xs-4,._padding-x-xs-4{padding-left:4rem!important}._padding-xs-5{padding:5rem!important}._padding-top-xs-5,._padding-y-xs-5{padding-top:5rem!important}._padding-right-xs-5,._padding-x-xs-5{padding-right:5rem!important}._padding-bottom-xs-5,._padding-y-xs-5{padding-bottom:5rem!important}._padding-left-xs-5,._padding-x-xs-5{padding-left:5rem!important}._padding-xs-6{padding:6rem!important}._padding-top-xs-6,._padding-y-xs-6{padding-top:6rem!important}._padding-right-xs-6,._padding-x-xs-6{padding-right:6rem!important}._padding-bottom-xs-6,._padding-y-xs-6{padding-bottom:6rem!important}._padding-left-xs-6,._padding-x-xs-6{padding-left:6rem!important}._padding-xs-7{padding:7rem!important}._padding-top-xs-7,._padding-y-xs-7{padding-top:7rem!important}._padding-right-xs-7,._padding-x-xs-7{padding-right:7rem!important}._padding-bottom-xs-7,._padding-y-xs-7{padding-bottom:7rem!important}._padding-left-xs-7,._padding-x-xs-7{padding-left:7rem!important}._padding-xs-8{padding:8rem!important}._padding-top-xs-8,._padding-y-xs-8{padding-top:8rem!important}._padding-right-xs-8,._padding-x-xs-8{padding-right:8rem!important}._padding-bottom-xs-8,._padding-y-xs-8{padding-bottom:8rem!important}._padding-left-xs-8,._padding-x-xs-8{padding-left:8rem!important}._margin-xs-auto{margin:auto!important}._margin-top-xs-auto,._margin-y-xs-auto{margin-top:auto!important}._margin-right-xs-auto,._margin-x-xs-auto{margin-right:auto!important}._margin-bottom-xs-auto,._margin-y-xs-auto{margin-bottom:auto!important}._margin-left-xs-auto,._margin-x-xs-auto{margin-left:auto!important}}@media screen and (min-width:576px) and (max-width:767px){._margin-sm-1-2{margin:.5rem!important}._margin-top-sm-1-2,._margin-y-sm-1-2{margin-top:.5rem!important}._margin-right-sm-1-2,._margin-x-sm-1-2{margin-right:.5rem!important}._margin-bottom-sm-1-2,._margin-y-sm-1-2{margin-bottom:.5rem!important}._margin-left-sm-1-2,._margin-x-sm-1-2{margin-left:.5rem!important}._margin-sm-1-3{margin:.33333rem!important}._margin-top-sm-1-3,._margin-y-sm-1-3{margin-top:.33333rem!important}._margin-right-sm-1-3,._margin-x-sm-1-3{margin-right:.33333rem!important}._margin-bottom-sm-1-3,._margin-y-sm-1-3{margin-bottom:.33333rem!important}._margin-left-sm-1-3,._margin-x-sm-1-3{margin-left:.33333rem!important}._margin-sm-2-3{margin:.66667rem!important}._margin-top-sm-2-3,._margin-y-sm-2-3{margin-top:.66667rem!important}._margin-right-sm-2-3,._margin-x-sm-2-3{margin-right:.66667rem!important}._margin-bottom-sm-2-3,._margin-y-sm-2-3{margin-bottom:.66667rem!important}._margin-left-sm-2-3,._margin-x-sm-2-3{margin-left:.66667rem!important}._margin-sm-1-4{margin:.25rem!important}._margin-top-sm-1-4,._margin-y-sm-1-4{margin-top:.25rem!important}._margin-right-sm-1-4,._margin-x-sm-1-4{margin-right:.25rem!important}._margin-bottom-sm-1-4,._margin-y-sm-1-4{margin-bottom:.25rem!important}._margin-left-sm-1-4,._margin-x-sm-1-4{margin-left:.25rem!important}._margin-sm-3-4{margin:.75rem!important}._margin-top-sm-3-4,._margin-y-sm-3-4{margin-top:.75rem!important}._margin-right-sm-3-4,._margin-x-sm-3-4{margin-right:.75rem!important}._margin-bottom-sm-3-4,._margin-y-sm-3-4{margin-bottom:.75rem!important}._margin-left-sm-3-4,._margin-x-sm-3-4{margin-left:.75rem!important}._margin-sm-0{margin:0!important}._margin-top-sm-0,._margin-y-sm-0{margin-top:0!important}._margin-right-sm-0,._margin-x-sm-0{margin-right:0!important}._margin-bottom-sm-0,._margin-y-sm-0{margin-bottom:0!important}._margin-left-sm-0,._margin-x-sm-0{margin-left:0!important}._margin-sm-1{margin:1rem!important}._margin-top-sm-1,._margin-y-sm-1{margin-top:1rem!important}._margin-right-sm-1,._margin-x-sm-1{margin-right:1rem!important}._margin-bottom-sm-1,._margin-y-sm-1{margin-bottom:1rem!important}._margin-left-sm-1,._margin-x-sm-1{margin-left:1rem!important}._margin-sm-2{margin:2rem!important}._margin-top-sm-2,._margin-y-sm-2{margin-top:2rem!important}._margin-right-sm-2,._margin-x-sm-2{margin-right:2rem!important}._margin-bottom-sm-2,._margin-y-sm-2{margin-bottom:2rem!important}._margin-left-sm-2,._margin-x-sm-2{margin-left:2rem!important}._margin-sm-3{margin:3rem!important}._margin-top-sm-3,._margin-y-sm-3{margin-top:3rem!important}._margin-right-sm-3,._margin-x-sm-3{margin-right:3rem!important}._margin-bottom-sm-3,._margin-y-sm-3{margin-bottom:3rem!important}._margin-left-sm-3,._margin-x-sm-3{margin-left:3rem!important}._margin-sm-4{margin:4rem!important}._margin-top-sm-4,._margin-y-sm-4{margin-top:4rem!important}._margin-right-sm-4,._margin-x-sm-4{margin-right:4rem!important}._margin-bottom-sm-4,._margin-y-sm-4{margin-bottom:4rem!important}._margin-left-sm-4,._margin-x-sm-4{margin-left:4rem!important}._margin-sm-5{margin:5rem!important}._margin-top-sm-5,._margin-y-sm-5{margin-top:5rem!important}._margin-right-sm-5,._margin-x-sm-5{margin-right:5rem!important}._margin-bottom-sm-5,._margin-y-sm-5{margin-bottom:5rem!important}._margin-left-sm-5,._margin-x-sm-5{margin-left:5rem!important}._margin-sm-6{margin:6rem!important}._margin-top-sm-6,._margin-y-sm-6{margin-top:6rem!important}._margin-right-sm-6,._margin-x-sm-6{margin-right:6rem!important}._margin-bottom-sm-6,._margin-y-sm-6{margin-bottom:6rem!important}._margin-left-sm-6,._margin-x-sm-6{margin-left:6rem!important}._margin-sm-7{margin:7rem!important}._margin-top-sm-7,._margin-y-sm-7{margin-top:7rem!important}._margin-right-sm-7,._margin-x-sm-7{margin-right:7rem!important}._margin-bottom-sm-7,._margin-y-sm-7{margin-bottom:7rem!important}._margin-left-sm-7,._margin-x-sm-7{margin-left:7rem!important}._margin-sm-8{margin:8rem!important}._margin-top-sm-8,._margin-y-sm-8{margin-top:8rem!important}._margin-right-sm-8,._margin-x-sm-8{margin-right:8rem!important}._margin-bottom-sm-8,._margin-y-sm-8{margin-bottom:8rem!important}._margin-left-sm-8,._margin-x-sm-8{margin-left:8rem!important}._padding-sm-1-2{padding:.5rem!important}._padding-top-sm-1-2,._padding-y-sm-1-2{padding-top:.5rem!important}._padding-right-sm-1-2,._padding-x-sm-1-2{padding-right:.5rem!important}._padding-bottom-sm-1-2,._padding-y-sm-1-2{padding-bottom:.5rem!important}._padding-left-sm-1-2,._padding-x-sm-1-2{padding-left:.5rem!important}._padding-sm-1-3{padding:.33333rem!important}._padding-top-sm-1-3,._padding-y-sm-1-3{padding-top:.33333rem!important}._padding-right-sm-1-3,._padding-x-sm-1-3{padding-right:.33333rem!important}._padding-bottom-sm-1-3,._padding-y-sm-1-3{padding-bottom:.33333rem!important}._padding-left-sm-1-3,._padding-x-sm-1-3{padding-left:.33333rem!important}._padding-sm-2-3{padding:.66667rem!important}._padding-top-sm-2-3,._padding-y-sm-2-3{padding-top:.66667rem!important}._padding-right-sm-2-3,._padding-x-sm-2-3{padding-right:.66667rem!important}._padding-bottom-sm-2-3,._padding-y-sm-2-3{padding-bottom:.66667rem!important}._padding-left-sm-2-3,._padding-x-sm-2-3{padding-left:.66667rem!important}._padding-sm-1-4{padding:.25rem!important}._padding-top-sm-1-4,._padding-y-sm-1-4{padding-top:.25rem!important}._padding-right-sm-1-4,._padding-x-sm-1-4{padding-right:.25rem!important}._padding-bottom-sm-1-4,._padding-y-sm-1-4{padding-bottom:.25rem!important}._padding-left-sm-1-4,._padding-x-sm-1-4{padding-left:.25rem!important}._padding-sm-3-4{padding:.75rem!important}._padding-top-sm-3-4,._padding-y-sm-3-4{padding-top:.75rem!important}._padding-right-sm-3-4,._padding-x-sm-3-4{padding-right:.75rem!important}._padding-bottom-sm-3-4,._padding-y-sm-3-4{padding-bottom:.75rem!important}._padding-left-sm-3-4,._padding-x-sm-3-4{padding-left:.75rem!important}._padding-sm-0{padding:0!important}._padding-top-sm-0,._padding-y-sm-0{padding-top:0!important}._padding-right-sm-0,._padding-x-sm-0{padding-right:0!important}._padding-bottom-sm-0,._padding-y-sm-0{padding-bottom:0!important}._padding-left-sm-0,._padding-x-sm-0{padding-left:0!important}._padding-sm-1{padding:1rem!important}._padding-top-sm-1,._padding-y-sm-1{padding-top:1rem!important}._padding-right-sm-1,._padding-x-sm-1{padding-right:1rem!important}._padding-bottom-sm-1,._padding-y-sm-1{padding-bottom:1rem!important}._padding-left-sm-1,._padding-x-sm-1{padding-left:1rem!important}._padding-sm-2{padding:2rem!important}._padding-top-sm-2,._padding-y-sm-2{padding-top:2rem!important}._padding-right-sm-2,._padding-x-sm-2{padding-right:2rem!important}._padding-bottom-sm-2,._padding-y-sm-2{padding-bottom:2rem!important}._padding-left-sm-2,._padding-x-sm-2{padding-left:2rem!important}._padding-sm-3{padding:3rem!important}._padding-top-sm-3,._padding-y-sm-3{padding-top:3rem!important}._padding-right-sm-3,._padding-x-sm-3{padding-right:3rem!important}._padding-bottom-sm-3,._padding-y-sm-3{padding-bottom:3rem!important}._padding-left-sm-3,._padding-x-sm-3{padding-left:3rem!important}._padding-sm-4{padding:4rem!important}._padding-top-sm-4,._padding-y-sm-4{padding-top:4rem!important}._padding-right-sm-4,._padding-x-sm-4{padding-right:4rem!important}._padding-bottom-sm-4,._padding-y-sm-4{padding-bottom:4rem!important}._padding-left-sm-4,._padding-x-sm-4{padding-left:4rem!important}._padding-sm-5{padding:5rem!important}._padding-top-sm-5,._padding-y-sm-5{padding-top:5rem!important}._padding-right-sm-5,._padding-x-sm-5{padding-right:5rem!important}._padding-bottom-sm-5,._padding-y-sm-5{padding-bottom:5rem!important}._padding-left-sm-5,._padding-x-sm-5{padding-left:5rem!important}._padding-sm-6{padding:6rem!important}._padding-top-sm-6,._padding-y-sm-6{padding-top:6rem!important}._padding-right-sm-6,._padding-x-sm-6{padding-right:6rem!important}._padding-bottom-sm-6,._padding-y-sm-6{padding-bottom:6rem!important}._padding-left-sm-6,._padding-x-sm-6{padding-left:6rem!important}._padding-sm-7{padding:7rem!important}._padding-top-sm-7,._padding-y-sm-7{padding-top:7rem!important}._padding-right-sm-7,._padding-x-sm-7{padding-right:7rem!important}._padding-bottom-sm-7,._padding-y-sm-7{padding-bottom:7rem!important}._padding-left-sm-7,._padding-x-sm-7{padding-left:7rem!important}._padding-sm-8{padding:8rem!important}._padding-top-sm-8,._padding-y-sm-8{padding-top:8rem!important}._padding-right-sm-8,._padding-x-sm-8{padding-right:8rem!important}._padding-bottom-sm-8,._padding-y-sm-8{padding-bottom:8rem!important}._padding-left-sm-8,._padding-x-sm-8{padding-left:8rem!important}._margin-sm-auto{margin:auto!important}._margin-top-sm-auto,._margin-y-sm-auto{margin-top:auto!important}._margin-right-sm-auto,._margin-x-sm-auto{margin-right:auto!important}._margin-bottom-sm-auto,._margin-y-sm-auto{margin-bottom:auto!important}._margin-left-sm-auto,._margin-x-sm-auto{margin-left:auto!important}}@media screen and (min-width:768px) and (max-width:991px){._margin-md-1-2{margin:.5rem!important}._margin-top-md-1-2,._margin-y-md-1-2{margin-top:.5rem!important}._margin-right-md-1-2,._margin-x-md-1-2{margin-right:.5rem!important}._margin-bottom-md-1-2,._margin-y-md-1-2{margin-bottom:.5rem!important}._margin-left-md-1-2,._margin-x-md-1-2{margin-left:.5rem!important}._margin-md-1-3{margin:.33333rem!important}._margin-top-md-1-3,._margin-y-md-1-3{margin-top:.33333rem!important}._margin-right-md-1-3,._margin-x-md-1-3{margin-right:.33333rem!important}._margin-bottom-md-1-3,._margin-y-md-1-3{margin-bottom:.33333rem!important}._margin-left-md-1-3,._margin-x-md-1-3{margin-left:.33333rem!important}._margin-md-2-3{margin:.66667rem!important}._margin-top-md-2-3,._margin-y-md-2-3{margin-top:.66667rem!important}._margin-right-md-2-3,._margin-x-md-2-3{margin-right:.66667rem!important}._margin-bottom-md-2-3,._margin-y-md-2-3{margin-bottom:.66667rem!important}._margin-left-md-2-3,._margin-x-md-2-3{margin-left:.66667rem!important}._margin-md-1-4{margin:.25rem!important}._margin-top-md-1-4,._margin-y-md-1-4{margin-top:.25rem!important}._margin-right-md-1-4,._margin-x-md-1-4{margin-right:.25rem!important}._margin-bottom-md-1-4,._margin-y-md-1-4{margin-bottom:.25rem!important}._margin-left-md-1-4,._margin-x-md-1-4{margin-left:.25rem!important}._margin-md-3-4{margin:.75rem!important}._margin-top-md-3-4,._margin-y-md-3-4{margin-top:.75rem!important}._margin-right-md-3-4,._margin-x-md-3-4{margin-right:.75rem!important}._margin-bottom-md-3-4,._margin-y-md-3-4{margin-bottom:.75rem!important}._margin-left-md-3-4,._margin-x-md-3-4{margin-left:.75rem!important}._margin-md-0{margin:0!important}._margin-top-md-0,._margin-y-md-0{margin-top:0!important}._margin-right-md-0,._margin-x-md-0{margin-right:0!important}._margin-bottom-md-0,._margin-y-md-0{margin-bottom:0!important}._margin-left-md-0,._margin-x-md-0{margin-left:0!important}._margin-md-1{margin:1rem!important}._margin-top-md-1,._margin-y-md-1{margin-top:1rem!important}._margin-right-md-1,._margin-x-md-1{margin-right:1rem!important}._margin-bottom-md-1,._margin-y-md-1{margin-bottom:1rem!important}._margin-left-md-1,._margin-x-md-1{margin-left:1rem!important}._margin-md-2{margin:2rem!important}._margin-top-md-2,._margin-y-md-2{margin-top:2rem!important}._margin-right-md-2,._margin-x-md-2{margin-right:2rem!important}._margin-bottom-md-2,._margin-y-md-2{margin-bottom:2rem!important}._margin-left-md-2,._margin-x-md-2{margin-left:2rem!important}._margin-md-3{margin:3rem!important}._margin-top-md-3,._margin-y-md-3{margin-top:3rem!important}._margin-right-md-3,._margin-x-md-3{margin-right:3rem!important}._margin-bottom-md-3,._margin-y-md-3{margin-bottom:3rem!important}._margin-left-md-3,._margin-x-md-3{margin-left:3rem!important}._margin-md-4{margin:4rem!important}._margin-top-md-4,._margin-y-md-4{margin-top:4rem!important}._margin-right-md-4,._margin-x-md-4{margin-right:4rem!important}._margin-bottom-md-4,._margin-y-md-4{margin-bottom:4rem!important}._margin-left-md-4,._margin-x-md-4{margin-left:4rem!important}._margin-md-5{margin:5rem!important}._margin-top-md-5,._margin-y-md-5{margin-top:5rem!important}._margin-right-md-5,._margin-x-md-5{margin-right:5rem!important}._margin-bottom-md-5,._margin-y-md-5{margin-bottom:5rem!important}._margin-left-md-5,._margin-x-md-5{margin-left:5rem!important}._margin-md-6{margin:6rem!important}._margin-top-md-6,._margin-y-md-6{margin-top:6rem!important}._margin-right-md-6,._margin-x-md-6{margin-right:6rem!important}._margin-bottom-md-6,._margin-y-md-6{margin-bottom:6rem!important}._margin-left-md-6,._margin-x-md-6{margin-left:6rem!important}._margin-md-7{margin:7rem!important}._margin-top-md-7,._margin-y-md-7{margin-top:7rem!important}._margin-right-md-7,._margin-x-md-7{margin-right:7rem!important}._margin-bottom-md-7,._margin-y-md-7{margin-bottom:7rem!important}._margin-left-md-7,._margin-x-md-7{margin-left:7rem!important}._margin-md-8{margin:8rem!important}._margin-top-md-8,._margin-y-md-8{margin-top:8rem!important}._margin-right-md-8,._margin-x-md-8{margin-right:8rem!important}._margin-bottom-md-8,._margin-y-md-8{margin-bottom:8rem!important}._margin-left-md-8,._margin-x-md-8{margin-left:8rem!important}._padding-md-1-2{padding:.5rem!important}._padding-top-md-1-2,._padding-y-md-1-2{padding-top:.5rem!important}._padding-right-md-1-2,._padding-x-md-1-2{padding-right:.5rem!important}._padding-bottom-md-1-2,._padding-y-md-1-2{padding-bottom:.5rem!important}._padding-left-md-1-2,._padding-x-md-1-2{padding-left:.5rem!important}._padding-md-1-3{padding:.33333rem!important}._padding-top-md-1-3,._padding-y-md-1-3{padding-top:.33333rem!important}._padding-right-md-1-3,._padding-x-md-1-3{padding-right:.33333rem!important}._padding-bottom-md-1-3,._padding-y-md-1-3{padding-bottom:.33333rem!important}._padding-left-md-1-3,._padding-x-md-1-3{padding-left:.33333rem!important}._padding-md-2-3{padding:.66667rem!important}._padding-top-md-2-3,._padding-y-md-2-3{padding-top:.66667rem!important}._padding-right-md-2-3,._padding-x-md-2-3{padding-right:.66667rem!important}._padding-bottom-md-2-3,._padding-y-md-2-3{padding-bottom:.66667rem!important}._padding-left-md-2-3,._padding-x-md-2-3{padding-left:.66667rem!important}._padding-md-1-4{padding:.25rem!important}._padding-top-md-1-4,._padding-y-md-1-4{padding-top:.25rem!important}._padding-right-md-1-4,._padding-x-md-1-4{padding-right:.25rem!important}._padding-bottom-md-1-4,._padding-y-md-1-4{padding-bottom:.25rem!important}._padding-left-md-1-4,._padding-x-md-1-4{padding-left:.25rem!important}._padding-md-3-4{padding:.75rem!important}._padding-top-md-3-4,._padding-y-md-3-4{padding-top:.75rem!important}._padding-right-md-3-4,._padding-x-md-3-4{padding-right:.75rem!important}._padding-bottom-md-3-4,._padding-y-md-3-4{padding-bottom:.75rem!important}._padding-left-md-3-4,._padding-x-md-3-4{padding-left:.75rem!important}._padding-md-0{padding:0!important}._padding-top-md-0,._padding-y-md-0{padding-top:0!important}._padding-right-md-0,._padding-x-md-0{padding-right:0!important}._padding-bottom-md-0,._padding-y-md-0{padding-bottom:0!important}._padding-left-md-0,._padding-x-md-0{padding-left:0!important}._padding-md-1{padding:1rem!important}._padding-top-md-1,._padding-y-md-1{padding-top:1rem!important}._padding-right-md-1,._padding-x-md-1{padding-right:1rem!important}._padding-bottom-md-1,._padding-y-md-1{padding-bottom:1rem!important}._padding-left-md-1,._padding-x-md-1{padding-left:1rem!important}._padding-md-2{padding:2rem!important}._padding-top-md-2,._padding-y-md-2{padding-top:2rem!important}._padding-right-md-2,._padding-x-md-2{padding-right:2rem!important}._padding-bottom-md-2,._padding-y-md-2{padding-bottom:2rem!important}._padding-left-md-2,._padding-x-md-2{padding-left:2rem!important}._padding-md-3{padding:3rem!important}._padding-top-md-3,._padding-y-md-3{padding-top:3rem!important}._padding-right-md-3,._padding-x-md-3{padding-right:3rem!important}._padding-bottom-md-3,._padding-y-md-3{padding-bottom:3rem!important}._padding-left-md-3,._padding-x-md-3{padding-left:3rem!important}._padding-md-4{padding:4rem!important}._padding-top-md-4,._padding-y-md-4{padding-top:4rem!important}._padding-right-md-4,._padding-x-md-4{padding-right:4rem!important}._padding-bottom-md-4,._padding-y-md-4{padding-bottom:4rem!important}._padding-left-md-4,._padding-x-md-4{padding-left:4rem!important}._padding-md-5{padding:5rem!important}._padding-top-md-5,._padding-y-md-5{padding-top:5rem!important}._padding-right-md-5,._padding-x-md-5{padding-right:5rem!important}._padding-bottom-md-5,._padding-y-md-5{padding-bottom:5rem!important}._padding-left-md-5,._padding-x-md-5{padding-left:5rem!important}._padding-md-6{padding:6rem!important}._padding-top-md-6,._padding-y-md-6{padding-top:6rem!important}._padding-right-md-6,._padding-x-md-6{padding-right:6rem!important}._padding-bottom-md-6,._padding-y-md-6{padding-bottom:6rem!important}._padding-left-md-6,._padding-x-md-6{padding-left:6rem!important}._padding-md-7{padding:7rem!important}._padding-top-md-7,._padding-y-md-7{padding-top:7rem!important}._padding-right-md-7,._padding-x-md-7{padding-right:7rem!important}._padding-bottom-md-7,._padding-y-md-7{padding-bottom:7rem!important}._padding-left-md-7,._padding-x-md-7{padding-left:7rem!important}._padding-md-8{padding:8rem!important}._padding-top-md-8,._padding-y-md-8{padding-top:8rem!important}._padding-right-md-8,._padding-x-md-8{padding-right:8rem!important}._padding-bottom-md-8,._padding-y-md-8{padding-bottom:8rem!important}._padding-left-md-8,._padding-x-md-8{padding-left:8rem!important}._margin-md-auto{margin:auto!important}._margin-top-md-auto,._margin-y-md-auto{margin-top:auto!important}._margin-right-md-auto,._margin-x-md-auto{margin-right:auto!important}._margin-bottom-md-auto,._margin-y-md-auto{margin-bottom:auto!important}._margin-left-md-auto,._margin-x-md-auto{margin-left:auto!important}}@media screen and (min-width:992px) and (max-width:1199px){._margin-lg-1-2{margin:.5rem!important}._margin-top-lg-1-2,._margin-y-lg-1-2{margin-top:.5rem!important}._margin-right-lg-1-2,._margin-x-lg-1-2{margin-right:.5rem!important}._margin-bottom-lg-1-2,._margin-y-lg-1-2{margin-bottom:.5rem!important}._margin-left-lg-1-2,._margin-x-lg-1-2{margin-left:.5rem!important}._margin-lg-1-3{margin:.33333rem!important}._margin-top-lg-1-3,._margin-y-lg-1-3{margin-top:.33333rem!important}._margin-right-lg-1-3,._margin-x-lg-1-3{margin-right:.33333rem!important}._margin-bottom-lg-1-3,._margin-y-lg-1-3{margin-bottom:.33333rem!important}._margin-left-lg-1-3,._margin-x-lg-1-3{margin-left:.33333rem!important}._margin-lg-2-3{margin:.66667rem!important}._margin-top-lg-2-3,._margin-y-lg-2-3{margin-top:.66667rem!important}._margin-right-lg-2-3,._margin-x-lg-2-3{margin-right:.66667rem!important}._margin-bottom-lg-2-3,._margin-y-lg-2-3{margin-bottom:.66667rem!important}._margin-left-lg-2-3,._margin-x-lg-2-3{margin-left:.66667rem!important}._margin-lg-1-4{margin:.25rem!important}._margin-top-lg-1-4,._margin-y-lg-1-4{margin-top:.25rem!important}._margin-right-lg-1-4,._margin-x-lg-1-4{margin-right:.25rem!important}._margin-bottom-lg-1-4,._margin-y-lg-1-4{margin-bottom:.25rem!important}._margin-left-lg-1-4,._margin-x-lg-1-4{margin-left:.25rem!important}._margin-lg-3-4{margin:.75rem!important}._margin-top-lg-3-4,._margin-y-lg-3-4{margin-top:.75rem!important}._margin-right-lg-3-4,._margin-x-lg-3-4{margin-right:.75rem!important}._margin-bottom-lg-3-4,._margin-y-lg-3-4{margin-bottom:.75rem!important}._margin-left-lg-3-4,._margin-x-lg-3-4{margin-left:.75rem!important}._margin-lg-0{margin:0!important}._margin-top-lg-0,._margin-y-lg-0{margin-top:0!important}._margin-right-lg-0,._margin-x-lg-0{margin-right:0!important}._margin-bottom-lg-0,._margin-y-lg-0{margin-bottom:0!important}._margin-left-lg-0,._margin-x-lg-0{margin-left:0!important}._margin-lg-1{margin:1rem!important}._margin-top-lg-1,._margin-y-lg-1{margin-top:1rem!important}._margin-right-lg-1,._margin-x-lg-1{margin-right:1rem!important}._margin-bottom-lg-1,._margin-y-lg-1{margin-bottom:1rem!important}._margin-left-lg-1,._margin-x-lg-1{margin-left:1rem!important}._margin-lg-2{margin:2rem!important}._margin-top-lg-2,._margin-y-lg-2{margin-top:2rem!important}._margin-right-lg-2,._margin-x-lg-2{margin-right:2rem!important}._margin-bottom-lg-2,._margin-y-lg-2{margin-bottom:2rem!important}._margin-left-lg-2,._margin-x-lg-2{margin-left:2rem!important}._margin-lg-3{margin:3rem!important}._margin-top-lg-3,._margin-y-lg-3{margin-top:3rem!important}._margin-right-lg-3,._margin-x-lg-3{margin-right:3rem!important}._margin-bottom-lg-3,._margin-y-lg-3{margin-bottom:3rem!important}._margin-left-lg-3,._margin-x-lg-3{margin-left:3rem!important}._margin-lg-4{margin:4rem!important}._margin-top-lg-4,._margin-y-lg-4{margin-top:4rem!important}._margin-right-lg-4,._margin-x-lg-4{margin-right:4rem!important}._margin-bottom-lg-4,._margin-y-lg-4{margin-bottom:4rem!important}._margin-left-lg-4,._margin-x-lg-4{margin-left:4rem!important}._margin-lg-5{margin:5rem!important}._margin-top-lg-5,._margin-y-lg-5{margin-top:5rem!important}._margin-right-lg-5,._margin-x-lg-5{margin-right:5rem!important}._margin-bottom-lg-5,._margin-y-lg-5{margin-bottom:5rem!important}._margin-left-lg-5,._margin-x-lg-5{margin-left:5rem!important}._margin-lg-6{margin:6rem!important}._margin-top-lg-6,._margin-y-lg-6{margin-top:6rem!important}._margin-right-lg-6,._margin-x-lg-6{margin-right:6rem!important}._margin-bottom-lg-6,._margin-y-lg-6{margin-bottom:6rem!important}._margin-left-lg-6,._margin-x-lg-6{margin-left:6rem!important}._margin-lg-7{margin:7rem!important}._margin-top-lg-7,._margin-y-lg-7{margin-top:7rem!important}._margin-right-lg-7,._margin-x-lg-7{margin-right:7rem!important}._margin-bottom-lg-7,._margin-y-lg-7{margin-bottom:7rem!important}._margin-left-lg-7,._margin-x-lg-7{margin-left:7rem!important}._margin-lg-8{margin:8rem!important}._margin-top-lg-8,._margin-y-lg-8{margin-top:8rem!important}._margin-right-lg-8,._margin-x-lg-8{margin-right:8rem!important}._margin-bottom-lg-8,._margin-y-lg-8{margin-bottom:8rem!important}._margin-left-lg-8,._margin-x-lg-8{margin-left:8rem!important}._padding-lg-1-2{padding:.5rem!important}._padding-top-lg-1-2,._padding-y-lg-1-2{padding-top:.5rem!important}._padding-right-lg-1-2,._padding-x-lg-1-2{padding-right:.5rem!important}._padding-bottom-lg-1-2,._padding-y-lg-1-2{padding-bottom:.5rem!important}._padding-left-lg-1-2,._padding-x-lg-1-2{padding-left:.5rem!important}._padding-lg-1-3{padding:.33333rem!important}._padding-top-lg-1-3,._padding-y-lg-1-3{padding-top:.33333rem!important}._padding-right-lg-1-3,._padding-x-lg-1-3{padding-right:.33333rem!important}._padding-bottom-lg-1-3,._padding-y-lg-1-3{padding-bottom:.33333rem!important}._padding-left-lg-1-3,._padding-x-lg-1-3{padding-left:.33333rem!important}._padding-lg-2-3{padding:.66667rem!important}._padding-top-lg-2-3,._padding-y-lg-2-3{padding-top:.66667rem!important}._padding-right-lg-2-3,._padding-x-lg-2-3{padding-right:.66667rem!important}._padding-bottom-lg-2-3,._padding-y-lg-2-3{padding-bottom:.66667rem!important}._padding-left-lg-2-3,._padding-x-lg-2-3{padding-left:.66667rem!important}._padding-lg-1-4{padding:.25rem!important}._padding-top-lg-1-4,._padding-y-lg-1-4{padding-top:.25rem!important}._padding-right-lg-1-4,._padding-x-lg-1-4{padding-right:.25rem!important}._padding-bottom-lg-1-4,._padding-y-lg-1-4{padding-bottom:.25rem!important}._padding-left-lg-1-4,._padding-x-lg-1-4{padding-left:.25rem!important}._padding-lg-3-4{padding:.75rem!important}._padding-top-lg-3-4,._padding-y-lg-3-4{padding-top:.75rem!important}._padding-right-lg-3-4,._padding-x-lg-3-4{padding-right:.75rem!important}._padding-bottom-lg-3-4,._padding-y-lg-3-4{padding-bottom:.75rem!important}._padding-left-lg-3-4,._padding-x-lg-3-4{padding-left:.75rem!important}._padding-lg-0{padding:0!important}._padding-top-lg-0,._padding-y-lg-0{padding-top:0!important}._padding-right-lg-0,._padding-x-lg-0{padding-right:0!important}._padding-bottom-lg-0,._padding-y-lg-0{padding-bottom:0!important}._padding-left-lg-0,._padding-x-lg-0{padding-left:0!important}._padding-lg-1{padding:1rem!important}._padding-top-lg-1,._padding-y-lg-1{padding-top:1rem!important}._padding-right-lg-1,._padding-x-lg-1{padding-right:1rem!important}._padding-bottom-lg-1,._padding-y-lg-1{padding-bottom:1rem!important}._padding-left-lg-1,._padding-x-lg-1{padding-left:1rem!important}._padding-lg-2{padding:2rem!important}._padding-top-lg-2,._padding-y-lg-2{padding-top:2rem!important}._padding-right-lg-2,._padding-x-lg-2{padding-right:2rem!important}._padding-bottom-lg-2,._padding-y-lg-2{padding-bottom:2rem!important}._padding-left-lg-2,._padding-x-lg-2{padding-left:2rem!important}._padding-lg-3{padding:3rem!important}._padding-top-lg-3,._padding-y-lg-3{padding-top:3rem!important}._padding-right-lg-3,._padding-x-lg-3{padding-right:3rem!important}._padding-bottom-lg-3,._padding-y-lg-3{padding-bottom:3rem!important}._padding-left-lg-3,._padding-x-lg-3{padding-left:3rem!important}._padding-lg-4{padding:4rem!important}._padding-top-lg-4,._padding-y-lg-4{padding-top:4rem!important}._padding-right-lg-4,._padding-x-lg-4{padding-right:4rem!important}._padding-bottom-lg-4,._padding-y-lg-4{padding-bottom:4rem!important}._padding-left-lg-4,._padding-x-lg-4{padding-left:4rem!important}._padding-lg-5{padding:5rem!important}._padding-top-lg-5,._padding-y-lg-5{padding-top:5rem!important}._padding-right-lg-5,._padding-x-lg-5{padding-right:5rem!important}._padding-bottom-lg-5,._padding-y-lg-5{padding-bottom:5rem!important}._padding-left-lg-5,._padding-x-lg-5{padding-left:5rem!important}._padding-lg-6{padding:6rem!important}._padding-top-lg-6,._padding-y-lg-6{padding-top:6rem!important}._padding-right-lg-6,._padding-x-lg-6{padding-right:6rem!important}._padding-bottom-lg-6,._padding-y-lg-6{padding-bottom:6rem!important}._padding-left-lg-6,._padding-x-lg-6{padding-left:6rem!important}._padding-lg-7{padding:7rem!important}._padding-top-lg-7,._padding-y-lg-7{padding-top:7rem!important}._padding-right-lg-7,._padding-x-lg-7{padding-right:7rem!important}._padding-bottom-lg-7,._padding-y-lg-7{padding-bottom:7rem!important}._padding-left-lg-7,._padding-x-lg-7{padding-left:7rem!important}._padding-lg-8{padding:8rem!important}._padding-top-lg-8,._padding-y-lg-8{padding-top:8rem!important}._padding-right-lg-8,._padding-x-lg-8{padding-right:8rem!important}._padding-bottom-lg-8,._padding-y-lg-8{padding-bottom:8rem!important}._padding-left-lg-8,._padding-x-lg-8{padding-left:8rem!important}._margin-lg-auto{margin:auto!important}._margin-top-lg-auto,._margin-y-lg-auto{margin-top:auto!important}._margin-right-lg-auto,._margin-x-lg-auto{margin-right:auto!important}._margin-bottom-lg-auto,._margin-y-lg-auto{margin-bottom:auto!important}._margin-left-lg-auto,._margin-x-lg-auto{margin-left:auto!important}}@media screen and (min-width:1200px){._margin-xl-1-2{margin:.5rem!important}._margin-top-xl-1-2,._margin-y-xl-1-2{margin-top:.5rem!important}._margin-right-xl-1-2,._margin-x-xl-1-2{margin-right:.5rem!important}._margin-bottom-xl-1-2,._margin-y-xl-1-2{margin-bottom:.5rem!important}._margin-left-xl-1-2,._margin-x-xl-1-2{margin-left:.5rem!important}._margin-xl-1-3{margin:.33333rem!important}._margin-top-xl-1-3,._margin-y-xl-1-3{margin-top:.33333rem!important}._margin-right-xl-1-3,._margin-x-xl-1-3{margin-right:.33333rem!important}._margin-bottom-xl-1-3,._margin-y-xl-1-3{margin-bottom:.33333rem!important}._margin-left-xl-1-3,._margin-x-xl-1-3{margin-left:.33333rem!important}._margin-xl-2-3{margin:.66667rem!important}._margin-top-xl-2-3,._margin-y-xl-2-3{margin-top:.66667rem!important}._margin-right-xl-2-3,._margin-x-xl-2-3{margin-right:.66667rem!important}._margin-bottom-xl-2-3,._margin-y-xl-2-3{margin-bottom:.66667rem!important}._margin-left-xl-2-3,._margin-x-xl-2-3{margin-left:.66667rem!important}._margin-xl-1-4{margin:.25rem!important}._margin-top-xl-1-4,._margin-y-xl-1-4{margin-top:.25rem!important}._margin-right-xl-1-4,._margin-x-xl-1-4{margin-right:.25rem!important}._margin-bottom-xl-1-4,._margin-y-xl-1-4{margin-bottom:.25rem!important}._margin-left-xl-1-4,._margin-x-xl-1-4{margin-left:.25rem!important}._margin-xl-3-4{margin:.75rem!important}._margin-top-xl-3-4,._margin-y-xl-3-4{margin-top:.75rem!important}._margin-right-xl-3-4,._margin-x-xl-3-4{margin-right:.75rem!important}._margin-bottom-xl-3-4,._margin-y-xl-3-4{margin-bottom:.75rem!important}._margin-left-xl-3-4,._margin-x-xl-3-4{margin-left:.75rem!important}._margin-xl-0{margin:0!important}._margin-top-xl-0,._margin-y-xl-0{margin-top:0!important}._margin-right-xl-0,._margin-x-xl-0{margin-right:0!important}._margin-bottom-xl-0,._margin-y-xl-0{margin-bottom:0!important}._margin-left-xl-0,._margin-x-xl-0{margin-left:0!important}._margin-xl-1{margin:1rem!important}._margin-top-xl-1,._margin-y-xl-1{margin-top:1rem!important}._margin-right-xl-1,._margin-x-xl-1{margin-right:1rem!important}._margin-bottom-xl-1,._margin-y-xl-1{margin-bottom:1rem!important}._margin-left-xl-1,._margin-x-xl-1{margin-left:1rem!important}._margin-xl-2{margin:2rem!important}._margin-top-xl-2,._margin-y-xl-2{margin-top:2rem!important}._margin-right-xl-2,._margin-x-xl-2{margin-right:2rem!important}._margin-bottom-xl-2,._margin-y-xl-2{margin-bottom:2rem!important}._margin-left-xl-2,._margin-x-xl-2{margin-left:2rem!important}._margin-xl-3{margin:3rem!important}._margin-top-xl-3,._margin-y-xl-3{margin-top:3rem!important}._margin-right-xl-3,._margin-x-xl-3{margin-right:3rem!important}._margin-bottom-xl-3,._margin-y-xl-3{margin-bottom:3rem!important}._margin-left-xl-3,._margin-x-xl-3{margin-left:3rem!important}._margin-xl-4{margin:4rem!important}._margin-top-xl-4,._margin-y-xl-4{margin-top:4rem!important}._margin-right-xl-4,._margin-x-xl-4{margin-right:4rem!important}._margin-bottom-xl-4,._margin-y-xl-4{margin-bottom:4rem!important}._margin-left-xl-4,._margin-x-xl-4{margin-left:4rem!important}._margin-xl-5{margin:5rem!important}._margin-top-xl-5,._margin-y-xl-5{margin-top:5rem!important}._margin-right-xl-5,._margin-x-xl-5{margin-right:5rem!important}._margin-bottom-xl-5,._margin-y-xl-5{margin-bottom:5rem!important}._margin-left-xl-5,._margin-x-xl-5{margin-left:5rem!important}._margin-xl-6{margin:6rem!important}._margin-top-xl-6,._margin-y-xl-6{margin-top:6rem!important}._margin-right-xl-6,._margin-x-xl-6{margin-right:6rem!important}._margin-bottom-xl-6,._margin-y-xl-6{margin-bottom:6rem!important}._margin-left-xl-6,._margin-x-xl-6{margin-left:6rem!important}._margin-xl-7{margin:7rem!important}._margin-top-xl-7,._margin-y-xl-7{margin-top:7rem!important}._margin-right-xl-7,._margin-x-xl-7{margin-right:7rem!important}._margin-bottom-xl-7,._margin-y-xl-7{margin-bottom:7rem!important}._margin-left-xl-7,._margin-x-xl-7{margin-left:7rem!important}._margin-xl-8{margin:8rem!important}._margin-top-xl-8,._margin-y-xl-8{margin-top:8rem!important}._margin-right-xl-8,._margin-x-xl-8{margin-right:8rem!important}._margin-bottom-xl-8,._margin-y-xl-8{margin-bottom:8rem!important}._margin-left-xl-8,._margin-x-xl-8{margin-left:8rem!important}._padding-xl-1-2{padding:.5rem!important}._padding-top-xl-1-2,._padding-y-xl-1-2{padding-top:.5rem!important}._padding-right-xl-1-2,._padding-x-xl-1-2{padding-right:.5rem!important}._padding-bottom-xl-1-2,._padding-y-xl-1-2{padding-bottom:.5rem!important}._padding-left-xl-1-2,._padding-x-xl-1-2{padding-left:.5rem!important}._padding-xl-1-3{padding:.33333rem!important}._padding-top-xl-1-3,._padding-y-xl-1-3{padding-top:.33333rem!important}._padding-right-xl-1-3,._padding-x-xl-1-3{padding-right:.33333rem!important}._padding-bottom-xl-1-3,._padding-y-xl-1-3{padding-bottom:.33333rem!important}._padding-left-xl-1-3,._padding-x-xl-1-3{padding-left:.33333rem!important}._padding-xl-2-3{padding:.66667rem!important}._padding-top-xl-2-3,._padding-y-xl-2-3{padding-top:.66667rem!important}._padding-right-xl-2-3,._padding-x-xl-2-3{padding-right:.66667rem!important}._padding-bottom-xl-2-3,._padding-y-xl-2-3{padding-bottom:.66667rem!important}._padding-left-xl-2-3,._padding-x-xl-2-3{padding-left:.66667rem!important}._padding-xl-1-4{padding:.25rem!important}._padding-top-xl-1-4,._padding-y-xl-1-4{padding-top:.25rem!important}._padding-right-xl-1-4,._padding-x-xl-1-4{padding-right:.25rem!important}._padding-bottom-xl-1-4,._padding-y-xl-1-4{padding-bottom:.25rem!important}._padding-left-xl-1-4,._padding-x-xl-1-4{padding-left:.25rem!important}._padding-xl-3-4{padding:.75rem!important}._padding-top-xl-3-4,._padding-y-xl-3-4{padding-top:.75rem!important}._padding-right-xl-3-4,._padding-x-xl-3-4{padding-right:.75rem!important}._padding-bottom-xl-3-4,._padding-y-xl-3-4{padding-bottom:.75rem!important}._padding-left-xl-3-4,._padding-x-xl-3-4{padding-left:.75rem!important}._padding-xl-0{padding:0!important}._padding-top-xl-0,._padding-y-xl-0{padding-top:0!important}._padding-right-xl-0,._padding-x-xl-0{padding-right:0!important}._padding-bottom-xl-0,._padding-y-xl-0{padding-bottom:0!important}._padding-left-xl-0,._padding-x-xl-0{padding-left:0!important}._padding-xl-1{padding:1rem!important}._padding-top-xl-1,._padding-y-xl-1{padding-top:1rem!important}._padding-right-xl-1,._padding-x-xl-1{padding-right:1rem!important}._padding-bottom-xl-1,._padding-y-xl-1{padding-bottom:1rem!important}._padding-left-xl-1,._padding-x-xl-1{padding-left:1rem!important}._padding-xl-2{padding:2rem!important}._padding-top-xl-2,._padding-y-xl-2{padding-top:2rem!important}._padding-right-xl-2,._padding-x-xl-2{padding-right:2rem!important}._padding-bottom-xl-2,._padding-y-xl-2{padding-bottom:2rem!important}._padding-left-xl-2,._padding-x-xl-2{padding-left:2rem!important}._padding-xl-3{padding:3rem!important}._padding-top-xl-3,._padding-y-xl-3{padding-top:3rem!important}._padding-right-xl-3,._padding-x-xl-3{padding-right:3rem!important}._padding-bottom-xl-3,._padding-y-xl-3{padding-bottom:3rem!important}._padding-left-xl-3,._padding-x-xl-3{padding-left:3rem!important}._padding-xl-4{padding:4rem!important}._padding-top-xl-4,._padding-y-xl-4{padding-top:4rem!important}._padding-right-xl-4,._padding-x-xl-4{padding-right:4rem!important}._padding-bottom-xl-4,._padding-y-xl-4{padding-bottom:4rem!important}._padding-left-xl-4,._padding-x-xl-4{padding-left:4rem!important}._padding-xl-5{padding:5rem!important}._padding-top-xl-5,._padding-y-xl-5{padding-top:5rem!important}._padding-right-xl-5,._padding-x-xl-5{padding-right:5rem!important}._padding-bottom-xl-5,._padding-y-xl-5{padding-bottom:5rem!important}._padding-left-xl-5,._padding-x-xl-5{padding-left:5rem!important}._padding-xl-6{padding:6rem!important}._padding-top-xl-6,._padding-y-xl-6{padding-top:6rem!important}._padding-right-xl-6,._padding-x-xl-6{padding-right:6rem!important}._padding-bottom-xl-6,._padding-y-xl-6{padding-bottom:6rem!important}._padding-left-xl-6,._padding-x-xl-6{padding-left:6rem!important}._padding-xl-7{padding:7rem!important}._padding-top-xl-7,._padding-y-xl-7{padding-top:7rem!important}._padding-right-xl-7,._padding-x-xl-7{padding-right:7rem!important}._padding-bottom-xl-7,._padding-y-xl-7{padding-bottom:7rem!important}._padding-left-xl-7,._padding-x-xl-7{padding-left:7rem!important}._padding-xl-8{padding:8rem!important}._padding-top-xl-8,._padding-y-xl-8{padding-top:8rem!important}._padding-right-xl-8,._padding-x-xl-8{padding-right:8rem!important}._padding-bottom-xl-8,._padding-y-xl-8{padding-bottom:8rem!important}._padding-left-xl-8,._padding-x-xl-8{padding-left:8rem!important}._margin-xl-auto{margin:auto!important}._margin-top-xl-auto,._margin-y-xl-auto{margin-top:auto!important}._margin-right-xl-auto,._margin-x-xl-auto{margin-right:auto!important}._margin-bottom-xl-auto,._margin-y-xl-auto{margin-bottom:auto!important}._margin-left-xl-auto,._margin-x-xl-auto{margin-left:auto!important}}._margin-1-2{margin:.5rem!important}._margin-top-1-2,._margin-y-1-2{margin-top:.5rem!important}._margin-right-1-2,._margin-x-1-2{margin-right:.5rem!important}._margin-bottom-1-2,._margin-y-1-2{margin-bottom:.5rem!important}._margin-left-1-2,._margin-x-1-2{margin-left:.5rem!important}._margin-1-3{margin:.33333rem!important}._margin-top-1-3,._margin-y-1-3{margin-top:.33333rem!important}._margin-right-1-3,._margin-x-1-3{margin-right:.33333rem!important}._margin-bottom-1-3,._margin-y-1-3{margin-bottom:.33333rem!important}._margin-left-1-3,._margin-x-1-3{margin-left:.33333rem!important}._margin-2-3{margin:.66667rem!important}._margin-top-2-3,._margin-y-2-3{margin-top:.66667rem!important}._margin-right-2-3,._margin-x-2-3{margin-right:.66667rem!important}._margin-bottom-2-3,._margin-y-2-3{margin-bottom:.66667rem!important}._margin-left-2-3,._margin-x-2-3{margin-left:.66667rem!important}._margin-1-4{margin:.25rem!important}._margin-top-1-4,._margin-y-1-4{margin-top:.25rem!important}._margin-right-1-4,._margin-x-1-4{margin-right:.25rem!important}._margin-bottom-1-4,._margin-y-1-4{margin-bottom:.25rem!important}._margin-left-1-4,._margin-x-1-4{margin-left:.25rem!important}._margin-3-4{margin:.75rem!important}._margin-top-3-4,._margin-y-3-4{margin-top:.75rem!important}._margin-right-3-4,._margin-x-3-4{margin-right:.75rem!important}._margin-bottom-3-4,._margin-y-3-4{margin-bottom:.75rem!important}._margin-left-3-4,._margin-x-3-4{margin-left:.75rem!important}._margin-0{margin:0!important}._margin-top-0,._margin-y-0{margin-top:0!important}._margin-right-0,._margin-x-0{margin-right:0!important}._margin-bottom-0,._margin-y-0{margin-bottom:0!important}._margin-left-0,._margin-x-0{margin-left:0!important}._margin-1{margin:1rem!important}._margin-top-1,._margin-y-1{margin-top:1rem!important}._margin-right-1,._margin-x-1{margin-right:1rem!important}._margin-bottom-1,._margin-y-1{margin-bottom:1rem!important}._margin-left-1,._margin-x-1{margin-left:1rem!important}._margin-2{margin:2rem!important}._margin-top-2,._margin-y-2{margin-top:2rem!important}._margin-right-2,._margin-x-2{margin-right:2rem!important}._margin-bottom-2,._margin-y-2{margin-bottom:2rem!important}._margin-left-2,._margin-x-2{margin-left:2rem!important}._margin-3{margin:3rem!important}._margin-top-3,._margin-y-3{margin-top:3rem!important}._margin-right-3,._margin-x-3{margin-right:3rem!important}._margin-bottom-3,._margin-y-3{margin-bottom:3rem!important}._margin-left-3,._margin-x-3{margin-left:3rem!important}._margin-4{margin:4rem!important}._margin-top-4,._margin-y-4{margin-top:4rem!important}._margin-right-4,._margin-x-4{margin-right:4rem!important}._margin-bottom-4,._margin-y-4{margin-bottom:4rem!important}._margin-left-4,._margin-x-4{margin-left:4rem!important}._margin-5{margin:5rem!important}._margin-top-5,._margin-y-5{margin-top:5rem!important}._margin-right-5,._margin-x-5{margin-right:5rem!important}._margin-bottom-5,._margin-y-5{margin-bottom:5rem!important}._margin-left-5,._margin-x-5{margin-left:5rem!important}._margin-6{margin:6rem!important}._margin-top-6,._margin-y-6{margin-top:6rem!important}._margin-right-6,._margin-x-6{margin-right:6rem!important}._margin-bottom-6,._margin-y-6{margin-bottom:6rem!important}._margin-left-6,._margin-x-6{margin-left:6rem!important}._margin-7{margin:7rem!important}._margin-top-7,._margin-y-7{margin-top:7rem!important}._margin-right-7,._margin-x-7{margin-right:7rem!important}._margin-bottom-7,._margin-y-7{margin-bottom:7rem!important}._margin-left-7,._margin-x-7{margin-left:7rem!important}._margin-8{margin:8rem!important}._margin-top-8,._margin-y-8{margin-top:8rem!important}._margin-right-8,._margin-x-8{margin-right:8rem!important}._margin-bottom-8,._margin-y-8{margin-bottom:8rem!important}._margin-left-8,._margin-x-8{margin-left:8rem!important}._padding-1-2{padding:.5rem!important}._padding-top-1-2,._padding-y-1-2{padding-top:.5rem!important}._padding-right-1-2,._padding-x-1-2{padding-right:.5rem!important}._padding-bottom-1-2,._padding-y-1-2{padding-bottom:.5rem!important}._padding-left-1-2,._padding-x-1-2{padding-left:.5rem!important}._padding-1-3{padding:.33333rem!important}._padding-top-1-3,._padding-y-1-3{padding-top:.33333rem!important}._padding-right-1-3,._padding-x-1-3{padding-right:.33333rem!important}._padding-bottom-1-3,._padding-y-1-3{padding-bottom:.33333rem!important}._padding-left-1-3,._padding-x-1-3{padding-left:.33333rem!important}._padding-2-3{padding:.66667rem!important}._padding-top-2-3,._padding-y-2-3{padding-top:.66667rem!important}._padding-right-2-3,._padding-x-2-3{padding-right:.66667rem!important}._padding-bottom-2-3,._padding-y-2-3{padding-bottom:.66667rem!important}._padding-left-2-3,._padding-x-2-3{padding-left:.66667rem!important}._padding-1-4{padding:.25rem!important}._padding-top-1-4,._padding-y-1-4{padding-top:.25rem!important}._padding-right-1-4,._padding-x-1-4{padding-right:.25rem!important}._padding-bottom-1-4,._padding-y-1-4{padding-bottom:.25rem!important}._padding-left-1-4,._padding-x-1-4{padding-left:.25rem!important}._padding-3-4{padding:.75rem!important}._padding-top-3-4,._padding-y-3-4{padding-top:.75rem!important}._padding-right-3-4,._padding-x-3-4{padding-right:.75rem!important}._padding-bottom-3-4,._padding-y-3-4{padding-bottom:.75rem!important}._padding-left-3-4,._padding-x-3-4{padding-left:.75rem!important}._padding-0{padding:0!important}._padding-top-0,._padding-y-0{padding-top:0!important}._padding-right-0,._padding-x-0{padding-right:0!important}._padding-bottom-0,._padding-y-0{padding-bottom:0!important}._padding-left-0,._padding-x-0{padding-left:0!important}._padding-1{padding:1rem!important}._padding-top-1,._padding-y-1{padding-top:1rem!important}._padding-right-1,._padding-x-1{padding-right:1rem!important}._padding-bottom-1,._padding-y-1{padding-bottom:1rem!important}._padding-left-1,._padding-x-1{padding-left:1rem!important}._padding-2{padding:2rem!important}._padding-top-2,._padding-y-2{padding-top:2rem!important}._padding-right-2,._padding-x-2{padding-right:2rem!important}._padding-bottom-2,._padding-y-2{padding-bottom:2rem!important}._padding-left-2,._padding-x-2{padding-left:2rem!important}._padding-3{padding:3rem!important}._padding-top-3,._padding-y-3{padding-top:3rem!important}._padding-right-3,._padding-x-3{padding-right:3rem!important}._padding-bottom-3,._padding-y-3{padding-bottom:3rem!important}._padding-left-3,._padding-x-3{padding-left:3rem!important}._padding-4{padding:4rem!important}._padding-top-4,._padding-y-4{padding-top:4rem!important}._padding-right-4,._padding-x-4{padding-right:4rem!important}._padding-bottom-4,._padding-y-4{padding-bottom:4rem!important}._padding-left-4,._padding-x-4{padding-left:4rem!important}._padding-5{padding:5rem!important}._padding-top-5,._padding-y-5{padding-top:5rem!important}._padding-right-5,._padding-x-5{padding-right:5rem!important}._padding-bottom-5,._padding-y-5{padding-bottom:5rem!important}._padding-left-5,._padding-x-5{padding-left:5rem!important}._padding-6{padding:6rem!important}._padding-top-6,._padding-y-6{padding-top:6rem!important}._padding-right-6,._padding-x-6{padding-right:6rem!important}._padding-bottom-6,._padding-y-6{padding-bottom:6rem!important}._padding-left-6,._padding-x-6{padding-left:6rem!important}._padding-7{padding:7rem!important}._padding-top-7,._padding-y-7{padding-top:7rem!important}._padding-right-7,._padding-x-7{padding-right:7rem!important}._padding-bottom-7,._padding-y-7{padding-bottom:7rem!important}._padding-left-7,._padding-x-7{padding-left:7rem!important}._padding-8{padding:8rem!important}._padding-top-8,._padding-y-8{padding-top:8rem!important}._padding-right-8,._padding-x-8{padding-right:8rem!important}._padding-bottom-8,._padding-y-8{padding-bottom:8rem!important}._padding-left-8,._padding-x-8{padding-left:8rem!important}._margin-auto{margin:auto!important}._margin-top-auto,._margin-y-auto{margin-top:auto!important}._margin-right-auto,._margin-x-auto{margin-right:auto!important}._margin-bottom-auto,._margin-y-auto{margin-bottom:auto!important}._margin-left-auto,._margin-x-auto{margin-left:auto!important}._text-justify{text-align:justify!important}@media screen and (max-width:575px){._text-left-xs{text-align:left!important}._text-right-xs{text-align:right!important}._text-center-xs{text-align:center!important}._text-wrap-xs{white-space:normal!important}._text-nowrap-xs{white-space:nowrap!important}._text-truncate-xs{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:576px) and (max-width:767px){._text-left-sm{text-align:left!important}._text-right-sm{text-align:right!important}._text-center-sm{text-align:center!important}._text-wrap-sm{white-space:normal!important}._text-nowrap-sm{white-space:nowrap!important}._text-truncate-sm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:768px) and (max-width:991px){._text-left-md{text-align:left!important}._text-right-md{text-align:right!important}._text-center-md{text-align:center!important}._text-wrap-md{white-space:normal!important}._text-nowrap-md{white-space:nowrap!important}._text-truncate-md{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:992px) and (max-width:1199px){._text-left-lg{text-align:left!important}._text-right-lg{text-align:right!important}._text-center-lg{text-align:center!important}._text-wrap-lg{white-space:normal!important}._text-nowrap-lg{white-space:nowrap!important}._text-truncate-lg{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:1200px){._text-left-xl{text-align:left!important}._text-right-xl{text-align:right!important}._text-center-xl{text-align:center!important}._text-wrap-xl{white-space:normal!important}._text-nowrap-xl{white-space:nowrap!important}._text-truncate-xl{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}._text-wrap{white-space:normal!important}._text-nowrap{white-space:nowrap!important}._text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._text-lowercase{text-transform:lowercase!important}._text-uppercase{text-transform:uppercase!important}._text-capitalize{text-transform:capitalize!important}._font-weight-extralight{font-weight:200!important}._font-weight-light{font-weight:300!important}._font-weight-lighter{font-weight:lighter!important}._font-weight-normal{font-weight:400!important}._font-weight-semibold{font-weight:600!important}._font-weight-bold{font-weight:700!important}._font-weight-bolder{font-weight:bolder!important}._font-weight-black{font-weight:900!important}._font-italic{font-style:italic!important}._text-muted{color:#868e96!important}._text-hide{text-indent:-10000px}._text-break{word-break:break-word!important;overflow-wrap:break-word!important}._text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}._text-reset{color:inherit!important}._text-decoration-none{text-decoration:none!important}._font-size-sm{font-size:.88rem}._font-size-md{font-size:1.1rem}._font-size-lg{font-size:1.32rem}@media screen and (max-width:575px){._hidden-xs-only{display:none!important}._visible-xs-only{display:block}}._visible-xs-and-down,._visible-xs-and-up,._visible-xs-only{display:none!important}@media screen and (min-width:0){._hidden-xs-and-up{display:none!important}._visible-xs-and-up{display:block!important}}@media screen and (max-width:575px){._hidden-xs-and-down{display:none!important}._visible-xs-and-down{display:block!important}}@media screen and (min-width:576px) and (max-width:767px){._hidden-sm-only{display:none!important}._visible-sm-only{display:block}}._visible-sm-and-down,._visible-sm-and-up,._visible-sm-only{display:none!important}@media screen and (min-width:576px){._hidden-sm-and-up{display:none!important}._visible-sm-and-up{display:block!important}}@media screen and (max-width:767px){._hidden-sm-and-down{display:none!important}._visible-sm-and-down{display:block!important}}@media screen and (min-width:768px) and (max-width:991px){._hidden-md-only{display:none!important}._visible-md-only{display:block}}._visible-md-and-down,._visible-md-and-up,._visible-md-only{display:none!important}@media screen and (min-width:768px){._hidden-md-and-up{display:none!important}._visible-md-and-up{display:block!important}}@media screen and (max-width:991px){._hidden-md-and-down{display:none!important}._visible-md-and-down{display:block!important}}@media screen and (min-width:992px) and (max-width:1199px){._hidden-lg-only{display:none!important}._visible-lg-only{display:block}}._visible-lg-and-down,._visible-lg-and-up,._visible-lg-only{display:none!important}@media screen and (min-width:992px){._hidden-lg-and-up{display:none!important}._visible-lg-and-up{display:block!important}}@media screen and (max-width:1199px){._hidden-lg-and-down{display:none!important}._visible-lg-and-down{display:block!important}}@media screen and (min-width:1200px){._hidden-xl-only{display:none!important}._visible-xl-only{display:block}}._visible-xl-and-down,._visible-xl-and-up,._visible-xl-only{display:none!important}@media screen and (min-width:1200px){._hidden-xl-and-up{display:none!important}._visible-xl-and-up{display:block!important}}._hidden-xl-and-down{display:none!important}._visible-xl-and-down{display:block!important}._hidden-only{display:none!important}._visible-only{display:block}._visibility-visible{visibility:visible}._visibility-hidden{visibility:hidden}.button.-primary{color:#fff;background-color:#37598d;border-color:#37598d}.button.-primary.-disabled,.button.-primary:disabled{opacity:.75}.button.-primary:not(:disabled):not(.-disabled).-hovered,.button.-primary:not(:disabled):not(.-disabled):hover{background-color:#345586;border-color:#345586}.button.-primary:not(:disabled):not(.-disabled).-active,.button.-primary:not(:disabled):not(.-disabled):active{background-color:#304e7b}.button.-primary:not(:disabled):not(.-disabled).-focused,.button.-primary:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(55,89,141,.25)}.button.-primary.-outline{background-color:transparent;color:#37598d}.button.-primary.-outline:not(:disabled):not(.-disabled).-focused,.button.-primary.-outline:not(:disabled):not(.-disabled).-hovered,.button.-primary.-outline:not(:disabled):not(.-disabled):focus,.button.-primary.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#345586;border-color:#345586}.button.-primary.-outline:not(:disabled):not(.-disabled).-active,.button.-primary.-outline:not(:disabled):not(.-disabled):active{background-color:#304e7b}.button.-primary.-link{color:#37598d;background-color:transparent;border-color:transparent}.button.-primary.-link:not(:disabled):not(.-disabled).-focused,.button.-primary.-link:not(:disabled):not(.-disabled).-hovered,.button.-primary.-link:not(:disabled):not(.-disabled):focus,.button.-primary.-link:not(:disabled):not(.-disabled):hover{color:#345586;background-color:transparent;border-color:transparent}.button.-primary ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-primary.-disabled,.inkline.-dark .button.-primary:disabled{opacity:.66}.button.-secondary{color:#fff;background-color:#5d65b9;border-color:#5d65b9}.button.-secondary.-disabled,.button.-secondary:disabled{opacity:.75}.button.-secondary:not(:disabled):not(.-disabled).-hovered,.button.-secondary:not(:disabled):not(.-disabled):hover{background-color:#535cb5;border-color:#535cb5}.button.-secondary:not(:disabled):not(.-disabled).-active,.button.-secondary:not(:disabled):not(.-disabled):active{background-color:#4952aa}.button.-secondary:not(:disabled):not(.-disabled).-focused,.button.-secondary:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(93,101,185,.25)}.button.-secondary.-outline{background-color:transparent;color:#5d65b9}.button.-secondary.-outline:not(:disabled):not(.-disabled).-focused,.button.-secondary.-outline:not(:disabled):not(.-disabled).-hovered,.button.-secondary.-outline:not(:disabled):not(.-disabled):focus,.button.-secondary.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#535cb5;border-color:#535cb5}.button.-secondary.-outline:not(:disabled):not(.-disabled).-active,.button.-secondary.-outline:not(:disabled):not(.-disabled):active{background-color:#4952aa}.button.-secondary.-link{color:#5d65b9;background-color:transparent;border-color:transparent}.button.-secondary.-link:not(:disabled):not(.-disabled).-focused,.button.-secondary.-link:not(:disabled):not(.-disabled).-hovered,.button.-secondary.-link:not(:disabled):not(.-disabled):focus,.button.-secondary.-link:not(:disabled):not(.-disabled):hover{color:#535cb5;background-color:transparent;border-color:transparent}.button.-secondary ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-secondary.-disabled,.inkline.-dark .button.-secondary:disabled{opacity:.66}.button,.button.-light{color:#343a40;background-color:#e9ecef;border-color:#e9ecef}.-disabled.button,.button.-light.-disabled,.button.-light:disabled,.button:disabled{opacity:.75}.button.-light:not(:disabled):not(.-disabled).-hovered,.button.-light:not(:disabled):not(.-disabled):hover,.button:not(:disabled):not(.-disabled).-hovered,.button:not(:disabled):not(.-disabled):hover{background-color:#dbe0e5;border-color:#dbe0e5}.button.-light:not(:disabled):not(.-disabled).-active,.button.-light:not(:disabled):not(.-disabled):active,.button:not(:disabled):not(.-disabled).-active,.button:not(:disabled):not(.-disabled):active{background-color:#c7cfd6}.button.-light:not(:disabled):not(.-disabled).-focused,.button.-light:not(:disabled):not(.-disabled):focus,.button:not(:disabled):not(.-disabled).-focused,.button:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(233,236,239,.25)}.-outline.button,.button.-light.-outline{background-color:transparent;color:#e9ecef}.-outline.button:not(:disabled):not(.-disabled).-focused,.-outline.button:not(:disabled):not(.-disabled).-hovered,.-outline.button:not(:disabled):not(.-disabled):focus,.-outline.button:not(:disabled):not(.-disabled):hover,.button.-light.-outline:not(:disabled):not(.-disabled).-focused,.button.-light.-outline:not(:disabled):not(.-disabled).-hovered,.button.-light.-outline:not(:disabled):not(.-disabled):focus,.button.-light.-outline:not(:disabled):not(.-disabled):hover{color:#343a40;background-color:#dbe0e5;border-color:#dbe0e5}.-outline.button:not(:disabled):not(.-disabled).-active,.-outline.button:not(:disabled):not(.-disabled):active,.button.-light.-outline:not(:disabled):not(.-disabled).-active,.button.-light.-outline:not(:disabled):not(.-disabled):active{background-color:#c7cfd6}.-link.button,.button.-light.-link{color:#e9ecef;background-color:transparent;border-color:transparent}.-link.button:not(:disabled):not(.-disabled).-focused,.-link.button:not(:disabled):not(.-disabled).-hovered,.-link.button:not(:disabled):not(.-disabled):focus,.-link.button:not(:disabled):not(.-disabled):hover,.button.-light.-link:not(:disabled):not(.-disabled).-focused,.button.-light.-link:not(:disabled):not(.-disabled).-hovered,.button.-light.-link:not(:disabled):not(.-disabled):focus,.button.-light.-link:not(:disabled):not(.-disabled):hover{color:#dbe0e5;background-color:transparent;border-color:transparent}.button.-light ::v-deep .loader>.loader-item,.button ::v-deep .loader>.loader-item{background-color:#343a40!important}.inkline.-dark .-disabled.button,.inkline.-dark .button.-light.-disabled,.inkline.-dark .button.-light:disabled,.inkline.-dark .button:disabled{opacity:.66}.button.-dark{color:#fff;background-color:#343a40;border-color:#343a40}.button.-dark.-disabled,.button.-dark:disabled{opacity:.75}.button.-dark:not(:disabled):not(.-disabled).-hovered,.button.-dark:not(:disabled):not(.-disabled):hover{background-color:#31373d;border-color:#31373d}.button.-dark:not(:disabled):not(.-disabled).-active,.button.-dark:not(:disabled):not(.-disabled):active{background-color:#2e3338}.button.-dark:not(:disabled):not(.-disabled).-focused,.button.-dark:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(52,58,64,.25)}.button.-dark.-outline{background-color:transparent;color:#343a40}.button.-dark.-outline:not(:disabled):not(.-disabled).-focused,.button.-dark.-outline:not(:disabled):not(.-disabled).-hovered,.button.-dark.-outline:not(:disabled):not(.-disabled):focus,.button.-dark.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#31373d;border-color:#31373d}.button.-dark.-outline:not(:disabled):not(.-disabled).-active,.button.-dark.-outline:not(:disabled):not(.-disabled):active{background-color:#2e3338}.button.-dark.-link{color:#343a40;background-color:transparent;border-color:transparent}.button.-dark.-link:not(:disabled):not(.-disabled).-focused,.button.-dark.-link:not(:disabled):not(.-disabled).-hovered,.button.-dark.-link:not(:disabled):not(.-disabled):focus,.button.-dark.-link:not(:disabled):not(.-disabled):hover{color:#31373d;background-color:transparent;border-color:transparent}.button.-dark ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-dark.-disabled,.inkline.-dark .button.-dark:disabled{opacity:.66}.button.-success{color:#fff;background-color:#5fb072;border-color:#5fb072}.button.-success.-disabled,.button.-success:disabled{opacity:.75}.button.-success:not(:disabled):not(.-disabled).-hovered,.button.-success:not(:disabled):not(.-disabled):hover{background-color:#56ac6a;border-color:#56ac6a}.button.-success:not(:disabled):not(.-disabled).-active,.button.-success:not(:disabled):not(.-disabled):active{background-color:#4e9f61}.button.-success:not(:disabled):not(.-disabled).-focused,.button.-success:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(95,176,114,.25)}.button.-success.-outline{background-color:transparent;color:#5fb072}.button.-success.-outline:not(:disabled):not(.-disabled).-focused,.button.-success.-outline:not(:disabled):not(.-disabled).-hovered,.button.-success.-outline:not(:disabled):not(.-disabled):focus,.button.-success.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#56ac6a;border-color:#56ac6a}.button.-success.-outline:not(:disabled):not(.-disabled).-active,.button.-success.-outline:not(:disabled):not(.-disabled):active{background-color:#4e9f61}.button.-success.-link{color:#5fb072;background-color:transparent;border-color:transparent}.button.-success.-link:not(:disabled):not(.-disabled).-focused,.button.-success.-link:not(:disabled):not(.-disabled).-hovered,.button.-success.-link:not(:disabled):not(.-disabled):focus,.button.-success.-link:not(:disabled):not(.-disabled):hover{color:#56ac6a;background-color:transparent;border-color:transparent}.button.-success ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-success.-disabled,.inkline.-dark .button.-success:disabled{opacity:.66}.button.-danger{color:#fff;background-color:#f25f5c;border-color:#f25f5c}.button.-danger.-disabled,.button.-danger:disabled{opacity:.75}.button.-danger:not(:disabled):not(.-disabled).-hovered,.button.-danger:not(:disabled):not(.-disabled):hover{background-color:#f1504d;border-color:#f1504d}.button.-danger:not(:disabled):not(.-disabled).-active,.button.-danger:not(:disabled):not(.-disabled):active{background-color:#ef3935}.button.-danger:not(:disabled):not(.-disabled).-focused,.button.-danger:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(242,95,92,.25)}.button.-danger.-outline{background-color:transparent;color:#f25f5c}.button.-danger.-outline:not(:disabled):not(.-disabled).-focused,.button.-danger.-outline:not(:disabled):not(.-disabled).-hovered,.button.-danger.-outline:not(:disabled):not(.-disabled):focus,.button.-danger.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#f1504d;border-color:#f1504d}.button.-danger.-outline:not(:disabled):not(.-disabled).-active,.button.-danger.-outline:not(:disabled):not(.-disabled):active{background-color:#ef3935}.button.-danger.-link{color:#f25f5c;background-color:transparent;border-color:transparent}.button.-danger.-link:not(:disabled):not(.-disabled).-focused,.button.-danger.-link:not(:disabled):not(.-disabled).-hovered,.button.-danger.-link:not(:disabled):not(.-disabled):focus,.button.-danger.-link:not(:disabled):not(.-disabled):hover{color:#f1504d;background-color:transparent;border-color:transparent}.button.-danger ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-danger.-disabled,.inkline.-dark .button.-danger:disabled{opacity:.66}.button.-warning{color:#fff;background-color:#f1ac53;border-color:#f1ac53}.button.-warning.-disabled,.button.-warning:disabled{opacity:.75}.button.-warning:not(:disabled):not(.-disabled).-hovered,.button.-warning:not(:disabled):not(.-disabled):hover{background-color:#f0a544;border-color:#f0a544}.button.-warning:not(:disabled):not(.-disabled).-active,.button.-warning:not(:disabled):not(.-disabled):active{background-color:#ee9a2e}.button.-warning:not(:disabled):not(.-disabled).-focused,.button.-warning:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(241,172,83,.25)}.button.-warning.-outline{background-color:transparent;color:#f1ac53}.button.-warning.-outline:not(:disabled):not(.-disabled).-focused,.button.-warning.-outline:not(:disabled):not(.-disabled).-hovered,.button.-warning.-outline:not(:disabled):not(.-disabled):focus,.button.-warning.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#f0a544;border-color:#f0a544}.button.-warning.-outline:not(:disabled):not(.-disabled).-active,.button.-warning.-outline:not(:disabled):not(.-disabled):active{background-color:#ee9a2e}.button.-warning.-link{color:#f1ac53;background-color:transparent;border-color:transparent}.button.-warning.-link:not(:disabled):not(.-disabled).-focused,.button.-warning.-link:not(:disabled):not(.-disabled).-hovered,.button.-warning.-link:not(:disabled):not(.-disabled):focus,.button.-warning.-link:not(:disabled):not(.-disabled):hover{color:#f0a544;background-color:transparent;border-color:transparent}.button.-warning ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-warning.-disabled,.inkline.-dark .button.-warning:disabled{opacity:.66}.button.-info{color:#fff;background-color:#62bec1;border-color:#62bec1}.button.-info.-disabled,.button.-info:disabled{opacity:.75}.button.-info:not(:disabled):not(.-disabled).-hovered,.button.-info:not(:disabled):not(.-disabled):hover{background-color:#58babd;border-color:#58babd}.button.-info:not(:disabled):not(.-disabled).-active,.button.-info:not(:disabled):not(.-disabled):active{background-color:#48b3b7}.button.-info:not(:disabled):not(.-disabled).-focused,.button.-info:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(98,190,193,.25)}.button.-info.-outline{background-color:transparent;color:#62bec1}.button.-info.-outline:not(:disabled):not(.-disabled).-focused,.button.-info.-outline:not(:disabled):not(.-disabled).-hovered,.button.-info.-outline:not(:disabled):not(.-disabled):focus,.button.-info.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#58babd;border-color:#58babd}.button.-info.-outline:not(:disabled):not(.-disabled).-active,.button.-info.-outline:not(:disabled):not(.-disabled):active{background-color:#48b3b7}.button.-info.-link{color:#62bec1;background-color:transparent;border-color:transparent}.button.-info.-link:not(:disabled):not(.-disabled).-focused,.button.-info.-link:not(:disabled):not(.-disabled).-hovered,.button.-info.-link:not(:disabled):not(.-disabled):focus,.button.-info.-link:not(:disabled):not(.-disabled):hover{color:#58babd;background-color:transparent;border-color:transparent}.button.-info ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-info.-disabled,.inkline.-dark .button.-info:disabled{opacity:.66}.button.-facebook{color:#fff;background-color:#3b5998;border-color:#3b5998}.button.-facebook.-disabled,.button.-facebook:disabled{opacity:.75}.button.-facebook:not(:disabled):not(.-disabled).-hovered,.button.-facebook:not(:disabled):not(.-disabled):hover{background-color:#385590;border-color:#385590}.button.-facebook:not(:disabled):not(.-disabled).-active,.button.-facebook:not(:disabled):not(.-disabled):active{background-color:#344e85}.button.-facebook:not(:disabled):not(.-disabled).-focused,.button.-facebook:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(59,89,152,.25)}.button.-facebook.-outline{background-color:transparent;color:#3b5998}.button.-facebook.-outline:not(:disabled):not(.-disabled).-focused,.button.-facebook.-outline:not(:disabled):not(.-disabled).-hovered,.button.-facebook.-outline:not(:disabled):not(.-disabled):focus,.button.-facebook.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#385590;border-color:#385590}.button.-facebook.-outline:not(:disabled):not(.-disabled).-active,.button.-facebook.-outline:not(:disabled):not(.-disabled):active{background-color:#344e85}.button.-facebook.-link{color:#3b5998;background-color:transparent;border-color:transparent}.button.-facebook.-link:not(:disabled):not(.-disabled).-focused,.button.-facebook.-link:not(:disabled):not(.-disabled).-hovered,.button.-facebook.-link:not(:disabled):not(.-disabled):focus,.button.-facebook.-link:not(:disabled):not(.-disabled):hover{color:#385590;background-color:transparent;border-color:transparent}.button.-facebook ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-facebook.-disabled,.inkline.-dark .button.-facebook:disabled{opacity:.66}.button.-twitter{color:#fff;background-color:#1da1f2;border-color:#1da1f2}.button.-twitter.-disabled,.button.-twitter:disabled{opacity:.75}.button.-twitter:not(:disabled):not(.-disabled).-hovered,.button.-twitter:not(:disabled):not(.-disabled):hover{background-color:#109cf1;border-color:#109cf1}.button.-twitter:not(:disabled):not(.-disabled).-active,.button.-twitter:not(:disabled):not(.-disabled):active{background-color:#0d90e0}.button.-twitter:not(:disabled):not(.-disabled).-focused,.button.-twitter:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(29,161,242,.25)}.button.-twitter.-outline{background-color:transparent;color:#1da1f2}.button.-twitter.-outline:not(:disabled):not(.-disabled).-focused,.button.-twitter.-outline:not(:disabled):not(.-disabled).-hovered,.button.-twitter.-outline:not(:disabled):not(.-disabled):focus,.button.-twitter.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#109cf1;border-color:#109cf1}.button.-twitter.-outline:not(:disabled):not(.-disabled).-active,.button.-twitter.-outline:not(:disabled):not(.-disabled):active{background-color:#0d90e0}.button.-twitter.-link{color:#1da1f2;background-color:transparent;border-color:transparent}.button.-twitter.-link:not(:disabled):not(.-disabled).-focused,.button.-twitter.-link:not(:disabled):not(.-disabled).-hovered,.button.-twitter.-link:not(:disabled):not(.-disabled):focus,.button.-twitter.-link:not(:disabled):not(.-disabled):hover{color:#109cf1;background-color:transparent;border-color:transparent}.button.-twitter ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-twitter.-disabled,.inkline.-dark .button.-twitter:disabled{opacity:.66}.button.-google{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.button.-google.-disabled,.button.-google:disabled{opacity:.75}.button.-google:not(:disabled):not(.-disabled).-hovered,.button.-google:not(:disabled):not(.-disabled):hover{background-color:#db402d;border-color:#db402d}.button.-google:not(:disabled):not(.-disabled).-active,.button.-google:not(:disabled):not(.-disabled):active{background-color:#d03724}.button.-google:not(:disabled):not(.-disabled).-focused,.button.-google:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(221,75,57,.25)}.button.-google.-outline{background-color:transparent;color:#dd4b39}.button.-google.-outline:not(:disabled):not(.-disabled).-focused,.button.-google.-outline:not(:disabled):not(.-disabled).-hovered,.button.-google.-outline:not(:disabled):not(.-disabled):focus,.button.-google.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#db402d;border-color:#db402d}.button.-google.-outline:not(:disabled):not(.-disabled).-active,.button.-google.-outline:not(:disabled):not(.-disabled):active{background-color:#d03724}.button.-google.-link{color:#dd4b39;background-color:transparent;border-color:transparent}.button.-google.-link:not(:disabled):not(.-disabled).-focused,.button.-google.-link:not(:disabled):not(.-disabled).-hovered,.button.-google.-link:not(:disabled):not(.-disabled):focus,.button.-google.-link:not(:disabled):not(.-disabled):hover{color:#db402d;background-color:transparent;border-color:transparent}.button.-google ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-google.-disabled,.inkline.-dark .button.-google:disabled{opacity:.66}.button.-instagram{color:#fff;background-color:#fd1d1d;border-color:#fd1d1d}.button.-instagram.-disabled,.button.-instagram:disabled{opacity:.75}.button.-instagram:not(:disabled):not(.-disabled).-hovered,.button.-instagram:not(:disabled):not(.-disabled):hover{background-color:#fd0f0f;border-color:#fd0f0f}.button.-instagram:not(:disabled):not(.-disabled).-active,.button.-instagram:not(:disabled):not(.-disabled):active{background-color:#f50202}.button.-instagram:not(:disabled):not(.-disabled).-focused,.button.-instagram:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(253,29,29,.25)}.button.-instagram.-outline{background-color:transparent;color:#fd1d1d}.button.-instagram.-outline:not(:disabled):not(.-disabled).-focused,.button.-instagram.-outline:not(:disabled):not(.-disabled).-hovered,.button.-instagram.-outline:not(:disabled):not(.-disabled):focus,.button.-instagram.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#fd0f0f;border-color:#fd0f0f}.button.-instagram.-outline:not(:disabled):not(.-disabled).-active,.button.-instagram.-outline:not(:disabled):not(.-disabled):active{background-color:#f50202}.button.-instagram.-link{color:#fd1d1d;background-color:transparent;border-color:transparent}.button.-instagram.-link:not(:disabled):not(.-disabled).-focused,.button.-instagram.-link:not(:disabled):not(.-disabled).-hovered,.button.-instagram.-link:not(:disabled):not(.-disabled):focus,.button.-instagram.-link:not(:disabled):not(.-disabled):hover{color:#fd0f0f;background-color:transparent;border-color:transparent}.button.-instagram ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-instagram.-disabled,.inkline.-dark .button.-instagram:disabled{opacity:.66}.button.-dribbble{color:#fff;background-color:#ea4c89;border-color:#ea4c89}.button.-dribbble.-disabled,.button.-dribbble:disabled{opacity:.75}.button.-dribbble:not(:disabled):not(.-disabled).-hovered,.button.-dribbble:not(:disabled):not(.-disabled):hover{background-color:#e83e80;border-color:#e83e80}.button.-dribbble:not(:disabled):not(.-disabled).-active,.button.-dribbble:not(:disabled):not(.-disabled):active{background-color:#e62972}.button.-dribbble:not(:disabled):not(.-disabled).-focused,.button.-dribbble:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(234,76,137,.25)}.button.-dribbble.-outline{background-color:transparent;color:#ea4c89}.button.-dribbble.-outline:not(:disabled):not(.-disabled).-focused,.button.-dribbble.-outline:not(:disabled):not(.-disabled).-hovered,.button.-dribbble.-outline:not(:disabled):not(.-disabled):focus,.button.-dribbble.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#e83e80;border-color:#e83e80}.button.-dribbble.-outline:not(:disabled):not(.-disabled).-active,.button.-dribbble.-outline:not(:disabled):not(.-disabled):active{background-color:#e62972}.button.-dribbble.-link{color:#ea4c89;background-color:transparent;border-color:transparent}.button.-dribbble.-link:not(:disabled):not(.-disabled).-focused,.button.-dribbble.-link:not(:disabled):not(.-disabled).-hovered,.button.-dribbble.-link:not(:disabled):not(.-disabled):focus,.button.-dribbble.-link:not(:disabled):not(.-disabled):hover{color:#e83e80;background-color:transparent;border-color:transparent}.button.-dribbble ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-dribbble.-disabled,.inkline.-dark .button.-dribbble:disabled{opacity:.66}.button.-behance{color:#fff;background-color:#1769ff;border-color:#1769ff}.button.-behance.-disabled,.button.-behance:disabled{opacity:.75}.button.-behance:not(:disabled):not(.-disabled).-hovered,.button.-behance:not(:disabled):not(.-disabled):hover{background-color:#0960ff;border-color:#0960ff}.button.-behance:not(:disabled):not(.-disabled).-active,.button.-behance:not(:disabled):not(.-disabled):active{background-color:#0056f3}.button.-behance:not(:disabled):not(.-disabled).-focused,.button.-behance:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(23,105,255,.25)}.button.-behance.-outline{background-color:transparent;color:#1769ff}.button.-behance.-outline:not(:disabled):not(.-disabled).-focused,.button.-behance.-outline:not(:disabled):not(.-disabled).-hovered,.button.-behance.-outline:not(:disabled):not(.-disabled):focus,.button.-behance.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#0960ff;border-color:#0960ff}.button.-behance.-outline:not(:disabled):not(.-disabled).-active,.button.-behance.-outline:not(:disabled):not(.-disabled):active{background-color:#0056f3}.button.-behance.-link{color:#1769ff;background-color:transparent;border-color:transparent}.button.-behance.-link:not(:disabled):not(.-disabled).-focused,.button.-behance.-link:not(:disabled):not(.-disabled).-hovered,.button.-behance.-link:not(:disabled):not(.-disabled):focus,.button.-behance.-link:not(:disabled):not(.-disabled):hover{color:#0960ff;background-color:transparent;border-color:transparent}.button.-behance ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-behance.-disabled,.inkline.-dark .button.-behance:disabled{opacity:.66}.button.-flickr{color:#fff;background-color:#ff0084;border-color:#ff0084}.button.-flickr.-disabled,.button.-flickr:disabled{opacity:.75}.button.-flickr:not(:disabled):not(.-disabled).-hovered,.button.-flickr:not(:disabled):not(.-disabled):hover{background-color:#f2007d;border-color:#f2007d}.button.-flickr:not(:disabled):not(.-disabled).-active,.button.-flickr:not(:disabled):not(.-disabled):active{background-color:#df0074}.button.-flickr:not(:disabled):not(.-disabled).-focused,.button.-flickr:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(255,0,132,.25)}.button.-flickr.-outline{background-color:transparent;color:#ff0084}.button.-flickr.-outline:not(:disabled):not(.-disabled).-focused,.button.-flickr.-outline:not(:disabled):not(.-disabled).-hovered,.button.-flickr.-outline:not(:disabled):not(.-disabled):focus,.button.-flickr.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#f2007d;border-color:#f2007d}.button.-flickr.-outline:not(:disabled):not(.-disabled).-active,.button.-flickr.-outline:not(:disabled):not(.-disabled):active{background-color:#df0074}.button.-flickr.-link{color:#ff0084;background-color:transparent;border-color:transparent}.button.-flickr.-link:not(:disabled):not(.-disabled).-focused,.button.-flickr.-link:not(:disabled):not(.-disabled).-hovered,.button.-flickr.-link:not(:disabled):not(.-disabled):focus,.button.-flickr.-link:not(:disabled):not(.-disabled):hover{color:#f2007d;background-color:transparent;border-color:transparent}.button.-flickr ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-flickr.-disabled,.inkline.-dark .button.-flickr:disabled{opacity:.66}.button.-linkedin{color:#fff;background-color:#0077b5;border-color:#0077b5}.button.-linkedin.-disabled,.button.-linkedin:disabled{opacity:.75}.button.-linkedin:not(:disabled):not(.-disabled).-hovered,.button.-linkedin:not(:disabled):not(.-disabled):hover{background-color:#0071ac;border-color:#0071ac}.button.-linkedin:not(:disabled):not(.-disabled).-active,.button.-linkedin:not(:disabled):not(.-disabled):active{background-color:#00689e}.button.-linkedin:not(:disabled):not(.-disabled).-focused,.button.-linkedin:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(0,119,181,.25)}.button.-linkedin.-outline{background-color:transparent;color:#0077b5}.button.-linkedin.-outline:not(:disabled):not(.-disabled).-focused,.button.-linkedin.-outline:not(:disabled):not(.-disabled).-hovered,.button.-linkedin.-outline:not(:disabled):not(.-disabled):focus,.button.-linkedin.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#0071ac;border-color:#0071ac}.button.-linkedin.-outline:not(:disabled):not(.-disabled).-active,.button.-linkedin.-outline:not(:disabled):not(.-disabled):active{background-color:#00689e}.button.-linkedin.-link{color:#0077b5;background-color:transparent;border-color:transparent}.button.-linkedin.-link:not(:disabled):not(.-disabled).-focused,.button.-linkedin.-link:not(:disabled):not(.-disabled).-hovered,.button.-linkedin.-link:not(:disabled):not(.-disabled):focus,.button.-linkedin.-link:not(:disabled):not(.-disabled):hover{color:#0071ac;background-color:transparent;border-color:transparent}.button.-linkedin ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-linkedin.-disabled,.inkline.-dark .button.-linkedin:disabled{opacity:.66}.button.-youtube{color:#fff;background-color:#b31217;border-color:#b31217}.button.-youtube.-disabled,.button.-youtube:disabled{opacity:.75}.button.-youtube:not(:disabled):not(.-disabled).-hovered,.button.-youtube:not(:disabled):not(.-disabled):hover{background-color:#aa1116;border-color:#aa1116}.button.-youtube:not(:disabled):not(.-disabled).-active,.button.-youtube:not(:disabled):not(.-disabled):active{background-color:#9d1014}.button.-youtube:not(:disabled):not(.-disabled).-focused,.button.-youtube:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(179,18,23,.25)}.button.-youtube.-outline{background-color:transparent;color:#b31217}.button.-youtube.-outline:not(:disabled):not(.-disabled).-focused,.button.-youtube.-outline:not(:disabled):not(.-disabled).-hovered,.button.-youtube.-outline:not(:disabled):not(.-disabled):focus,.button.-youtube.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#aa1116;border-color:#aa1116}.button.-youtube.-outline:not(:disabled):not(.-disabled).-active,.button.-youtube.-outline:not(:disabled):not(.-disabled):active{background-color:#9d1014}.button.-youtube.-link{color:#b31217;background-color:transparent;border-color:transparent}.button.-youtube.-link:not(:disabled):not(.-disabled).-focused,.button.-youtube.-link:not(:disabled):not(.-disabled).-hovered,.button.-youtube.-link:not(:disabled):not(.-disabled):focus,.button.-youtube.-link:not(:disabled):not(.-disabled):hover{color:#aa1116;background-color:transparent;border-color:transparent}.button.-youtube ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-youtube.-disabled,.inkline.-dark .button.-youtube:disabled{opacity:.66}.button.-pinterest{color:#fff;background-color:#bd081c;border-color:#bd081c}.button.-pinterest.-disabled,.button.-pinterest:disabled{opacity:.75}.button.-pinterest:not(:disabled):not(.-disabled).-hovered,.button.-pinterest:not(:disabled):not(.-disabled):hover{background-color:#b4081b;border-color:#b4081b}.button.-pinterest:not(:disabled):not(.-disabled).-active,.button.-pinterest:not(:disabled):not(.-disabled):active{background-color:#a50719}.button.-pinterest:not(:disabled):not(.-disabled).-focused,.button.-pinterest:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(189,8,28,.25)}.button.-pinterest.-outline{background-color:transparent;color:#bd081c}.button.-pinterest.-outline:not(:disabled):not(.-disabled).-focused,.button.-pinterest.-outline:not(:disabled):not(.-disabled).-hovered,.button.-pinterest.-outline:not(:disabled):not(.-disabled):focus,.button.-pinterest.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#b4081b;border-color:#b4081b}.button.-pinterest.-outline:not(:disabled):not(.-disabled).-active,.button.-pinterest.-outline:not(:disabled):not(.-disabled):active{background-color:#a50719}.button.-pinterest.-link{color:#bd081c;background-color:transparent;border-color:transparent}.button.-pinterest.-link:not(:disabled):not(.-disabled).-focused,.button.-pinterest.-link:not(:disabled):not(.-disabled).-hovered,.button.-pinterest.-link:not(:disabled):not(.-disabled):focus,.button.-pinterest.-link:not(:disabled):not(.-disabled):hover{color:#b4081b;background-color:transparent;border-color:transparent}.button.-pinterest ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-pinterest.-disabled,.inkline.-dark .button.-pinterest:disabled{opacity:.66}.button.-github{color:#fff;background-color:#333;border-color:#333}.button.-github.-disabled,.button.-github:disabled{opacity:.75}.button.-github:not(:disabled):not(.-disabled).-hovered,.button.-github:not(:disabled):not(.-disabled):hover{background-color:#303030;border-color:#303030}.button.-github:not(:disabled):not(.-disabled).-active,.button.-github:not(:disabled):not(.-disabled):active{background-color:#2d2d2d}.button.-github:not(:disabled):not(.-disabled).-focused,.button.-github:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(51,51,51,.25)}.button.-github.-outline{background-color:transparent;color:#333}.button.-github.-outline:not(:disabled):not(.-disabled).-focused,.button.-github.-outline:not(:disabled):not(.-disabled).-hovered,.button.-github.-outline:not(:disabled):not(.-disabled):focus,.button.-github.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#303030;border-color:#303030}.button.-github.-outline:not(:disabled):not(.-disabled).-active,.button.-github.-outline:not(:disabled):not(.-disabled):active{background-color:#2d2d2d}.button.-github.-link{color:#333;background-color:transparent;border-color:transparent}.button.-github.-link:not(:disabled):not(.-disabled).-focused,.button.-github.-link:not(:disabled):not(.-disabled).-hovered,.button.-github.-link:not(:disabled):not(.-disabled):focus,.button.-github.-link:not(:disabled):not(.-disabled):hover{color:#303030;background-color:transparent;border-color:transparent}.button.-github ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-github.-disabled,.inkline.-dark .button.-github:disabled{opacity:.66}.button.-tumblr{color:#fff;background-color:#35465c;border-color:#35465c}.button.-tumblr.-disabled,.button.-tumblr:disabled{opacity:.75}.button.-tumblr:not(:disabled):not(.-disabled).-hovered,.button.-tumblr:not(:disabled):not(.-disabled):hover{background-color:#324357;border-color:#324357}.button.-tumblr:not(:disabled):not(.-disabled).-active,.button.-tumblr:not(:disabled):not(.-disabled):active{background-color:#2e3d51}.button.-tumblr:not(:disabled):not(.-disabled).-focused,.button.-tumblr:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(53,70,92,.25)}.button.-tumblr.-outline{background-color:transparent;color:#35465c}.button.-tumblr.-outline:not(:disabled):not(.-disabled).-focused,.button.-tumblr.-outline:not(:disabled):not(.-disabled).-hovered,.button.-tumblr.-outline:not(:disabled):not(.-disabled):focus,.button.-tumblr.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#324357;border-color:#324357}.button.-tumblr.-outline:not(:disabled):not(.-disabled).-active,.button.-tumblr.-outline:not(:disabled):not(.-disabled):active{background-color:#2e3d51}.button.-tumblr.-link{color:#35465c;background-color:transparent;border-color:transparent}.button.-tumblr.-link:not(:disabled):not(.-disabled).-focused,.button.-tumblr.-link:not(:disabled):not(.-disabled).-hovered,.button.-tumblr.-link:not(:disabled):not(.-disabled):focus,.button.-tumblr.-link:not(:disabled):not(.-disabled):hover{color:#324357;background-color:transparent;border-color:transparent}.button.-tumblr ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-tumblr.-disabled,.inkline.-dark .button.-tumblr:disabled{opacity:.66}.button.-twitch{color:#fff;background-color:#6441a5;border-color:#6441a5}.button.-twitch.-disabled,.button.-twitch:disabled{opacity:.75}.button.-twitch:not(:disabled):not(.-disabled).-hovered,.button.-twitch:not(:disabled):not(.-disabled):hover{background-color:#5f3e9d;border-color:#5f3e9d}.button.-twitch:not(:disabled):not(.-disabled).-active,.button.-twitch:not(:disabled):not(.-disabled):active{background-color:#583990}.button.-twitch:not(:disabled):not(.-disabled).-focused,.button.-twitch:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(100,65,165,.25)}.button.-twitch.-outline{background-color:transparent;color:#6441a5}.button.-twitch.-outline:not(:disabled):not(.-disabled).-focused,.button.-twitch.-outline:not(:disabled):not(.-disabled).-hovered,.button.-twitch.-outline:not(:disabled):not(.-disabled):focus,.button.-twitch.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#5f3e9d;border-color:#5f3e9d}.button.-twitch.-outline:not(:disabled):not(.-disabled).-active,.button.-twitch.-outline:not(:disabled):not(.-disabled):active{background-color:#583990}.button.-twitch.-link{color:#6441a5;background-color:transparent;border-color:transparent}.button.-twitch.-link:not(:disabled):not(.-disabled).-focused,.button.-twitch.-link:not(:disabled):not(.-disabled).-hovered,.button.-twitch.-link:not(:disabled):not(.-disabled):focus,.button.-twitch.-link:not(:disabled):not(.-disabled):hover{color:#5f3e9d;background-color:transparent;border-color:transparent}.button.-twitch ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-twitch.-disabled,.inkline.-dark .button.-twitch:disabled{opacity:.66}.button.-envato{color:#fff;background-color:#82b541;border-color:#82b541}.button.-envato.-disabled,.button.-envato:disabled{opacity:.75}.button.-envato:not(:disabled):not(.-disabled).-hovered,.button.-envato:not(:disabled):not(.-disabled):hover{background-color:#7cac3e;border-color:#7cac3e}.button.-envato:not(:disabled):not(.-disabled).-active,.button.-envato:not(:disabled):not(.-disabled):active{background-color:#729e39}.button.-envato:not(:disabled):not(.-disabled).-focused,.button.-envato:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(130,181,65,.25)}.button.-envato.-outline{background-color:transparent;color:#82b541}.button.-envato.-outline:not(:disabled):not(.-disabled).-focused,.button.-envato.-outline:not(:disabled):not(.-disabled).-hovered,.button.-envato.-outline:not(:disabled):not(.-disabled):focus,.button.-envato.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#7cac3e;border-color:#7cac3e}.button.-envato.-outline:not(:disabled):not(.-disabled).-active,.button.-envato.-outline:not(:disabled):not(.-disabled):active{background-color:#729e39}.button.-envato.-link{color:#82b541;background-color:transparent;border-color:transparent}.button.-envato.-link:not(:disabled):not(.-disabled).-focused,.button.-envato.-link:not(:disabled):not(.-disabled).-hovered,.button.-envato.-link:not(:disabled):not(.-disabled):focus,.button.-envato.-link:not(:disabled):not(.-disabled):hover{color:#7cac3e;background-color:transparent;border-color:transparent}.button.-envato ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-envato.-disabled,.inkline.-dark .button.-envato:disabled{opacity:.66}.button.-vine{color:#fff;background-color:#00bf8f;border-color:#00bf8f}.button.-vine.-disabled,.button.-vine:disabled{opacity:.75}.button.-vine:not(:disabled):not(.-disabled).-hovered,.button.-vine:not(:disabled):not(.-disabled):hover{background-color:#00b588;border-color:#00b588}.button.-vine:not(:disabled):not(.-disabled).-active,.button.-vine:not(:disabled):not(.-disabled):active{background-color:#00a77d}.button.-vine:not(:disabled):not(.-disabled).-focused,.button.-vine:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(0,191,143,.25)}.button.-vine.-outline{background-color:transparent;color:#00bf8f}.button.-vine.-outline:not(:disabled):not(.-disabled).-focused,.button.-vine.-outline:not(:disabled):not(.-disabled).-hovered,.button.-vine.-outline:not(:disabled):not(.-disabled):focus,.button.-vine.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#00b588;border-color:#00b588}.button.-vine.-outline:not(:disabled):not(.-disabled).-active,.button.-vine.-outline:not(:disabled):not(.-disabled):active{background-color:#00a77d}.button.-vine.-link{color:#00bf8f;background-color:transparent;border-color:transparent}.button.-vine.-link:not(:disabled):not(.-disabled).-focused,.button.-vine.-link:not(:disabled):not(.-disabled).-hovered,.button.-vine.-link:not(:disabled):not(.-disabled):focus,.button.-vine.-link:not(:disabled):not(.-disabled):hover{color:#00b588;background-color:transparent;border-color:transparent}.button.-vine ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-vine.-disabled,.inkline.-dark .button.-vine:disabled{opacity:.66}.button.-sm,.form-group.-sm>.button,.form.-sm>.button,.form.-sm>.form-group>.button{border-radius:.2rem;font-size:.88rem;padding:.4rem 1.6rem}.button.-sm.-circle,.form-group.-sm>.button.-circle,.form.-sm>.button.-circle,.form.-sm>.form-group>.button.-circle{border-radius:100%;width:2.16rem;height:2.16rem;padding:0}.button.-sm>.loader.-auto,.form-group.-sm>.button>.loader.-auto,.form.-sm>.button>.loader.-auto,.form.-sm>.form-group>.button>.loader.-auto{margin:.22rem 0;width:.88rem;height:.88rem}.button,.button.-md,.form-group.-md>.button,.form-group>.button,.form.-md>.button,.form.-md>.form-group>.button{border-radius:.25rem;font-size:1.1rem;padding:.5rem 2rem}.-circle.button,.button.-md.-circle,.form-group.-md>.button.-circle,.form-group>.button.-circle,.form.-md>.button.-circle,.form.-md>.form-group>.button.-circle{border-radius:100%;width:2.7rem;height:2.7rem;padding:0}.button.-md>.loader.-auto,.button>.loader.-auto,.form-group.-md>.button>.loader.-auto,.form-group>.button>.loader.-auto,.form.-md>.button>.loader.-auto,.form.-md>.form-group>.button>.loader.-auto{margin:.275rem 0;width:1.1rem;height:1.1rem}.button.-lg,.form-group.-lg>.button,.form.-lg>.button,.form.-lg>.form-group>.button{border-radius:.3rem;font-size:1.32rem;padding:.6rem 2.4rem}.button.-lg.-circle,.form-group.-lg>.button.-circle,.form.-lg>.button.-circle,.form.-lg>.form-group>.button.-circle{border-radius:100%;width:3.24rem;height:3.24rem;padding:0}.button.-lg>.loader.-auto,.form-group.-lg>.button>.loader.-auto,.form.-lg>.button>.loader.-auto,.form.-lg>.form-group>.button>.loader.-auto{margin:.33rem 0;width:1.32rem;height:1.32rem}.button{display:inline-flex;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;line-height:1.5;justify-content:center;align-items:center;transition:background-color .21s ease,border-color .21s ease,color .21s ease}.button:not(:disabled):not(.-disabled){cursor:pointer}.button:not(:disabled):not(.-disabled).-focused,.button:not(:disabled):not(.-disabled).-hovered,.button:not(:disabled):not(.-disabled):focus,.button:not(:disabled):not(.-disabled):hover{text-decoration:none;outline:0}.button.-disabled,.button:disabled{box-shadow:none}.button.-block{display:block;width:100%}.button.-block+.button.-block{margin-left:0;margin-top:1rem}.button.-link{box-shadow:none}.button.-link:not(:disabled):not(.-disabled).-focused,.button.-link:not(:disabled):not(.-disabled).-hovered,.button.-link:not(:disabled):not(.-disabled):focus,.button.-link:not(:disabled):not(.-disabled):hover{box-shadow:none;text-decoration:underline}.button.-link.-disabled,.button.-link:disabled{pointer-events:none}.button.-outline{background-color:transparent}.button.-circle{border-radius:100%}.button.-transparent{background-color:transparent}.button.-flat{background-image:none}a.button.-disabled,fieldset:disabled a.button{pointer-events:none}input[type=button].-block,input[type=reset].-block,input[type=submit].-block{width:100%}.badge.-primary{color:#fff;background-color:#37598d}a:focus .badge.-primary,a:hover .badge.-primary{background-color:#32507f}.badge.-secondary{color:#fff;background-color:#5d65b9}a:focus .badge.-secondary,a:hover .badge.-secondary{background-color:#4b54af}.badge,.badge.-light{color:#343a40;background-color:#e9ecef}a:focus .badge,a:focus .badge.-light,a:hover .badge,a:hover .badge.-light{background-color:#ced4db}.badge.-dark{color:#fff;background-color:#343a40}a:focus .badge.-dark,a:hover .badge.-dark{background-color:#2f343a}.badge.-success{color:#fff;background-color:#5fb072}a:focus .badge.-success,a:hover .badge.-success{background-color:#51a364}.badge.-danger{color:#fff;background-color:#f25f5c}a:focus .badge.-danger,a:hover .badge.-danger{background-color:#f0413d}.badge.-warning{color:#fff;background-color:#f1ac53}a:focus .badge.-warning,a:hover .badge.-warning{background-color:#ef9e35}.badge.-info{color:#fff;background-color:#62bec1}a:focus .badge.-info,a:hover .badge.-info{background-color:#4db5b9}.badge.-sm{border-radius:.2rem;font-size:65%}.badge.-sm,.badge.-sm.-pill{padding:.4rem .53333rem}.badge,.badge.-md{border-radius:.25rem;font-size:75%}.-pill.badge,.badge,.badge.-md,.badge.-md.-pill{padding:.5rem .66667rem}.badge.-lg{border-radius:.3rem;font-size:85%}.badge.-lg,.badge.-lg.-pill{padding:.6rem .8rem}.badge{display:inline-block;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline}a:focus .badge,a:hover .badge{text-decoration:none}.button .badge{position:relative;top:-1px}.badge.-pill{border-radius:10rem}.container,.container.-fluid{margin-left:auto;margin-right:auto;box-sizing:border-box;width:100%}@media screen and (min-width:0){.container,.container.-fluid{padding-left:12px;padding-right:12px}}@media screen and (min-width:576px){.container,.container.-fluid{padding-left:13px;padding-right:13px}}@media screen and (min-width:768px){.container,.container.-fluid{padding-left:14px;padding-right:14px}}@media screen and (min-width:992px){.container,.container.-fluid{padding-left:15px;padding-right:15px}}@media screen and (min-width:1200px){.container,.container.-fluid{padding-left:16px;padding-right:16px}}@media screen and (min-width:0){.container{max-width:100%}}@media screen and (min-width:576px){.container{max-width:550px}}@media screen and (min-width:768px){.container{max-width:740px}}@media screen and (min-width:992px){.container{max-width:962px}}@media screen and (min-width:1200px){.container{max-width:1168px}}.container.-fluid{max-width:100%}.row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}@media screen and (min-width:0){.row{margin-left:-12px;margin-right:-12px}}@media screen and (min-width:576px){.row{margin-left:-13px;margin-right:-13px}}@media screen and (min-width:768px){.row{margin-left:-14px;margin-right:-14px}}@media screen and (min-width:992px){.row{margin-left:-15px;margin-right:-15px}}@media screen and (min-width:1200px){.row{margin-left:-16px;margin-right:-16px}}.row.-no-gutter{margin-left:0;margin-right:0}.row.-no-gutter>.column{padding-left:0;padding-right:0}.row.-no-collapse{flex-flow:row nowrap}@media screen and (min-width:0){.row.-start-xs{justify-content:flex-start;text-align:start}.row.-center-xs{justify-content:center;text-align:center}.row.-end-xs{justify-content:flex-end;text-align:end}.row.-top-xs{align-items:flex-start}.row.-middle-xs{align-items:center}.row.-bottom-xs{align-items:flex-end}.row.-around-xs{justify-content:space-around}.row.-between-xs{justify-content:space-between}.row.-reverse-xs{flex-direction:row-reverse}}@media screen and (min-width:576px){.row.-start-sm{justify-content:flex-start;text-align:start}.row.-center-sm{justify-content:center;text-align:center}.row.-end-sm{justify-content:flex-end;text-align:end}.row.-top-sm{align-items:flex-start}.row.-middle-sm{align-items:center}.row.-bottom-sm{align-items:flex-end}.row.-around-sm{justify-content:space-around}.row.-between-sm{justify-content:space-between}.row.-reverse-sm{flex-direction:row-reverse}}@media screen and (min-width:768px){.row.-start-md{justify-content:flex-start;text-align:start}.row.-center-md{justify-content:center;text-align:center}.row.-end-md{justify-content:flex-end;text-align:end}.row.-top-md{align-items:flex-start}.row.-middle-md{align-items:center}.row.-bottom-md{align-items:flex-end}.row.-around-md{justify-content:space-around}.row.-between-md{justify-content:space-between}.row.-reverse-md{flex-direction:row-reverse}}@media screen and (min-width:992px){.row.-start-lg{justify-content:flex-start;text-align:start}.row.-center-lg{justify-content:center;text-align:center}.row.-end-lg{justify-content:flex-end;text-align:end}.row.-top-lg{align-items:flex-start}.row.-middle-lg{align-items:center}.row.-bottom-lg{align-items:flex-end}.row.-around-lg{justify-content:space-around}.row.-between-lg{justify-content:space-between}.row.-reverse-lg{flex-direction:row-reverse}}@media screen and (min-width:1200px){.row.-start-xl{justify-content:flex-start;text-align:start}.row.-center-xl{justify-content:center;text-align:center}.row.-end-xl{justify-content:flex-end;text-align:end}.row.-top-xl{align-items:flex-start}.row.-middle-xl{align-items:center}.row.-bottom-xl{align-items:flex-end}.row.-around-xl{justify-content:space-around}.row.-between-xl{justify-content:space-between}.row.-reverse-xl{flex-direction:row-reverse}}.row.-start{justify-content:flex-start;text-align:start}.row.-center{justify-content:center;text-align:center}.row.-end{justify-content:flex-end;text-align:end}.row.-top{align-items:flex-start}.row.-middle{align-items:center}.row.-bottom{align-items:flex-end}.row.-around{justify-content:space-around}.row.-between{justify-content:space-between}.row.-reverse{flex-direction:row-reverse}.col,.column{flex-grow:1;flex-basis:0;max-width:100%;box-sizing:border-box;min-height:1px;position:relative}@media screen and (min-width:0){.col,.column{padding-left:12px;padding-right:12px}}@media screen and (min-width:576px){.col,.column{padding-left:13px;padding-right:13px}}@media screen and (min-width:768px){.col,.column{padding-left:14px;padding-right:14px}}@media screen and (min-width:992px){.col,.column{padding-left:15px;padding-right:15px}}@media screen and (min-width:1200px){.col,.column{padding-left:16px;padding-right:16px}}.col.-xs,.col.-xs-auto,.column.-xs,.column.-xs-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs,.column.-xs{flex-grow:1;flex-basis:0;max-width:100%}.col.-xs-auto,.column.-xs-auto{flex:1 0 auto;max-width:auto}.col.-first-xs,.column.-first-xs{order:-1}.col.-last-xs,.column.-last-xs{order:1}}.col.-xs-1,.column.-xs-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-1,.column.-xs-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-xs-1,.column.-offset-xs-1{margin-left:8.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-1,.column.-push-xs-1{left:8.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-1,.column.-pull-xs-1{right:8.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-2,.column.-xs-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-2,.column.-xs-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-xs-2,.column.-offset-xs-2{margin-left:16.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-2,.column.-push-xs-2{left:16.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-2,.column.-pull-xs-2{right:16.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-3,.column.-xs-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-3,.column.-xs-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-xs-3,.column.-offset-xs-3{margin-left:25%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-3,.column.-push-xs-3{left:25%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-3,.column.-pull-xs-3{right:25%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-4,.column.-xs-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-4,.column.-xs-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-xs-4,.column.-offset-xs-4{margin-left:33.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-4,.column.-push-xs-4{left:33.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-4,.column.-pull-xs-4{right:33.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-5,.column.-xs-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-5,.column.-xs-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-xs-5,.column.-offset-xs-5{margin-left:41.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-5,.column.-push-xs-5{left:41.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-5,.column.-pull-xs-5{right:41.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-6,.column.-xs-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-6,.column.-xs-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-xs-6,.column.-offset-xs-6{margin-left:50%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-6,.column.-push-xs-6{left:50%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-6,.column.-pull-xs-6{right:50%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-7,.column.-xs-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-7,.column.-xs-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-xs-7,.column.-offset-xs-7{margin-left:58.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-7,.column.-push-xs-7{left:58.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-7,.column.-pull-xs-7{right:58.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-8,.column.-xs-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-8,.column.-xs-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-xs-8,.column.-offset-xs-8{margin-left:66.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-8,.column.-push-xs-8{left:66.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-8,.column.-pull-xs-8{right:66.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-9,.column.-xs-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-9,.column.-xs-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-xs-9,.column.-offset-xs-9{margin-left:75%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-9,.column.-push-xs-9{left:75%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-9,.column.-pull-xs-9{right:75%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-10,.column.-xs-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-10,.column.-xs-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-xs-10,.column.-offset-xs-10{margin-left:83.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-10,.column.-push-xs-10{left:83.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-10,.column.-pull-xs-10{right:83.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-11,.column.-xs-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-11,.column.-xs-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-xs-11,.column.-offset-xs-11{margin-left:91.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-11,.column.-push-xs-11{left:91.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-11,.column.-pull-xs-11{right:91.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-12,.column.-xs-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-12,.column.-xs-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-xs-12,.column.-offset-xs-12{margin-left:100%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-12,.column.-push-xs-12{left:100%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-12,.column.-pull-xs-12{right:100%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-sm,.col.-sm-auto,.column.-sm,.column.-sm-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm,.column.-sm{flex-grow:1;flex-basis:0;max-width:100%}.col.-sm-auto,.column.-sm-auto{flex:1 0 auto;max-width:auto}.col.-first-sm,.column.-first-sm{order:-1}.col.-last-sm,.column.-last-sm{order:1}}.col.-sm-1,.column.-sm-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-1,.column.-sm-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-sm-1,.column.-offset-sm-1{margin-left:8.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-1,.column.-push-sm-1{left:8.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-1,.column.-pull-sm-1{right:8.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-2,.column.-sm-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-2,.column.-sm-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-sm-2,.column.-offset-sm-2{margin-left:16.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-2,.column.-push-sm-2{left:16.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-2,.column.-pull-sm-2{right:16.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-3,.column.-sm-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-3,.column.-sm-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-sm-3,.column.-offset-sm-3{margin-left:25%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-3,.column.-push-sm-3{left:25%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-3,.column.-pull-sm-3{right:25%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-4,.column.-sm-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-4,.column.-sm-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-sm-4,.column.-offset-sm-4{margin-left:33.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-4,.column.-push-sm-4{left:33.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-4,.column.-pull-sm-4{right:33.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-5,.column.-sm-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-5,.column.-sm-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-sm-5,.column.-offset-sm-5{margin-left:41.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-5,.column.-push-sm-5{left:41.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-5,.column.-pull-sm-5{right:41.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-6,.column.-sm-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-6,.column.-sm-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-sm-6,.column.-offset-sm-6{margin-left:50%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-6,.column.-push-sm-6{left:50%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-6,.column.-pull-sm-6{right:50%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-7,.column.-sm-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-7,.column.-sm-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-sm-7,.column.-offset-sm-7{margin-left:58.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-7,.column.-push-sm-7{left:58.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-7,.column.-pull-sm-7{right:58.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-8,.column.-sm-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-8,.column.-sm-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-sm-8,.column.-offset-sm-8{margin-left:66.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-8,.column.-push-sm-8{left:66.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-8,.column.-pull-sm-8{right:66.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-9,.column.-sm-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-9,.column.-sm-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-sm-9,.column.-offset-sm-9{margin-left:75%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-9,.column.-push-sm-9{left:75%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-9,.column.-pull-sm-9{right:75%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-10,.column.-sm-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-10,.column.-sm-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-sm-10,.column.-offset-sm-10{margin-left:83.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-10,.column.-push-sm-10{left:83.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-10,.column.-pull-sm-10{right:83.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-11,.column.-sm-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-11,.column.-sm-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-sm-11,.column.-offset-sm-11{margin-left:91.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-11,.column.-push-sm-11{left:91.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-11,.column.-pull-sm-11{right:91.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-12,.column.-sm-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-12,.column.-sm-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-sm-12,.column.-offset-sm-12{margin-left:100%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-12,.column.-push-sm-12{left:100%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-12,.column.-pull-sm-12{right:100%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-md,.col.-md-auto,.column.-md,.column.-md-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md,.column.-md{flex-grow:1;flex-basis:0;max-width:100%}.col.-md-auto,.column.-md-auto{flex:1 0 auto;max-width:auto}.col.-first-md,.column.-first-md{order:-1}.col.-last-md,.column.-last-md{order:1}}.col.-md-1,.column.-md-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-1,.column.-md-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-md-1,.column.-offset-md-1{margin-left:8.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-1,.column.-push-md-1{left:8.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-1,.column.-pull-md-1{right:8.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-2,.column.-md-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-2,.column.-md-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-md-2,.column.-offset-md-2{margin-left:16.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-2,.column.-push-md-2{left:16.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-2,.column.-pull-md-2{right:16.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-3,.column.-md-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-3,.column.-md-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-md-3,.column.-offset-md-3{margin-left:25%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-3,.column.-push-md-3{left:25%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-3,.column.-pull-md-3{right:25%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-4,.column.-md-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-4,.column.-md-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-md-4,.column.-offset-md-4{margin-left:33.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-4,.column.-push-md-4{left:33.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-4,.column.-pull-md-4{right:33.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-5,.column.-md-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-5,.column.-md-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-md-5,.column.-offset-md-5{margin-left:41.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-5,.column.-push-md-5{left:41.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-5,.column.-pull-md-5{right:41.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-6,.column.-md-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-6,.column.-md-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-md-6,.column.-offset-md-6{margin-left:50%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-6,.column.-push-md-6{left:50%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-6,.column.-pull-md-6{right:50%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-7,.column.-md-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-7,.column.-md-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-md-7,.column.-offset-md-7{margin-left:58.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-7,.column.-push-md-7{left:58.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-7,.column.-pull-md-7{right:58.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-8,.column.-md-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-8,.column.-md-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-md-8,.column.-offset-md-8{margin-left:66.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-8,.column.-push-md-8{left:66.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-8,.column.-pull-md-8{right:66.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-9,.column.-md-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-9,.column.-md-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-md-9,.column.-offset-md-9{margin-left:75%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-9,.column.-push-md-9{left:75%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-9,.column.-pull-md-9{right:75%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-10,.column.-md-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-10,.column.-md-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-md-10,.column.-offset-md-10{margin-left:83.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-10,.column.-push-md-10{left:83.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-10,.column.-pull-md-10{right:83.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-11,.column.-md-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-11,.column.-md-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-md-11,.column.-offset-md-11{margin-left:91.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-11,.column.-push-md-11{left:91.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-11,.column.-pull-md-11{right:91.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-12,.column.-md-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-12,.column.-md-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-md-12,.column.-offset-md-12{margin-left:100%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-12,.column.-push-md-12{left:100%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-12,.column.-pull-md-12{right:100%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-lg,.col.-lg-auto,.column.-lg,.column.-lg-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg,.column.-lg{flex-grow:1;flex-basis:0;max-width:100%}.col.-lg-auto,.column.-lg-auto{flex:1 0 auto;max-width:auto}.col.-first-lg,.column.-first-lg{order:-1}.col.-last-lg,.column.-last-lg{order:1}}.col.-lg-1,.column.-lg-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-1,.column.-lg-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-lg-1,.column.-offset-lg-1{margin-left:8.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-1,.column.-push-lg-1{left:8.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-1,.column.-pull-lg-1{right:8.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-2,.column.-lg-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-2,.column.-lg-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-lg-2,.column.-offset-lg-2{margin-left:16.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-2,.column.-push-lg-2{left:16.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-2,.column.-pull-lg-2{right:16.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-3,.column.-lg-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-3,.column.-lg-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-lg-3,.column.-offset-lg-3{margin-left:25%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-3,.column.-push-lg-3{left:25%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-3,.column.-pull-lg-3{right:25%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-4,.column.-lg-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-4,.column.-lg-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-lg-4,.column.-offset-lg-4{margin-left:33.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-4,.column.-push-lg-4{left:33.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-4,.column.-pull-lg-4{right:33.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-5,.column.-lg-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-5,.column.-lg-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-lg-5,.column.-offset-lg-5{margin-left:41.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-5,.column.-push-lg-5{left:41.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-5,.column.-pull-lg-5{right:41.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-6,.column.-lg-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-6,.column.-lg-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-lg-6,.column.-offset-lg-6{margin-left:50%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-6,.column.-push-lg-6{left:50%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-6,.column.-pull-lg-6{right:50%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-7,.column.-lg-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-7,.column.-lg-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-lg-7,.column.-offset-lg-7{margin-left:58.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-7,.column.-push-lg-7{left:58.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-7,.column.-pull-lg-7{right:58.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-8,.column.-lg-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-8,.column.-lg-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-lg-8,.column.-offset-lg-8{margin-left:66.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-8,.column.-push-lg-8{left:66.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-8,.column.-pull-lg-8{right:66.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-9,.column.-lg-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-9,.column.-lg-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-lg-9,.column.-offset-lg-9{margin-left:75%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-9,.column.-push-lg-9{left:75%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-9,.column.-pull-lg-9{right:75%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-10,.column.-lg-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-10,.column.-lg-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-lg-10,.column.-offset-lg-10{margin-left:83.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-10,.column.-push-lg-10{left:83.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-10,.column.-pull-lg-10{right:83.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-11,.column.-lg-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-11,.column.-lg-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-lg-11,.column.-offset-lg-11{margin-left:91.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-11,.column.-push-lg-11{left:91.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-11,.column.-pull-lg-11{right:91.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-12,.column.-lg-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-12,.column.-lg-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-lg-12,.column.-offset-lg-12{margin-left:100%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-12,.column.-push-lg-12{left:100%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-12,.column.-pull-lg-12{right:100%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-xl,.col.-xl-auto,.column.-xl,.column.-xl-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl,.column.-xl{flex-grow:1;flex-basis:0;max-width:100%}.col.-xl-auto,.column.-xl-auto{flex:1 0 auto;max-width:auto}.col.-first-xl,.column.-first-xl{order:-1}.col.-last-xl,.column.-last-xl{order:1}}.col.-xl-1,.column.-xl-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-1,.column.-xl-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-xl-1,.column.-offset-xl-1{margin-left:8.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-1,.column.-push-xl-1{left:8.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-1,.column.-pull-xl-1{right:8.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-2,.column.-xl-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-2,.column.-xl-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-xl-2,.column.-offset-xl-2{margin-left:16.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-2,.column.-push-xl-2{left:16.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-2,.column.-pull-xl-2{right:16.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-3,.column.-xl-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-3,.column.-xl-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-xl-3,.column.-offset-xl-3{margin-left:25%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-3,.column.-push-xl-3{left:25%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-3,.column.-pull-xl-3{right:25%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-4,.column.-xl-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-4,.column.-xl-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-xl-4,.column.-offset-xl-4{margin-left:33.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-4,.column.-push-xl-4{left:33.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-4,.column.-pull-xl-4{right:33.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-5,.column.-xl-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-5,.column.-xl-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-xl-5,.column.-offset-xl-5{margin-left:41.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-5,.column.-push-xl-5{left:41.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-5,.column.-pull-xl-5{right:41.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-6,.column.-xl-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-6,.column.-xl-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-xl-6,.column.-offset-xl-6{margin-left:50%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-6,.column.-push-xl-6{left:50%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-6,.column.-pull-xl-6{right:50%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-7,.column.-xl-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-7,.column.-xl-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-xl-7,.column.-offset-xl-7{margin-left:58.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-7,.column.-push-xl-7{left:58.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-7,.column.-pull-xl-7{right:58.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-8,.column.-xl-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-8,.column.-xl-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-xl-8,.column.-offset-xl-8{margin-left:66.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-8,.column.-push-xl-8{left:66.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-8,.column.-pull-xl-8{right:66.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-9,.column.-xl-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-9,.column.-xl-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-xl-9,.column.-offset-xl-9{margin-left:75%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-9,.column.-push-xl-9{left:75%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-9,.column.-pull-xl-9{right:75%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-10,.column.-xl-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-10,.column.-xl-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-xl-10,.column.-offset-xl-10{margin-left:83.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-10,.column.-push-xl-10{left:83.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-10,.column.-pull-xl-10{right:83.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-11,.column.-xl-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-11,.column.-xl-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-xl-11,.column.-offset-xl-11{margin-left:91.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-11,.column.-push-xl-11{left:91.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-11,.column.-pull-xl-11{right:91.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-12,.column.-xl-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-12,.column.-xl-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-xl-12,.column.-offset-xl-12{margin-left:100%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-12,.column.-push-xl-12{left:100%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-12,.column.-pull-xl-12{right:100%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.card.-red{color:#fff;background-color:#f25f5c}.card.-red>.body{border-color:#f0413d}.card.-red>.footer,.card.-red>.header{background-color:rgba(0,0,0,.1);border-color:#f0413d}.card.-orange{color:#fff;background-color:#f1ac53}.card.-orange>.body{border-color:#ef9e35}.card.-orange>.footer,.card.-orange>.header{background-color:rgba(0,0,0,.1);border-color:#ef9e35}.card.-yellow{color:#343a40;background-color:#ffe066}.card.-yellow>.body{border-color:#ffd942}.card.-yellow>.footer,.card.-yellow>.header{background-color:rgba(0,0,0,.1);border-color:#ffd942}.card.-green{color:#fff;background-color:#5fb072}.card.-green>.body{border-color:#51a364}.card.-green>.footer,.card.-green>.header{background-color:rgba(0,0,0,.1);border-color:#51a364}.card.-teal{color:#fff;background-color:#62bec1}.card.-teal>.body{border-color:#4db5b9}.card.-teal>.footer,.card.-teal>.header{background-color:rgba(0,0,0,.1);border-color:#4db5b9}.card.-blue{color:#fff;background-color:#178bb2}.card.-blue>.body{border-color:#157da0}.card.-blue>.footer,.card.-blue>.header{background-color:rgba(0,0,0,.1);border-color:#157da0}.card.-purple{color:#fff;background-color:#5d65b9}.card.-purple>.body{border-color:#4b54af}.card.-purple>.footer,.card.-purple>.header{background-color:rgba(0,0,0,.1);border-color:#4b54af}.card.-pink{color:#fff;background-color:#ff6f80}.card.-pink>.body{border-color:#ff4a60}.card.-pink>.footer,.card.-pink>.header{background-color:rgba(0,0,0,.1);border-color:#ff4a60}.card.-primary{color:#fff;background-color:#37598d}.card.-primary>.body{border-color:#32507f}.card.-primary>.footer,.card.-primary>.header{background-color:rgba(0,0,0,.1);border-color:#32507f}.card.-secondary{color:#fff;background-color:#5d65b9}.card.-secondary>.body{border-color:#4b54af}.card.-secondary>.footer,.card.-secondary>.header{background-color:rgba(0,0,0,.1);border-color:#4b54af}.card,.card.-light{color:#343a40;background-color:#fff}.card.-light>.body,.card>.body{border-color:#e6e6e6}.card.-light>.footer,.card.-light>.header,.card>.footer,.card>.header{background-color:rgba(0,0,0,.1);border-color:#e6e6e6}.card.-dark{color:#fff;background-color:#343a40}.card.-dark>.body{border-color:#2f343a}.card.-dark>.footer,.card.-dark>.header{background-color:rgba(0,0,0,.1);border-color:#2f343a}.card.-transparent{color:#fff;background-color:transparent}.card.-transparent>.body{border-color:transparent}.card.-transparent>.footer,.card.-transparent>.header{background-color:rgba(0,0,0,.1);border-color:transparent}.card.-white{color:#343a40;background-color:#fff}.card.-white>.body{border-color:#e6e6e6}.card.-white>.footer,.card.-white>.header{background-color:rgba(0,0,0,.1);border-color:#e6e6e6}.card.-gray-10{color:#343a40;background-color:#f8f9fa}.card.-gray-10>.body{border-color:#dbe0e5}.card.-gray-10>.footer,.card.-gray-10>.header{background-color:rgba(0,0,0,.1);border-color:#dbe0e5}.card.-gray-20{color:#343a40;background-color:#e9ecef}.card.-gray-20>.body{border-color:#ced4db}.card.-gray-20>.footer,.card.-gray-20>.header{background-color:rgba(0,0,0,.1);border-color:#ced4db}.card.-gray-30{color:#343a40;background-color:#dee2e6}.card.-gray-30>.body{border-color:#c4cbd3}.card.-gray-30>.footer,.card.-gray-30>.header{background-color:rgba(0,0,0,.1);border-color:#c4cbd3}.card.-gray-40{color:#343a40;background-color:#ced4da}.card.-gray-40>.body{border-color:#b6bfc8}.card.-gray-40>.footer,.card.-gray-40>.header{background-color:rgba(0,0,0,.1);border-color:#b6bfc8}.card.-gray-50{color:#fff;background-color:#adb5bd}.card.-gray-50>.body{border-color:#99a3ad}.card.-gray-50>.footer,.card.-gray-50>.header{background-color:rgba(0,0,0,.1);border-color:#99a3ad}.card.-gray-60{color:#fff;background-color:#868e96}.card.-gray-60>.body{border-color:#778089}.card.-gray-60>.footer,.card.-gray-60>.header{background-color:rgba(0,0,0,.1);border-color:#778089}.card.-gray-70{color:#fff;background-color:#495057}.card.-gray-70>.body{border-color:#42484e}.card.-gray-70>.footer,.card.-gray-70>.header{background-color:rgba(0,0,0,.1);border-color:#42484e}.card.-gray-80{color:#fff;background-color:#343a40}.card.-gray-80>.body{border-color:#2f343a}.card.-gray-80>.footer,.card.-gray-80>.header{background-color:rgba(0,0,0,.1);border-color:#2f343a}.card.-gray-90{color:#fff;background-color:#202229}.card.-gray-90>.body{border-color:#1d1f25}.card.-gray-90>.footer,.card.-gray-90>.header{background-color:rgba(0,0,0,.1);border-color:#1d1f25}.card.-black{color:#fff;background-color:#000}.card.-black>.body{border-color:#000}.card.-black>.footer,.card.-black>.header{background-color:rgba(0,0,0,.1);border-color:#000}.card.-success{color:#fff;background-color:#5fb072}.card.-success>.body{border-color:#51a364}.card.-success>.footer,.card.-success>.header{background-color:rgba(0,0,0,.1);border-color:#51a364}.card.-danger{color:#fff;background-color:#f25f5c}.card.-danger>.body{border-color:#f0413d}.card.-danger>.footer,.card.-danger>.header{background-color:rgba(0,0,0,.1);border-color:#f0413d}.card.-warning{color:#fff;background-color:#f1ac53}.card.-warning>.body{border-color:#ef9e35}.card.-warning>.footer,.card.-warning>.header{background-color:rgba(0,0,0,.1);border-color:#ef9e35}.card.-info{color:#fff;background-color:#62bec1}.card.-info>.body{border-color:#4db5b9}.card.-info>.footer,.card.-info>.header{background-color:rgba(0,0,0,.1);border-color:#4db5b9}.card.-sm{border-radius:.2rem;font-size:.88rem}.card.-sm>.header{padding:.8rem}.card.-sm>.header:first-child{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.card.-sm>.body{padding:.8rem;border-radius:.2rem}.card.-sm>.body>.title{margin-bottom:.8rem}.card.-sm>.body>.subtitle{margin-top:.4rem}.card.-sm>.body>.link+.link{margin-left:.8rem}.card.-sm>.footer{padding:.8rem}.card.-sm>.footer:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.card.-sm>img{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.card.-sm:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.card.-sm .item:first-child,.card.-sm>.list-group:first-child{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.card.-sm .item:last-child,.card.-sm>.list-group:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.card,.card.-md{border-radius:.25rem;font-size:1.1rem}.card.-md>.header,.card>.header{padding:1rem}.card.-md>.header:first-child,.card>.header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card.-md>.body,.card>.body{padding:1rem;border-radius:.25rem}.card.-md>.body>.title,.card>.body>.title{margin-bottom:1rem}.card.-md>.body>.subtitle,.card>.body>.subtitle{margin-top:.5rem}.card.-md>.body>.link+.link,.card>.body>.link+.link{margin-left:1rem}.card.-md>.footer,.card>.footer{padding:1rem}.card.-md>.footer:last-child,.card>.footer:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card.-md>img,.card>img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card.-md:last-child,.card:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card.-md .item:first-child,.card.-md>.list-group:first-child,.card .item:first-child,.card>.list-group:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card.-md .item:last-child,.card.-md>.list-group:last-child,.card .item:last-child,.card>.list-group:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card.-lg{border-radius:.3rem;font-size:1.32rem}.card.-lg>.header{padding:1.2rem}.card.-lg>.header:first-child{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.card.-lg>.body{padding:1.2rem;border-radius:.3rem}.card.-lg>.body>.title{margin-bottom:1.2rem}.card.-lg>.body>.subtitle{margin-top:.6rem}.card.-lg>.body>.link+.link{margin-left:1.2rem}.card.-lg>.footer{padding:1.2rem}.card.-lg>.footer:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.card.-lg>img{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.card.-lg:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.card.-lg .item:first-child,.card.-lg>.list-group:first-child{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.card.-lg .item:last-child,.card.-lg>.list-group:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-clip:border-box}.card>hr{margin-right:0;margin-left:0}.card>.header{margin-bottom:0;border-style:solid;border-width:1px 1px 0}.card>.header>.h1,.card>.header>.h2,.card>.header>.h3,.card>.header>.h4,.card>.header>.h5,.card>.header>.h6,.card>.header>.p,.card>.header>h1,.card>.header>h2,.card>.header>h3,.card>.header>h4,.card>.header>h5,.card>.header>h6,.card>.header>p{margin-bottom:0;margin-top:0}.card>.header+.body,.card>.header+img{border-top-left-radius:0;border-top-right-radius:0}.card>.header+.list-group .list-group-item:first-child{border-top:0}.card>.body{flex:1 1 auto;border-width:1px;border-style:solid}.card>.body:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.card>.body:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.card>.body>.title{margin-top:0}.card>.body>.subtitle{margin-bottom:0}.card>.body>.link{text-decoration:none}.card>.footer{border-style:solid;border-width:0 1px 1px}.card>img{width:100%}.list-group.-sm{border-radius:.2rem}.list-group,.list-group.-md{border-radius:.25rem}.list-group.-lg{border-radius:.3rem}.list-group,.list-group.-light{background-color:#fff}.-bordered.list-group,.list-group.-light.-bordered{border-color:#e9ecef}.list-group.-light>.item,.list-group>.item{border-bottom-color:#e9ecef}.list-group.-dark{background-color:#202229}.list-group.-dark.-bordered{border-color:#495057}.list-group.-dark>.item{border-bottom-color:#495057}.list-group{display:flex;flex-wrap:wrap;flex-direction:column;transition:background-color .21s ease,border-color .21s ease}.list-group.-bordered{border-width:1px;border-style:solid}.list-group.-sm>.item{padding:.8rem}.list-group.-sm>.item:first-child{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.list-group.-sm>.item:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.list-group.-md>.item,.list-group>.item{padding:1rem}.list-group.-md>.item:first-child,.list-group>.item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group.-md>.item:last-child,.list-group>.item:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.list-group.-lg>.item{padding:1.2rem}.list-group.-lg>.item:first-child{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.list-group.-lg>.item:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.list-group>.item{display:block;margin-bottom:0;border-bottom-width:1px;border-bottom-style:solid;transition:border-color .21s ease;padding:1rem}.list-group>.item:last-child{border-bottom-width:0}.list-group>.item:focus,.list-group>.item:hover{text-decoration:none}.list-group>.item>:first-child{margin-top:0}.list-group>.item>:last-child{margin-bottom:0}.list-group>.item.-disabled{color:#868e96;pointer-events:none;cursor:default}.list-group>.item.-active{background:#37598d;color:#fff;border-bottom-color:#345485}.list-group>.item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group>.item:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.tabs,.tabs.-light{border-color:#e9ecef}.tabs.-dark{border-color:#495057}.tabs{position:relative;display:block}.tabs:not(.-custom)>.header>.button-group .button:first-child{border-bottom-left-radius:0}.tabs:not(.-custom)>.header>.button-group .button:last-child{border-bottom-right-radius:0}.tabs:not(.-custom)>.tab{border-top-left-radius:0}.tabs:not(.-custom).-stretch>.tab{border-top-right-radius:0}.tabs.-stretch>.header{width:100%}.tabs.-stretch>.header>.button-group{display:flex;flex-basis:100%}.tabs.-stretch>.header>.button-group>.button{flex-grow:1}.tabs.-light>.tab,.tabs>.tab{border-color:#e9ecef;color:#343a40;background-color:#fff}.tabs.-dark>.tab{border-color:#495057;color:#fff;background-color:#343a40}.tabs>.tab{border-width:1px;border-style:solid;border-radius:.25rem;transition-property:background-color,border-color,color;transition-duration:.21s;transition-timing-function:ease}.tabs>.tab,.tabs>.tab>.body{position:relative;display:block}.tabs>.tab>.body{padding:1rem}.modal.-sm{max-width:384px;border-radius:.2rem}.modal.-sm>.body,.modal.-sm>.footer,.modal.-sm>.header{padding:.8rem}.modal.-sm>.header{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.modal.-sm>.footer{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.modal,.modal.-md{max-width:480px;border-radius:.25rem}.modal.-md>.body,.modal.-md>.footer,.modal.-md>.header,.modal>.body,.modal>.footer,.modal>.header{padding:1rem}.modal.-md>.header,.modal>.header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.modal.-md>.footer,.modal>.footer{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.modal.-lg{max-width:576px;border-radius:.3rem}.modal.-lg>.body,.modal.-lg>.footer,.modal.-lg>.header{padding:1.2rem}.modal.-lg>.header{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal.-lg>.footer{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.modal.-primary>.header{border-color:#e9ecef;background-color:#32507f;color:#fff}.modal.-primary>.header>.close{color:#fff}.modal.-primary>.body,.modal.-primary>.footer{border-color:#e9ecef;background-color:#fff}.modal.-primary.-fill{color:#fff}.modal.-primary.-fill>.body,.modal.-primary.-fill>.footer,.modal.-primary.-fill>.header{border-color:#2f4c78}.modal.-primary.-fill>.header{background-color:#32507f}.modal.-primary.-fill>.body,.modal.-primary.-fill>.footer{background-color:#37598d}.modal.-primary[x-placement^=top]>.arrow{border-top-color:#32507f}.modal.-primary[x-placement^=top]>.arrow:after{border-top-color:#37598d}.modal.-primary[x-placement^=bottom]>.arrow{border-bottom-color:#32507f}.modal.-primary[x-placement^=bottom]>.arrow:after{border-bottom-color:#37598d}.modal.-primary[x-placement^=right]>.arrow{border-right-color:#32507f}.modal.-primary[x-placement^=right]>.arrow:after{border-right-color:#37598d}.modal.-primary[x-placement^=left]>.arrow{border-left-color:#32507f}.modal.-primary[x-placement^=left]>.arrow:after{border-left-color:#37598d}.inkline.-dark .modal.-primary>.header{border-color:#495057}.inkline.-dark .modal.-primary>.body,.inkline.-dark .modal.-primary>.footer{border-color:#495057;background-color:#343a40}.modal.-secondary>.header{border-color:#e9ecef;background-color:#4b54af;color:#fff}.modal.-secondary>.header>.close{color:#fff}.modal.-secondary>.body,.modal.-secondary>.footer{border-color:#e9ecef;background-color:#fff}.modal.-secondary.-fill{color:#fff}.modal.-secondary.-fill>.body,.modal.-secondary.-fill>.footer,.modal.-secondary.-fill>.header{border-color:#474fa5}.modal.-secondary.-fill>.header{background-color:#4b54af}.modal.-secondary.-fill>.body,.modal.-secondary.-fill>.footer{background-color:#5d65b9}.modal.-secondary[x-placement^=top]>.arrow{border-top-color:#4b54af}.modal.-secondary[x-placement^=top]>.arrow:after{border-top-color:#5d65b9}.modal.-secondary[x-placement^=bottom]>.arrow{border-bottom-color:#4b54af}.modal.-secondary[x-placement^=bottom]>.arrow:after{border-bottom-color:#5d65b9}.modal.-secondary[x-placement^=right]>.arrow{border-right-color:#4b54af}.modal.-secondary[x-placement^=right]>.arrow:after{border-right-color:#5d65b9}.modal.-secondary[x-placement^=left]>.arrow{border-left-color:#4b54af}.modal.-secondary[x-placement^=left]>.arrow:after{border-left-color:#5d65b9}.inkline.-dark .modal.-secondary>.header{border-color:#495057}.inkline.-dark .modal.-secondary>.body,.inkline.-dark .modal.-secondary>.footer{border-color:#495057;background-color:#343a40}.modal.-light>.header,.modal>.header{border-color:#e9ecef;background-color:#dbe0e5;color:#343a40}.modal.-light>.header>.close,.modal>.header>.close{color:#343a40}.modal.-light>.body,.modal.-light>.footer,.modal>.body,.modal>.footer{border-color:#e9ecef;background-color:#fff}.-fill.modal,.modal.-light.-fill{color:#343a40}.-fill.modal>.body,.-fill.modal>.footer,.-fill.modal>.header,.modal.-light.-fill>.body,.modal.-light.-fill>.footer,.modal.-light.-fill>.header{border-color:#ced4db}.-fill.modal>.header,.modal.-light.-fill>.header{background-color:#dbe0e5}.-fill.modal>.body,.-fill.modal>.footer,.modal.-light.-fill>.body,.modal.-light.-fill>.footer{background-color:#e9ecef}.modal.-light[x-placement^=top]>.arrow,.modal[x-placement^=top]>.arrow{border-top-color:#ced4db}.modal.-light[x-placement^=top]>.arrow:after,.modal[x-placement^=top]>.arrow:after{border-top-color:#e9ecef}.modal.-light[x-placement^=bottom]>.arrow,.modal[x-placement^=bottom]>.arrow{border-bottom-color:#ced4db}.modal.-light[x-placement^=bottom]>.arrow:after,.modal[x-placement^=bottom]>.arrow:after{border-bottom-color:#e9ecef}.modal.-light[x-placement^=right]>.arrow,.modal[x-placement^=right]>.arrow{border-right-color:#ced4db}.modal.-light[x-placement^=right]>.arrow:after,.modal[x-placement^=right]>.arrow:after{border-right-color:#e9ecef}.modal.-light[x-placement^=left]>.arrow,.modal[x-placement^=left]>.arrow{border-left-color:#ced4db}.modal.-light[x-placement^=left]>.arrow:after,.modal[x-placement^=left]>.arrow:after{border-left-color:#e9ecef}.inkline.-dark .modal.-light>.header,.inkline.-dark .modal>.header{border-color:#495057}.inkline.-dark .modal.-light>.body,.inkline.-dark .modal.-light>.footer,.inkline.-dark .modal>.body,.inkline.-dark .modal>.footer{border-color:#495057;background-color:#343a40}.modal.-dark>.header{border-color:#e9ecef;background-color:#2f343a;color:#fff}.modal.-dark>.header>.close{color:#fff}.modal.-dark>.body,.modal.-dark>.footer{border-color:#e9ecef;background-color:#fff}.modal.-dark.-fill{color:#fff}.modal.-dark.-fill>.body,.modal.-dark.-fill>.footer,.modal.-dark.-fill>.header{border-color:#2c3136}.modal.-dark.-fill>.header{background-color:#2f343a}.modal.-dark.-fill>.body,.modal.-dark.-fill>.footer{background-color:#343a40}.modal.-dark[x-placement^=top]>.arrow{border-top-color:#2f343a}.modal.-dark[x-placement^=top]>.arrow:after{border-top-color:#343a40}.modal.-dark[x-placement^=bottom]>.arrow{border-bottom-color:#2f343a}.modal.-dark[x-placement^=bottom]>.arrow:after{border-bottom-color:#343a40}.modal.-dark[x-placement^=right]>.arrow{border-right-color:#2f343a}.modal.-dark[x-placement^=right]>.arrow:after{border-right-color:#343a40}.modal.-dark[x-placement^=left]>.arrow{border-left-color:#2f343a}.modal.-dark[x-placement^=left]>.arrow:after{border-left-color:#343a40}.inkline.-dark .modal.-dark>.header{border-color:#495057}.inkline.-dark .modal.-dark>.body,.inkline.-dark .modal.-dark>.footer{border-color:#495057;background-color:#343a40}.modal.-success>.header{border-color:#e9ecef;background-color:#51a364;color:#fff}.modal.-success>.header>.close{color:#fff}.modal.-success>.body,.modal.-success>.footer{border-color:#e9ecef;background-color:#fff}.modal.-success.-fill{color:#fff}.modal.-success.-fill>.body,.modal.-success.-fill>.footer,.modal.-success.-fill>.header{border-color:#4c9a5e}.modal.-success.-fill>.header{background-color:#51a364}.modal.-success.-fill>.body,.modal.-success.-fill>.footer{background-color:#5fb072}.modal.-success[x-placement^=top]>.arrow{border-top-color:#51a364}.modal.-success[x-placement^=top]>.arrow:after{border-top-color:#5fb072}.modal.-success[x-placement^=bottom]>.arrow{border-bottom-color:#51a364}.modal.-success[x-placement^=bottom]>.arrow:after{border-bottom-color:#5fb072}.modal.-success[x-placement^=right]>.arrow{border-right-color:#51a364}.modal.-success[x-placement^=right]>.arrow:after{border-right-color:#5fb072}.modal.-success[x-placement^=left]>.arrow{border-left-color:#51a364}.modal.-success[x-placement^=left]>.arrow:after{border-left-color:#5fb072}.inkline.-dark .modal.-success>.header{border-color:#495057}.inkline.-dark .modal.-success>.body,.inkline.-dark .modal.-success>.footer{border-color:#495057;background-color:#343a40}.modal.-danger>.header{border-color:#e9ecef;background-color:#f0413d;color:#fff}.modal.-danger>.header>.close{color:#fff}.modal.-danger>.body,.modal.-danger>.footer{border-color:#e9ecef;background-color:#fff}.modal.-danger.-fill{color:#fff}.modal.-danger.-fill>.body,.modal.-danger.-fill>.footer,.modal.-danger.-fill>.header{border-color:#ee312e}.modal.-danger.-fill>.header{background-color:#f0413d}.modal.-danger.-fill>.body,.modal.-danger.-fill>.footer{background-color:#f25f5c}.modal.-danger[x-placement^=top]>.arrow{border-top-color:#f0413d}.modal.-danger[x-placement^=top]>.arrow:after{border-top-color:#f25f5c}.modal.-danger[x-placement^=bottom]>.arrow{border-bottom-color:#f0413d}.modal.-danger[x-placement^=bottom]>.arrow:after{border-bottom-color:#f25f5c}.modal.-danger[x-placement^=right]>.arrow{border-right-color:#f0413d}.modal.-danger[x-placement^=right]>.arrow:after{border-right-color:#f25f5c}.modal.-danger[x-placement^=left]>.arrow{border-left-color:#f0413d}.modal.-danger[x-placement^=left]>.arrow:after{border-left-color:#f25f5c}.inkline.-dark .modal.-danger>.header{border-color:#495057}.inkline.-dark .modal.-danger>.body,.inkline.-dark .modal.-danger>.footer{border-color:#495057;background-color:#343a40}.modal.-warning>.header{border-color:#e9ecef;background-color:#ef9e35;color:#fff}.modal.-warning>.header>.close{color:#fff}.modal.-warning>.body,.modal.-warning>.footer{border-color:#e9ecef;background-color:#fff}.modal.-warning.-fill{color:#fff}.modal.-warning.-fill>.body,.modal.-warning.-fill>.footer,.modal.-warning.-fill>.header{border-color:#ed9626}.modal.-warning.-fill>.header{background-color:#ef9e35}.modal.-warning.-fill>.body,.modal.-warning.-fill>.footer{background-color:#f1ac53}.modal.-warning[x-placement^=top]>.arrow{border-top-color:#ef9e35}.modal.-warning[x-placement^=top]>.arrow:after{border-top-color:#f1ac53}.modal.-warning[x-placement^=bottom]>.arrow{border-bottom-color:#ef9e35}.modal.-warning[x-placement^=bottom]>.arrow:after{border-bottom-color:#f1ac53}.modal.-warning[x-placement^=right]>.arrow{border-right-color:#ef9e35}.modal.-warning[x-placement^=right]>.arrow:after{border-right-color:#f1ac53}.modal.-warning[x-placement^=left]>.arrow{border-left-color:#ef9e35}.modal.-warning[x-placement^=left]>.arrow:after{border-left-color:#f1ac53}.inkline.-dark .modal.-warning>.header{border-color:#495057}.inkline.-dark .modal.-warning>.body,.inkline.-dark .modal.-warning>.footer{border-color:#495057;background-color:#343a40}.modal.-info>.header{border-color:#e9ecef;background-color:#4db5b9;color:#fff}.modal.-info>.header>.close{color:#fff}.modal.-info>.body,.modal.-info>.footer{border-color:#e9ecef;background-color:#fff}.modal.-info.-fill{color:#fff}.modal.-info.-fill>.body,.modal.-info.-fill>.footer,.modal.-info.-fill>.header{border-color:#46aeb1}.modal.-info.-fill>.header{background-color:#4db5b9}.modal.-info.-fill>.body,.modal.-info.-fill>.footer{background-color:#62bec1}.modal.-info[x-placement^=top]>.arrow{border-top-color:#4db5b9}.modal.-info[x-placement^=top]>.arrow:after{border-top-color:#62bec1}.modal.-info[x-placement^=bottom]>.arrow{border-bottom-color:#4db5b9}.modal.-info[x-placement^=bottom]>.arrow:after{border-bottom-color:#62bec1}.modal.-info[x-placement^=right]>.arrow{border-right-color:#4db5b9}.modal.-info[x-placement^=right]>.arrow:after{border-right-color:#62bec1}.modal.-info[x-placement^=left]>.arrow{border-left-color:#4db5b9}.modal.-info[x-placement^=left]>.arrow:after{border-left-color:#62bec1}.inkline.-dark .modal.-info>.header{border-color:#495057}.inkline.-dark .modal.-info>.body,.inkline.-dark .modal.-info>.footer{border-color:#495057;background-color:#343a40}.modal-wrapper{display:block;position:relative}.modal-overlay{background:rgba(0,0,0,.75);position:fixed;top:0;left:0;z-index:2000;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.modal{text-align:left;list-style:none;line-height:1.5;display:block;width:calc(100% - 2rem)}.modal>.body,.modal>.footer,.modal>.header{border-width:1px;border-style:solid}.modal>.header{display:flex;justify-content:space-between}.modal>.header>.close{display:flex;justify-content:center;align-items:center;height:1.5rem;width:1.5rem;line-height:1.5rem;font-size:.5rem;cursor:pointer;border-radius:.25rem;padding:0;border:0;transition:background-color .3s ease;background-color:transparent}.modal>.header>.close>.icon:before{content:""}.modal>.header>.close:focus,.modal>.header>.close:hover{outline:none;background-color:rgba(0,0,0,.1)}.modal>.header>.close:active{background-color:rgba(0,0,0,.15)}.modal>.body+.body,.modal>.body+.footer,.modal>.header+.body,.modal>.header+.footer{border-top-width:0}.form-group.-sm>.form-input-label{font-size:.88rem}.form-group.-sm>.form-input-label.-left{padding-right:.8rem}.form-group.-sm>.form-input-label.-right{padding-left:.8rem}.form-group.-md>.form-input-label,.form-group>.form-input-label{font-size:1.1rem}.form-group.-md>.form-input-label.-left,.form-group>.form-input-label.-left{padding-right:1rem}.form-group.-md>.form-input-label.-right,.form-group>.form-input-label.-right{padding-left:1rem}.form-group.-lg>.form-input-label{font-size:1.32rem}.form-group.-lg>.form-input-label.-left{padding-right:1.2rem}.form-group.-lg>.form-input-label.-right{padding-left:1.2rem}.form-group{display:block;vertical-align:middle;position:relative}.form-group.-checkbox,.form-group.-radio{font-size:0}.form-group+.form-group{margin-top:1rem}.form-group.-inline{display:flex}.form-group.-inline>.form-input-group{flex-basis:100%}.form-group.-inline>.form-label{display:flex;flex:0 0 auto;align-self:center;margin-bottom:0}.form-group.-inline>.form-label.-right{margin-right:0}.form-group-error{position:relative;margin:.25rem 0 0;padding:0;list-style:none;color:#f25f5c;font-size:.88rem}.form-group-error li{margin:0}.inkline-icon.-circle:before{content:""}.inkline-icon.-chevron-down:before{content:""}.inkline-icon.-caret-down:before{content:""}.inkline-icon.-home:before{content:""}.inkline-icon.-calendar:before{content:""}.inkline-icon.-warning:before{content:""}.inkline-icon.-danger:before{content:""}.inkline-icon.-plus:before{content:""}.inkline-icon.-minus:before{content:""}.inkline-icon.-info:before{content:""}.inkline-icon.-times:before{content:""}.inkline-icon.-check:before{content:""}.inkline-icon.-sort-asc:before{content:""}.inkline-icon.-sort-desc:before{content:""}.inkline-icon.-sort:before{content:""}.inkline-icon.-search:before{content:""}.inkline-icon.-book:before{content:""}.inkline-icon.-file:before{content:""}.inkline-icon.-stack:before{content:""}.inkline-icon.-folder:before{content:""}.inkline-icon.-cart:before{content:""}.inkline-icon.-phone:before{content:""}.inkline-icon.-envelope:before{content:""}.inkline-icon.-location:before{content:""}.inkline-icon.-clock:before{content:""}.inkline-icon.-user:before{content:""}.inkline-icon.-key:before{content:""}.inkline-icon.-lock:before{content:""}.inkline-icon.-settings:before{content:""}.inkline-icon.-magic:before{content:""}.inkline-icon.-dashboard:before{content:""}.inkline-icon.-earth:before{content:""}.inkline-icon.-link:before{content:""}.inkline-icon.-attachment:before{content:""}.inkline-icon.-light:before{content:""}.inkline-icon.-dark:before{content:""}.inkline-icon.-star-empty:before{content:""}.inkline-icon.-star-half:before{content:""}.inkline-icon.-star-full:before{content:""}.inkline-icon.-heart:before{content:""}.inkline-icon.-code:before{content:""}.inkline-icon.-chevron-up:before{content:"";transform:rotate(180deg)}.inkline-icon.-chevron-left:before{content:"";transform:rotate(90deg)}.inkline-icon.-chevron-right:before{content:"";transform:rotate(-90deg)}.inkline-icon.-caret-up:before{content:"";transform:rotate(180deg)}.inkline-icon.-caret-left:before{content:"";transform:rotate(90deg)}.inkline-icon.-caret-right:before{content:"";transform:rotate(-90deg)}.inkline-icon.-sm{font-size:.88rem}.inkline-icon.-md{font-size:1.1rem}.inkline-icon.-lg{font-size:1.32rem}.form-input .clear-input:before,.inkline-icon,.modal>.header>.close>.icon:before{font-family:inkline!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.form-input .clear-input:before,.inkline-icon:before,.modal>.header>.close>.icon:before{display:inline-block}.form-group.-sm .form-input-group>.form-input>input,.form-group.-sm .form-input-group>.form-input>select,.form-group.-sm .form-input-group>.form-input>textarea,.form-group.-sm .select>.form-input-group>.form-input>input,.form-group.-sm .select>.form-input-group>.form-input>select,.form-group.-sm .select>.form-input-group>.form-input>textarea,.form-input-group.-sm>.form-input>input,.form-input-group.-sm>.form-input>select,.form-input-group.-sm>.form-input>textarea,.form.-sm .form-input-group>.form-input>input,.form.-sm .form-input-group>.form-input>select,.form.-sm .form-input-group>.form-input>textarea,.form.-sm .select>.form-input-group>.form-input>input,.form.-sm .select>.form-input-group>.form-input>select,.form.-sm .select>.form-input-group>.form-input>textarea,.select.-sm>.form-input-group>.form-input>input,.select.-sm>.form-input-group>.form-input>select,.select.-sm>.form-input-group>.form-input>textarea{padding:.4rem .8rem;font-size:.88rem;border-radius:.2rem}.form-group.-sm .form-input-group>.form-input.-prefixed>input,.form-group.-sm .form-input-group>.form-input.-prefixed>select,.form-group.-sm .form-input-group>.form-input.-prefixed>textarea,.form-group.-sm .select>.form-input-group>.form-input.-prefixed>input,.form-group.-sm .select>.form-input-group>.form-input.-prefixed>select,.form-group.-sm .select>.form-input-group>.form-input.-prefixed>textarea,.form-input-group.-sm>.form-input.-prefixed>input,.form-input-group.-sm>.form-input.-prefixed>select,.form-input-group.-sm>.form-input.-prefixed>textarea,.form.-sm .form-input-group>.form-input.-prefixed>input,.form.-sm .form-input-group>.form-input.-prefixed>select,.form.-sm .form-input-group>.form-input.-prefixed>textarea,.form.-sm .select>.form-input-group>.form-input.-prefixed>input,.form.-sm .select>.form-input-group>.form-input.-prefixed>select,.form.-sm .select>.form-input-group>.form-input.-prefixed>textarea,.select.-sm>.form-input-group>.form-input.-prefixed>input,.select.-sm>.form-input-group>.form-input.-prefixed>select,.select.-sm>.form-input-group>.form-input.-prefixed>textarea{padding-left:3.2rem}.form-group.-sm .form-input-group>.form-input.-suffixed>input,.form-group.-sm .form-input-group>.form-input.-suffixed>select,.form-group.-sm .form-input-group>.form-input.-suffixed>textarea,.form-group.-sm .select>.form-input-group>.form-input.-suffixed>input,.form-group.-sm .select>.form-input-group>.form-input.-suffixed>select,.form-group.-sm .select>.form-input-group>.form-input.-suffixed>textarea,.form-input-group.-sm>.form-input.-suffixed>input,.form-input-group.-sm>.form-input.-suffixed>select,.form-input-group.-sm>.form-input.-suffixed>textarea,.form.-sm .form-input-group>.form-input.-suffixed>input,.form.-sm .form-input-group>.form-input.-suffixed>select,.form.-sm .form-input-group>.form-input.-suffixed>textarea,.form.-sm .select>.form-input-group>.form-input.-suffixed>input,.form.-sm .select>.form-input-group>.form-input.-suffixed>select,.form.-sm .select>.form-input-group>.form-input.-suffixed>textarea,.select.-sm>.form-input-group>.form-input.-suffixed>input,.select.-sm>.form-input-group>.form-input.-suffixed>select,.select.-sm>.form-input-group>.form-input.-suffixed>textarea{padding-right:3.2rem}.form-input-group.-sm>.form-input-append,.form-input-group.-sm>.form-input-prepend{font-size:.88rem}.form-input-group.-sm>.form-input-append>span,.form-input-group.-sm>.form-input-prepend>span{padding:.4rem .8rem}.form-input-group.-sm>.form-input-prepend,.form-input-group.-sm>.form-input-prepend>:first-child{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.form-input-group.-sm>.form-input-append,.form-input-group.-sm>.form-input-append>:last-child{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.form-group.-md .form-input-group>.form-input>input,.form-group.-md .form-input-group>.form-input>select,.form-group.-md .form-input-group>.form-input>textarea,.form-group.-md .select>.form-input-group>.form-input>input,.form-group.-md .select>.form-input-group>.form-input>select,.form-group.-md .select>.form-input-group>.form-input>textarea,.form-group .form-input-group>.form-input>input,.form-group .form-input-group>.form-input>select,.form-group .form-input-group>.form-input>textarea,.form-group .select>.form-input-group>.form-input>input,.form-group .select>.form-input-group>.form-input>select,.form-group .select>.form-input-group>.form-input>textarea,.form-input-group.-md>.form-input>input,.form-input-group.-md>.form-input>select,.form-input-group.-md>.form-input>textarea,.form-input-group>.form-input>input,.form-input-group>.form-input>select,.form-input-group>.form-input>textarea,.form.-md .form-input-group>.form-input>input,.form.-md .form-input-group>.form-input>select,.form.-md .form-input-group>.form-input>textarea,.form.-md .select>.form-input-group>.form-input>input,.form.-md .select>.form-input-group>.form-input>select,.form.-md .select>.form-input-group>.form-input>textarea,.select.-md>.form-input-group>.form-input>input,.select.-md>.form-input-group>.form-input>select,.select.-md>.form-input-group>.form-input>textarea{padding:.5rem 1rem;font-size:1.1rem;border-radius:.25rem}.form-group.-md .form-input-group>.form-input.-prefixed>input,.form-group.-md .form-input-group>.form-input.-prefixed>select,.form-group.-md .form-input-group>.form-input.-prefixed>textarea,.form-group.-md .select>.form-input-group>.form-input.-prefixed>input,.form-group.-md .select>.form-input-group>.form-input.-prefixed>select,.form-group.-md .select>.form-input-group>.form-input.-prefixed>textarea,.form-group .form-input-group>.form-input.-prefixed>input,.form-group .form-input-group>.form-input.-prefixed>select,.form-group .form-input-group>.form-input.-prefixed>textarea,.form-group .select>.form-input-group>.form-input.-prefixed>input,.form-group .select>.form-input-group>.form-input.-prefixed>select,.form-group .select>.form-input-group>.form-input.-prefixed>textarea,.form-input-group.-md>.form-input.-prefixed>input,.form-input-group.-md>.form-input.-prefixed>select,.form-input-group.-md>.form-input.-prefixed>textarea,.form-input-group>.form-input.-prefixed>input,.form-input-group>.form-input.-prefixed>select,.form-input-group>.form-input.-prefixed>textarea,.form.-md .form-input-group>.form-input.-prefixed>input,.form.-md .form-input-group>.form-input.-prefixed>select,.form.-md .form-input-group>.form-input.-prefixed>textarea,.form.-md .select>.form-input-group>.form-input.-prefixed>input,.form.-md .select>.form-input-group>.form-input.-prefixed>select,.form.-md .select>.form-input-group>.form-input.-prefixed>textarea,.select.-md>.form-input-group>.form-input.-prefixed>input,.select.-md>.form-input-group>.form-input.-prefixed>select,.select.-md>.form-input-group>.form-input.-prefixed>textarea{padding-left:4rem}.form-group.-md .form-input-group>.form-input.-suffixed>input,.form-group.-md .form-input-group>.form-input.-suffixed>select,.form-group.-md .form-input-group>.form-input.-suffixed>textarea,.form-group.-md .select>.form-input-group>.form-input.-suffixed>input,.form-group.-md .select>.form-input-group>.form-input.-suffixed>select,.form-group.-md .select>.form-input-group>.form-input.-suffixed>textarea,.form-group .form-input-group>.form-input.-suffixed>input,.form-group .form-input-group>.form-input.-suffixed>select,.form-group .form-input-group>.form-input.-suffixed>textarea,.form-group .select>.form-input-group>.form-input.-suffixed>input,.form-group .select>.form-input-group>.form-input.-suffixed>select,.form-group .select>.form-input-group>.form-input.-suffixed>textarea,.form-input-group.-md>.form-input.-suffixed>input,.form-input-group.-md>.form-input.-suffixed>select,.form-input-group.-md>.form-input.-suffixed>textarea,.form-input-group>.form-input.-suffixed>input,.form-input-group>.form-input.-suffixed>select,.form-input-group>.form-input.-suffixed>textarea,.form.-md .form-input-group>.form-input.-suffixed>input,.form.-md .form-input-group>.form-input.-suffixed>select,.form.-md .form-input-group>.form-input.-suffixed>textarea,.form.-md .select>.form-input-group>.form-input.-suffixed>input,.form.-md .select>.form-input-group>.form-input.-suffixed>select,.form.-md .select>.form-input-group>.form-input.-suffixed>textarea,.select.-md>.form-input-group>.form-input.-suffixed>input,.select.-md>.form-input-group>.form-input.-suffixed>select,.select.-md>.form-input-group>.form-input.-suffixed>textarea{padding-right:4rem}.form-input-group.-md>.form-input-append,.form-input-group.-md>.form-input-prepend,.form-input-group>.form-input-append,.form-input-group>.form-input-prepend{font-size:1.1rem}.form-input-group.-md>.form-input-append>span,.form-input-group.-md>.form-input-prepend>span,.form-input-group>.form-input-append>span,.form-input-group>.form-input-prepend>span{padding:.5rem 1rem}.form-input-group.-md>.form-input-prepend,.form-input-group.-md>.form-input-prepend>:first-child,.form-input-group>.form-input-prepend,.form-input-group>.form-input-prepend>:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.form-input-group.-md>.form-input-append,.form-input-group.-md>.form-input-append>:last-child,.form-input-group>.form-input-append,.form-input-group>.form-input-append>:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-group.-lg .form-input-group>.form-input>input,.form-group.-lg .form-input-group>.form-input>select,.form-group.-lg .form-input-group>.form-input>textarea,.form-group.-lg .select>.form-input-group>.form-input>input,.form-group.-lg .select>.form-input-group>.form-input>select,.form-group.-lg .select>.form-input-group>.form-input>textarea,.form-input-group.-lg>.form-input>input,.form-input-group.-lg>.form-input>select,.form-input-group.-lg>.form-input>textarea,.form.-lg .form-input-group>.form-input>input,.form.-lg .form-input-group>.form-input>select,.form.-lg .form-input-group>.form-input>textarea,.form.-lg .select>.form-input-group>.form-input>input,.form.-lg .select>.form-input-group>.form-input>select,.form.-lg .select>.form-input-group>.form-input>textarea,.select.-lg>.form-input-group>.form-input>input,.select.-lg>.form-input-group>.form-input>select,.select.-lg>.form-input-group>.form-input>textarea{padding:.6rem 1.2rem;font-size:1.32rem;border-radius:.3rem}.form-group.-lg .form-input-group>.form-input.-prefixed>input,.form-group.-lg .form-input-group>.form-input.-prefixed>select,.form-group.-lg .form-input-group>.form-input.-prefixed>textarea,.form-group.-lg .select>.form-input-group>.form-input.-prefixed>input,.form-group.-lg .select>.form-input-group>.form-input.-prefixed>select,.form-group.-lg .select>.form-input-group>.form-input.-prefixed>textarea,.form-input-group.-lg>.form-input.-prefixed>input,.form-input-group.-lg>.form-input.-prefixed>select,.form-input-group.-lg>.form-input.-prefixed>textarea,.form.-lg .form-input-group>.form-input.-prefixed>input,.form.-lg .form-input-group>.form-input.-prefixed>select,.form.-lg .form-input-group>.form-input.-prefixed>textarea,.form.-lg .select>.form-input-group>.form-input.-prefixed>input,.form.-lg .select>.form-input-group>.form-input.-prefixed>select,.form.-lg .select>.form-input-group>.form-input.-prefixed>textarea,.select.-lg>.form-input-group>.form-input.-prefixed>input,.select.-lg>.form-input-group>.form-input.-prefixed>select,.select.-lg>.form-input-group>.form-input.-prefixed>textarea{padding-left:4.8rem}.form-group.-lg .form-input-group>.form-input.-suffixed>input,.form-group.-lg .form-input-group>.form-input.-suffixed>select,.form-group.-lg .form-input-group>.form-input.-suffixed>textarea,.form-group.-lg .select>.form-input-group>.form-input.-suffixed>input,.form-group.-lg .select>.form-input-group>.form-input.-suffixed>select,.form-group.-lg .select>.form-input-group>.form-input.-suffixed>textarea,.form-input-group.-lg>.form-input.-suffixed>input,.form-input-group.-lg>.form-input.-suffixed>select,.form-input-group.-lg>.form-input.-suffixed>textarea,.form.-lg .form-input-group>.form-input.-suffixed>input,.form.-lg .form-input-group>.form-input.-suffixed>select,.form.-lg .form-input-group>.form-input.-suffixed>textarea,.form.-lg .select>.form-input-group>.form-input.-suffixed>input,.form.-lg .select>.form-input-group>.form-input.-suffixed>select,.form.-lg .select>.form-input-group>.form-input.-suffixed>textarea,.select.-lg>.form-input-group>.form-input.-suffixed>input,.select.-lg>.form-input-group>.form-input.-suffixed>select,.select.-lg>.form-input-group>.form-input.-suffixed>textarea{padding-right:4.8rem}.form-input-group.-lg>.form-input-append,.form-input-group.-lg>.form-input-prepend{font-size:1.32rem}.form-input-group.-lg>.form-input-append>span,.form-input-group.-lg>.form-input-prepend>span{padding:.6rem 1.2rem}.form-input-group.-lg>.form-input-prepend,.form-input-group.-lg>.form-input-prepend>:first-child{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.form-input-group.-lg>.form-input-append,.form-input-group.-lg>.form-input-append>:last-child{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.form-input-group.-light .form-input>input,.form-input-group.-light .form-input>select,.form-input-group.-light .form-input>textarea,.form-input-group .form-input>input,.form-input-group .form-input>select,.form-input-group .form-input>textarea{color:#2c3e50;background-color:#fff;border-color:#e9ecef}.form-input-group.-light .form-input>input:hover,.form-input-group.-light .form-input>select:hover,.form-input-group.-light .form-input>textarea:hover,.form-input-group .form-input>input:hover,.form-input-group .form-input>select:hover,.form-input-group .form-input>textarea:hover{border-color:#ced4db}.form-input-group.-light .form-input>input:focus,.form-input-group.-light .form-input>select:focus,.form-input-group.-light .form-input>textarea:focus,.form-input-group .form-input>input:focus,.form-input-group .form-input>select:focus,.form-input-group .form-input>textarea:focus{color:#2c3e50;border-color:#37598d}.form-input-group.-light .form-input>input::-moz-placeholder,.form-input-group.-light .form-input>select::-moz-placeholder,.form-input-group.-light .form-input>textarea::-moz-placeholder,.form-input-group .form-input>input::-moz-placeholder,.form-input-group .form-input>select::-moz-placeholder,.form-input-group .form-input>textarea::-moz-placeholder{color:#868e96}.form-input-group.-light .form-input>input:-ms-input-placeholder,.form-input-group.-light .form-input>select:-ms-input-placeholder,.form-input-group.-light .form-input>textarea:-ms-input-placeholder,.form-input-group .form-input>input:-ms-input-placeholder,.form-input-group .form-input>select:-ms-input-placeholder,.form-input-group .form-input>textarea:-ms-input-placeholder{color:#868e96}.form-input-group.-light .form-input>input::-ms-input-placeholder,.form-input-group.-light .form-input>select::-ms-input-placeholder,.form-input-group.-light .form-input>textarea::-ms-input-placeholder,.form-input-group .form-input>input::-ms-input-placeholder,.form-input-group .form-input>select::-ms-input-placeholder,.form-input-group .form-input>textarea::-ms-input-placeholder{color:#868e96}.form-input-group.-light .form-input>input::placeholder,.form-input-group.-light .form-input>select::placeholder,.form-input-group.-light .form-input>textarea::placeholder,.form-input-group .form-input>input::placeholder,.form-input-group .form-input>select::placeholder,.form-input-group .form-input>textarea::placeholder{color:#868e96}.form-input-group.-light .form-input>input:disabled,.form-input-group.-light .form-input>input[readonly],.form-input-group.-light .form-input>select:disabled,.form-input-group.-light .form-input>select[readonly],.form-input-group.-light .form-input>textarea:disabled,.form-input-group.-light .form-input>textarea[readonly],.form-input-group .form-input>input:disabled,.form-input-group .form-input>input[readonly],.form-input-group .form-input>select:disabled,.form-input-group .form-input>select[readonly],.form-input-group .form-input>textarea:disabled,.form-input-group .form-input>textarea[readonly]{color:#2c3e50;background-color:#e9ecef}.form-input-group.-light .form-input>input:disabled:hover,.form-input-group.-light .form-input>input[readonly]:hover,.form-input-group.-light .form-input>select:disabled:hover,.form-input-group.-light .form-input>select[readonly]:hover,.form-input-group.-light .form-input>textarea:disabled:hover,.form-input-group.-light .form-input>textarea[readonly]:hover,.form-input-group .form-input>input:disabled:hover,.form-input-group .form-input>input[readonly]:hover,.form-input-group .form-input>select:disabled:hover,.form-input-group .form-input>select[readonly]:hover,.form-input-group .form-input>textarea:disabled:hover,.form-input-group .form-input>textarea[readonly]:hover{border-color:#e9ecef}.form-input-group.-light .form-input>input[readonly]:focus,.form-input-group.-light .form-input>select[readonly]:focus,.form-input-group.-light .form-input>textarea[readonly]:focus,.form-input-group .form-input>input[readonly]:focus,.form-input-group .form-input>select[readonly]:focus,.form-input-group .form-input>textarea[readonly]:focus{outline:0;border-color:#ced4db}.form-input-group.-light .form-input .form-input-prefix,.form-input-group .form-input .form-input-prefix{border-right-color:#e9ecef}.form-input-group.-light .form-input .form-input-suffix,.form-input-group .form-input .form-input-suffix{border-left-color:#e9ecef}.form-input-group.-light .form-input .clear-input,.form-input-group .form-input .clear-input{background-color:#e9ecef;color:#343a40}.form-input-group.-light .form-input .clear-input:hover,.form-input-group .form-input .clear-input:hover{color:#343a40;background-color:#37598d}.form-input-group.-light .form-input-append,.form-input-group.-light .form-input-prepend,.form-input-group .form-input-append,.form-input-group .form-input-prepend{background-color:#e9ecef}.select.-light:not([readonly])>.form-input-group>.form-input>input[readonly]:not([disabled]){background-color:#fff}.select.-light[readonly]>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#ced4db}.select.-light>.form-input-group>.form-input>input{color:#2c3e50}.select.-light>.form-input-group>.form-input>input[readonly]{cursor:pointer}.select.-light>.form-input-group>.form-input>input[readonly]:disabled{cursor:default}.select.-light>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#37598d}.form-input-group.-dark .form-input>input,.form-input-group.-dark .form-input>select,.form-input-group.-dark .form-input>textarea{color:#f8f9fa;background-color:#2d3238;border-color:#495057}.form-input-group.-dark .form-input>input:hover,.form-input-group.-dark .form-input>select:hover,.form-input-group.-dark .form-input>textarea:hover{border-color:#59626a}.form-input-group.-dark .form-input>input:focus,.form-input-group.-dark .form-input>select:focus,.form-input-group.-dark .form-input>textarea:focus{color:#f8f9fa;border-color:#37598d}.form-input-group.-dark .form-input>input::-moz-placeholder,.form-input-group.-dark .form-input>select::-moz-placeholder,.form-input-group.-dark .form-input>textarea::-moz-placeholder{color:#ced4da}.form-input-group.-dark .form-input>input:-ms-input-placeholder,.form-input-group.-dark .form-input>select:-ms-input-placeholder,.form-input-group.-dark .form-input>textarea:-ms-input-placeholder{color:#ced4da}.form-input-group.-dark .form-input>input::-ms-input-placeholder,.form-input-group.-dark .form-input>select::-ms-input-placeholder,.form-input-group.-dark .form-input>textarea::-ms-input-placeholder{color:#ced4da}.form-input-group.-dark .form-input>input::placeholder,.form-input-group.-dark .form-input>select::placeholder,.form-input-group.-dark .form-input>textarea::placeholder{color:#ced4da}.form-input-group.-dark .form-input>input:disabled,.form-input-group.-dark .form-input>input[readonly],.form-input-group.-dark .form-input>select:disabled,.form-input-group.-dark .form-input>select[readonly],.form-input-group.-dark .form-input>textarea:disabled,.form-input-group.-dark .form-input>textarea[readonly]{color:#f8f9fa;background-color:#495057}.form-input-group.-dark .form-input>input:disabled:hover,.form-input-group.-dark .form-input>input[readonly]:hover,.form-input-group.-dark .form-input>select:disabled:hover,.form-input-group.-dark .form-input>select[readonly]:hover,.form-input-group.-dark .form-input>textarea:disabled:hover,.form-input-group.-dark .form-input>textarea[readonly]:hover{border-color:#495057}.form-input-group.-dark .form-input>input[readonly]:focus,.form-input-group.-dark .form-input>select[readonly]:focus,.form-input-group.-dark .form-input>textarea[readonly]:focus{outline:0;border-color:#59626a}.form-input-group.-dark .form-input .form-input-prefix{border-right-color:#495057}.form-input-group.-dark .form-input .form-input-suffix{border-left-color:#495057}.form-input-group.-dark .form-input .clear-input{background-color:#343a40;color:#fff}.form-input-group.-dark .form-input .clear-input:hover{color:#fff;background-color:#37598d}.form-input-group.-dark .form-input-append,.form-input-group.-dark .form-input-prepend{background-color:#343a40}.select.-dark:not([readonly])>.form-input-group>.form-input>input[readonly]:not([disabled]){background-color:#2d3238}.select.-dark[readonly]>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#59626a}.select.-dark>.form-input-group>.form-input>input{color:#f8f9fa}.select.-dark>.form-input-group>.form-input>input[readonly]{cursor:pointer}.select.-dark>.form-input-group>.form-input>input[readonly]:disabled{cursor:default}.select.-dark>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#37598d}.form-input{position:relative;display:flex;flex:1 0 auto;flex-direction:row}.form-input>input,.form-input>select,.form-input>textarea{position:relative;flex:1 0 auto;width:1%;line-height:1.5;background-clip:padding-box;border-width:1px;border-style:solid;box-shadow:inset 0 1px 1px rgba(0,0,0,.05);transition:background-color .21s ease,color .21s ease,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-input>input::-ms-expand,.form-input>select::-ms-expand,.form-input>textarea::-ms-expand{background-color:transparent;border:0}.form-input>input:focus,.form-input>select:focus,.form-input>textarea:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.form-input>input::-moz-placeholder,.form-input>select::-moz-placeholder,.form-input>textarea::-moz-placeholder{opacity:1}.form-input>input:-ms-input-placeholder,.form-input>select:-ms-input-placeholder,.form-input>textarea:-ms-input-placeholder{opacity:1}.form-input>input::-ms-input-placeholder,.form-input>select::-ms-input-placeholder,.form-input>textarea::-ms-input-placeholder{opacity:1}.form-input>input::placeholder,.form-input>select::placeholder,.form-input>textarea::placeholder{opacity:1}.form-input>input:disabled,.form-input>input[readonly],.form-input>select:disabled,.form-input>select[readonly],.form-input>textarea:disabled,.form-input>textarea[readonly]{opacity:1;cursor:default}.form-input>input[readonly]:focus,.form-input>select[readonly]:focus,.form-input>textarea[readonly]:focus{outline:0}.form-input .form-input-prefix,.form-input .form-input-suffix{z-index:1;top:50%;position:absolute;transform:translateY(-50%);font-style:normal;color:#868e96;transition:border-color .21s ease}.form-input .form-input-prefix>button,.form-input .form-input-suffix>button{background:transparent;border:0;color:#343a40}.form-input .form-input-prefix{left:1rem;padding-right:1rem;border-right-width:1px;border-right-style:solid}.form-input .form-input-suffix{right:1rem;padding-left:1rem;border-left-width:1px;border-left-style:solid}.form-input .clear-input{transition:background-color .21s ease;display:flex;justify-content:center;align-items:center;cursor:pointer;width:1.2rem;height:1.2rem;border-radius:100%}.form-input .clear-input:before{font-size:8px;content:""}.form-input>input,.form-input>select,.form-input>textarea{padding:.5rem 1rem;font-size:1.1rem;border-radius:.25rem}.form-input.-prefixed>input,.form-input.-prefixed>select,.form-input.-prefixed>textarea{padding-left:4rem}.form-input.-suffixed>input,.form-input.-suffixed>select,.form-input.-suffixed>textarea{padding-right:4rem}.form-group.-error .form-input-group>.form-input>input,.form-group.-error .form-input-group>.form-input>select,.form-group.-error .form-input-group>.form-input>textarea{border-color:#f25f5c}.form-input-group{display:block;vertical-align:middle;position:relative}.form-input-group.-appended,.form-input-group.-prepended{display:flex;flex-wrap:nowrap}.form-input-group.-appended .form-input,.form-input-group.-prepended .form-input{flex-shrink:1}.form-input-group.-prepended .form-input>input,.form-input-group.-prepended .form-input>select,.form-input-group.-prepended .form-input>textarea{border-top-left-radius:0;border-bottom-left-radius:0}.form-input-group.-appended .form-input>input,.form-input-group.-appended .form-input>select,.form-input-group.-appended .form-input>textarea{border-top-right-radius:0;border-bottom-right-radius:0}.form-input-group>.form-input-append,.form-input-group>.form-input-prepend{display:flex;flex-flow:row nowrap;align-items:stretch}.form-input-group>.form-input-append>*,.form-input-group>.form-input-prepend>*{flex:auto 1 0;border-radius:0}.form-input-append,.form-input-prepend{align-items:center;display:flex;padding:0;line-height:1.5;transition:background-color .21s ease}._clearfix:after{content:"";display:table;clear:both}.alert,.alert.-primary{border-color:#6680a9;background-color:#879bbb;color:#0c141f}.alert.-primary a,.alert a{color:#05080d}.alert.-primary>.icon,.alert>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-primary code,.alert code{background-color:#9eaec8;color:#000}.inkline.-dark .alert,.inkline.-dark .alert.-primary{border-color:#3e5a88;background-color:#2e4365;color:#8ba7d2}.inkline.-dark .alert.-primary a,.inkline.-dark .alert a{color:#9eb5d9}.inkline.-dark .alert.-primary code,.inkline.-dark .alert code{background-color:#23334c;color:#b0c3e0}.alert.-secondary{border-color:#7a81c6;background-color:#9ea3d5;color:#262a57}.alert.-secondary a{color:#1e2145}.alert.-secondary>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-secondary code{background-color:#b7bbe0;color:#161934}.inkline.-dark .alert.-secondary{border-color:#575da0;background-color:#454a7f;color:#c8cbe7}.inkline.-dark .alert.-secondary a{color:#dadbef}.inkline.-dark .alert.-secondary code{background-color:#383d68;color:#ebecf7}.alert.-success{border-color:#7dbf8c;background-color:#9fd0aa;color:#274f30}.alert.-success a{color:#1f3e26}.alert.-success>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-success code{background-color:#b7dcbf;color:#162d1b}.inkline.-dark .alert.-success{border-color:#59976c;background-color:#467755;color:#c5e3cc}.inkline.-dark .alert.-success a{color:#d6ebdb}.inkline.-dark .alert.-success code{background-color:#396145;color:#e8f3ea}.alert.-danger{border-color:#f3716e;background-color:#f79f9d;color:#a8100d}.alert.-danger a{color:#900e0b}.alert.-danger>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-danger code{background-color:#fabfbe;color:#780c0a}.inkline.-dark .alert.-danger{border-color:#b86061;background-color:#9e4748;color:#fdeaea}.inkline.-dark .alert.-danger a{color:#fff}.inkline.-dark .alert.-danger code{background-color:#853c3d;color:#fff}.alert.-warning{border-color:#f3b669;background-color:#f7cd98;color:#9e5f0d}.alert.-warning a{color:#87510b}.alert.-warning>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-warning code{background-color:#faddb9;color:#6f4209}.inkline.-dark .alert.-warning{border-color:#b98f59;background-color:#9d7542;color:#fdf0e0}.inkline.-dark .alert.-warning a{color:#fefcf8}.inkline.-dark .alert.-warning code{background-color:#846237;color:#fff}.alert.-info{border-color:#7cc9cc;background-color:#a1d8da;color:#276163}.alert.-info a{color:#204f51}.alert.-info>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-info code{background-color:#bbe3e4;color:#193d3e}.inkline.-dark .alert.-info{border-color:#5aa0a5;background-color:#488084;color:#d0ebec}.inkline.-dark .alert.-info a{color:#e2f3f4}.inkline.-dark .alert.-info code{background-color:#3b6a6d;color:#f4fbfb}.alert.-sm{border-radius:.2rem;font-size:.88rem}.alert.-sm>.content{padding:.8rem}.alert.-sm>.title{margin-bottom:.8rem}.alert.-sm>.link+.link{margin-left:.8rem}.alert.-sm>.dismiss{padding:.4rem;margin-right:.4rem;margin-left:.4rem}.alert.-sm>.icon{padding-left:.8rem;padding-right:.8rem}.alert,.alert.-md{border-radius:.25rem;font-size:1.1rem}.alert.-md>.content,.alert>.content{padding:1rem}.alert.-md>.title,.alert>.title{margin-bottom:1rem}.alert.-md>.link+.link,.alert>.link+.link{margin-left:1rem}.alert.-md>.dismiss,.alert>.dismiss{padding:.5rem;margin-right:.5rem;margin-left:.5rem}.alert.-md>.icon,.alert>.icon{padding-left:1rem;padding-right:1rem}.alert.-lg{border-radius:.3rem;font-size:1.32rem}.alert.-lg>.content{padding:1.2rem}.alert.-lg>.title{margin-bottom:1.2rem}.alert.-lg>.link+.link{margin-left:1.2rem}.alert.-lg>.dismiss{padding:.6rem;margin-right:.6rem;margin-left:.6rem}.alert.-lg>.icon{padding-left:1.2rem;padding-right:1.2rem}.alert{position:relative;display:flex;flex-direction:row;flex:1 1 auto;min-width:0;word-wrap:break-word;background-clip:border-box;border-width:1px;border-style:solid;transition:background-color .21s ease,color .21s ease,border-color .21s ease;align-items:center}.alert a{font-weight:600;transition:color .21s ease}.alert>.icon{flex:1}.alert.-dismissible>.content{padding-right:0}.alert.-with-icon>.content{padding-left:0}.alert>.dismiss{flex:0 0 auto;cursor:pointer;display:inline-block;text-align:center}.alert,.alert>.content{flex:0 1 100%}.alert>.content>hr,.alert>hr{margin-right:0;margin-left:0}.alert>.content>:first-child,.alert>:first-child{margin-top:0}.alert>.content>:last-child,.alert>:last-child{margin-bottom:0}.tabs.-code{display:flex;flex-direction:row}.tabs.-code .header{flex:25%;margin-right:1rem}.tabs.-code .tab{flex:100%;max-width:75%}@media screen and (max-width:979px){.tabs.-code{flex-direction:column}.tabs.-code .tab{max-width:100%}}.info-alert{border:1px solid #37598d;border-left-width:5px;padding:1rem;margin:2rem 0 1rem}.info-alert p{margin:0}.link-card .icon{position:absolute;right:2rem;top:50%;margin-top:-8px;transition:right .3s ease}.link-card:hover .icon{right:1rem}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#37598d}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}.theme-default-content:not(.custom) ol,.theme-default-content:not(.custom) p,.theme-default-content:not(.custom) ul{line-height:1.7}.theme-default-content:not(.custom) a{font-weight:500;color:#37598d;text-decoration:none}.theme-default-content:not(.custom) p a code{font-weight:400;color:#37598d}.theme-default-content:not(.custom) kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}.theme-default-content:not(.custom) blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}.theme-default-content:not(.custom) blockquote>p{margin:0}.theme-default-content:not(.custom) ol,.theme-default-content:not(.custom) ul{padding-left:1.2em}.theme-default-content:not(.custom) strong{font-weight:600}.theme-default-content:not(.custom) h1,.theme-default-content:not(.custom) h2,.theme-default-content:not(.custom) h3,.theme-default-content:not(.custom) h4,.theme-default-content:not(.custom) h5,.theme-default-content:not(.custom) h6{font-weight:600;line-height:1.25;margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom) h1:first-child,.theme-default-content:not(.custom) h2:first-child,.theme-default-content:not(.custom) h3:first-child,.theme-default-content:not(.custom) h4:first-child,.theme-default-content:not(.custom) h5:first-child,.theme-default-content:not(.custom) h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom) h1:first-child+.custom-block,.theme-default-content:not(.custom) h1:first-child+p,.theme-default-content:not(.custom) h1:first-child+pre,.theme-default-content:not(.custom) h2:first-child+.custom-block,.theme-default-content:not(.custom) h2:first-child+p,.theme-default-content:not(.custom) h2:first-child+pre,.theme-default-content:not(.custom) h3:first-child+.custom-block,.theme-default-content:not(.custom) h3:first-child+p,.theme-default-content:not(.custom) h3:first-child+pre,.theme-default-content:not(.custom) h4:first-child+.custom-block,.theme-default-content:not(.custom) h4:first-child+p,.theme-default-content:not(.custom) h4:first-child+pre,.theme-default-content:not(.custom) h5:first-child+.custom-block,.theme-default-content:not(.custom) h5:first-child+p,.theme-default-content:not(.custom) h5:first-child+pre,.theme-default-content:not(.custom) h6:first-child+.custom-block,.theme-default-content:not(.custom) h6:first-child+p,.theme-default-content:not(.custom) h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom) h1:hover .header-anchor,.theme-default-content:not(.custom) h2:hover .header-anchor,.theme-default-content:not(.custom) h3:hover .header-anchor,.theme-default-content:not(.custom) h4:hover .header-anchor,.theme-default-content:not(.custom) h5:hover .header-anchor,.theme-default-content:not(.custom) h6:hover .header-anchor{opacity:1}.theme-default-content:not(.custom) h1{font-size:2.2rem}.theme-default-content:not(.custom) h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #dfdfdf}.theme-default-content:not(.custom) h3{font-size:1.35rem}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #dfdfdf}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #dfdfdf;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-container.blank .page{padding-bottom:0}.theme-container.blank .theme-default-content{max-width:unset;padding:2rem 0 0}.theme-container.blank .page-edit{display:none}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#blog-post{margin-top:6rem;margin-bottom:4rem;max-width:740px;font-size:1.2rem}#blog-post .blog-post-excerpt,#blog-post .blog-post-title{text-align:center;margin-bottom:2rem}#blog-post .blog-post-excerpt{color:#4f6478}#blog-post .blog-post-meta{color:#4f6478;margin-bottom:6rem;text-align:center;font-size:14px;font-weight:600}#blog-post .blog-post-image{position:relative;width:75vw;min-width:100%;margin:4vw calc(50% - 50vw);transform:translateX(calc(50vw - 50%))}#blog-post h2{border-bottom:0}#blog-posts{margin-bottom:4rem}#blog .theme-default-content{padding:0}@media screen and (min-width:720px){#blog .sidebar{display:none}}.blog-entry{margin-bottom:2rem}.blog-entry .body{border:0}.blog-entry .blog-entry-image{overflow:hidden;position:relative}.blog-entry .blog-entry-image .foreground{z-index:1;position:absolute;top:50%;transform:translateY(-50%)}.blog-entry .blog-entry-title{text-decoration:none}.blog-entry .blog-entry-title h2{margin:0;font-size:1.6rem}.blog-entry .blog-entry-meta{margin:.5rem 0;font-size:.8rem;color:#4f6478}.blog-entry .blog-entry-description{margin:0;color:#4f6478;font-size:1rem}.hero{text-align:center;display:block;background-image:url(/header3.jpg);background-attachment:static;background-repeat:no-repeat;background-size:cover;background-position:50%;padding:3.6rem 0 0}.hero .hero-content{max-width:1170px;padding:2rem .5rem 10rem;display:block;margin:0 auto}.hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.hero h1{font-size:3rem}.hero .description,.hero h1{margin:2rem auto}.hero .action{margin:2rem auto 1rem}.hero .description{max-width:35rem;font-size:1.2rem;line-height:1.5;color:#6a8bad}@media (max-width:419px){.hero img{max-height:210px;margin:2rem auto 1.2rem}.hero h1{font-size:2rem}.hero .action,.hero .description,.hero h1{margin:1.2rem auto}.hero .description{font-size:1.2rem}.hero .action-button{font-size:1rem;padding:.6rem 1.2rem}}.section{padding-top:8rem;padding-bottom:8rem}.section .section-center{text-align:center;max-width:800px;margin:0 auto}.section h1,.section h2,.section h3,.section h4,.section h5,.section h6{margin-top:0}.navbar .home-link span{text-indent:-10000px}.navbar a:active,.navbar a:focus,.navbar a:hover{text-decoration:none}.sidebar ul li{margin-bottom:0}div[class*=language-]>pre{margin:0}pre code{font-size:.9rem}#homepage .header-anchor{display:none}#features{margin-top:-40px}@media (max-width:980px){#features{flex-direction:column;text-align:center}}#easy-setup-section{margin-top:-2rem;text-align:center}#easy-setup-section .container{max-width:980px}#easy-setup-section div.language-bash{margin-top:2rem;width:auto;display:inline-block;max-width:100%}#video-section{color:#fff;background-color:#37598d;text-align:center;background-image:url(/corner-left-right-asymmetric-gray.png);background-size:100% auto;background-repeat:no-repeat;background-position:top}#video-section h2{margin-top:0;border-bottom:0;color:#fff}#video-section p{color:hsla(0,0%,100%,.8)}#video-section .video-features{display:flex;width:100%;margin-top:4rem}#video-section .video-features ul{width:33%;text-align:left;margin-left:2rem}#video-section .video-features ul li{display:flex;align-items:center;margin-bottom:.5rem}#video-section .video-features ul svg{margin-right:1rem}#video-section .video-features .video{padding:1rem;background:#fff;display:block;width:67%;box-sizing:border-box}@media screen and (max-width:979px){#video-section .video-features{flex-direction:column}#video-section .video-features .video,#video-section .video-features ul{width:100%;margin-left:0}#video-section .video-features ul{margin-top:2rem}}#code-tabs{background:#f8f9fa!important}#code-examples svg{width:3rem;height:3rem;color:#37598d}#code-examples img{width:4rem}#code-examples h2{margin-top:1rem}#code-examples .row{align-items:center}@media screen and (max-width:979px){#code-examples{text-align:center}#code-examples .inverse{flex-direction:column-reverse}#code-examples p,#code-examples ul{text-align:left}#code-examples .terminal-wrapper{margin-bottom:1rem}}@media screen and (max-width:767px){#comingsoon ul li._text-muted{display:none}}#usedby{padding-top:4rem;padding-bottom:2rem;justify-content:space-between;text-align:center}#usedby .column{display:flex;flex-wrap:wrap;justify-content:center}#usedby .column a{margin:1rem}#usedby img{margin:0 auto 2rem;display:block;opacity:.5;transition:opacity .3s ease;height:45px;width:auto}#usedby img:hover{opacity:.6}#performance img{margin:1rem auto 0}#qldb-comparison{padding-bottom:5rem}#qldb-comparison .fa-bolt{font-size:64px;margin-bottom:1rem}#get-started-end .button{margin-top:2rem}#get-started-end .section-center{margin-bottom:0}.jobs ul{border:1px solid #dfdfdf;list-style:none;padding-left:0!important}.jobs ul li{border-bottom:1px solid #dfdfdf;margin:0}.jobs ul li:last-child{border-bottom:0}.jobs ul li a{display:block;padding:1rem;text-decoration:none!important}.jobs ul li a:focus,.jobs ul li a:hover{background:#f9f9f9}#nprogress{pointer-events:none}#nprogress .bar{background:#37598d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #37598d,0 0 5px #37598d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#37598d transparent transparent #37598d;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.footer{padding:2.5rem;border-top:1px solid #dfdfdf;color:#4e6e8e}.footer .column{display:flex;justify-content:space-between}@media screen and (max-width:767px){.footer .column{flex-direction:column-reverse;align-items:center}.footer .column .nav{margin-bottom:1rem}}.subscribe-modal .close .icon{display:none}.subscribe-modal .close:before{font-family:Helvetica,monospace;content:"x";font-size:12px;display:inline-block}.home{padding:3.6rem 2rem 0;max-width:1170px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#37598d;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #32507f}.home .hero .action-button:hover{background-color:#4067a4}.home .features{border-top:1px solid #dfdfdf;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #dfdfdf;text-align:center;color:#4e6e8e}#github-button{height:28px}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}#research-paper-button:focus,#research-paper-button:hover{text-decoration:none!important}#research-paper-button:focus span,#research-paper-button:hover span{text-decoration:underline!important}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #dfdfdf}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#dfdfdf;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#37598d;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#2c3e50}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#dfdfdf;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#dfdfdf}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#2c3e50}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #c9c9c9;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#37598d}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #c9c9c9;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#37598d}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#37598d}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #37598d;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#37598d}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#37598d}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #3e649f}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #dfdfdf;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#37598d;border-left-color:#37598d}.sidebar-heading.clickable:hover{color:#37598d}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#37598d}a.sidebar-link.active{font-weight:600;color:#37598d;border-left-color:#37598d}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #dfdfdf;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.feature{padding:1.2rem;box-sizing:border-box;background:#fff;margin-bottom:2rem;border-radius:4px;border:1px solid #dfdfdf;border-bottom:4px solid #37598d}.feature img{max-width:100px;margin:0 auto;display:block}.feature h2{font-size:1.4rem;font-weight:500;margin-top:1.5rem;border-bottom:none;padding-bottom:0;color:#37598d;text-align:center}@media (max-width:980px){.feature{width:100%;max-width:100%}}.terminal-wrapper{display:block;box-sizing:border-box}.terminal-wrapper .title{text-align:center}.terminal-wrapper .red{background:#ec6a5f;border-color:#d04e42}.terminal-wrapper .green{background:#64cc57;border-color:#4ea73b}.terminal-wrapper .yellow{background:#f5c04f;border-color:#d6a13d}.terminal-wrapper .clear{clear:both}.terminal{border-radius:5px;position:relative}.terminal .bar{background:#e8e6e8;color:#000;padding:5px;border-radius:5px 5px 0 0}.terminal .buttons{position:absolute;top:7px;left:5px}.terminal .circle{width:12px;height:12px;display:inline-block;border-radius:15px;margin-left:2px;border-width:1px;border-style:solid}.terminal .body{background:#282c34;border-radius:0 0 5px 5px;overflow:hidden}.terminal div[class*=language-]{border-radius:0}.terminal div[class*=language-] pre{padding:2rem;display:block;box-sizing:border-box;overflow:auto;margin:0;min-height:350px}.badge[data-v-0d148f50]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-0d148f50],.badge.tip[data-v-0d148f50],.badge[data-v-0d148f50]{background-color:#42b983}.badge.error[data-v-0d148f50]{background-color:#da5961}.badge.warn[data-v-0d148f50],.badge.warning[data-v-0d148f50],.badge.yellow[data-v-0d148f50]{background-color:#e7c000}.badge+.badge[data-v-0d148f50]{margin-left:5px}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input:-ms-input-placeholder{color:#aaa}.searchbox__input::-ms-input-placeholder{color:#aaa}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:sbx-reset-in;animation-name:sbx-reset-in;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block} \ No newline at end of file +*,:after,:before{box-sizing:border-box}html{-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-overflow-style:scrollbar}body{margin:0;color:#343a40;background-color:#fff}body.inkline{transition-property:background-color,color;transition-duration:.21s;transition-timing-function:ease}body.inkline.-dark{color:#f8f9fa;background-color:#202229}body.inkline.-light{color:#2c3e50;background-color:#fff}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}figure{margin:0 0 1rem}[tabindex="-1"]:focus{outline:none!important}hr{box-sizing:content-box;height:0;overflow:visible}a{color:#37598d;text-decoration:none;-webkit-text-decoration-skip:objects;background-color:transparent}a:active,a:focus,a:hover{color:#2c4771;text-decoration:underline;outline-width:0}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:none}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}abbr[data-original-title],abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;cursor:help;border-bottom:0}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1rem}dfn{font-style:italic}small{font-size:80%}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none;vertical-align:middle}svg:not(:root){overflow:hidden}progress{display:inline-block;vertical-align:baseline}details,menu{display:block}summary{display:list-item}canvas,output{display:inline-block}template{display:none}[hidden]{display:none!important}pre{overflow:auto}table{border-collapse:collapse}caption{text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}fieldset{min-width:0;padding:0;margin:0;border:none}legend{display:block;width:100%;max-width:100%;padding:0;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}label,legend{margin-bottom:.5rem}label{display:inline-block}textarea{overflow:auto;resize:vertical}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;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}}body.-modal{overflow:hidden}@font-face{font-family:inkline;src:url(/node_modules/@inkline/inkline/src/assets/icons/inkline.eot?kszcvl),url(/node_modules/@inkline/inkline/src/assets/icons/inkline.eot?kszcvl#iefix) format("embedded-opentype"),url(/node_modules/@inkline/inkline/src/assets/icons/inkline.ttf?kszcvl) format("truetype"),url(/node_modules/@inkline/inkline/src/assets/icons/inkline.woff?kszcvl) format("woff");font-weight:400;font-style:normal}code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;padding:.15rem .4rem;font-size:90%;color:#bd4147;background-color:#f8f9fa;border-radius:.25rem;transition-property:background-color,color,text-shadow;transition-duration:.21s;transition-timing-function:ease}a>code{padding:0;color:inherit;background-color:inherit}.inkline.-dark code{background-color:#3f474e;color:#ff6d6b}kbd{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;padding:.15rem .4rem;font-size:90%;color:#fff;background-color:#202229;border-radius:.2rem;box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:#202229;transition-property:background-color,color,text-shadow;transition-duration:.21s;transition-timing-function:ease}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0;transition-property:none}pre.-scrollable{max-height:340px;overflow-y:scroll}.inkline.-dark pre{color:#fff}.inkline.-dark pre code{color:inherit;background-color:transparent}samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.figure{display:inline-block}.figure>.img{margin-bottom:.5rem;line-height:1}.figure>.caption{font-size:90%;color:#868e96}.image.-polaroid,.image.-responsive,.image.-thumbnail,.img.-polaroid,.img.-responsive,.img.-thumbnail{max-width:100%;height:auto}.image.-fluid,.img.-fluid{width:100%;height:auto}.image[src$=".svg"],.img[src$=".svg"]{width:100%\9}.image.-polaroid,.image.-thumbnail,.img.-polaroid,.img.-thumbnail{padding:.5rem;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;transition:all .2s ease-in-out;box-shadow:0 1px 2px rgba(0,0,0,.075)}.image.-polaroid,.img.-polaroid{padding-bottom:3rem}.fade-in-transition-enter-active,.fade-in-transition-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.fade-in-transition-enter,.fade-in-transition-leave-active{opacity:0}.fade-in-linear-transition-enter-active,.fade-in-linear-transition-leave-active{transition:opacity .3s cubic-bezier(.23,1,.32,1)}.fade-in-linear-transition-enter,.fade-in-linear-transition-leave,.fade-in-linear-transition-leave-active{opacity:0}.slide-in-right-transition-enter-active,.slide-in-right-transition-leave-active{transition:transform .3s ease;transform-origin:left}.slide-in-right-transition-enter,.slide-in-right-transition-leave-to{transform:translateX(-100%)}.slide-in-right-transition-enter-to,.slide-in-right-transition-leave{transform:translateX(0)}.zoom-in-bottom-transition-enter-active,.zoom-in-bottom-transition-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center bottom}.zoom-in-bottom-transition-enter,.zoom-in-bottom-transition-leave-active{opacity:0;transform:scaleY(0)}.zoom-in-center-transition-enter-active,.zoom-in-center-transition-leave-active{opacity:1;transition:all .3s cubic-bezier(.55,0,.1,1);transform-origin:center center}.zoom-in-center-transition-enter,.zoom-in-center-transition-leave-active{opacity:0;transform:scale(0)}.zoom-in-top-transition-enter-active,.zoom-in-top-transition-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.zoom-in-top-transition-enter,.zoom-in-top-transition-leave-active{opacity:0;transform:scaleY(0)}.zoom-in-left-transition-enter-active,.zoom-in-left-transition-leave-active{opacity:1;transform:scale(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top left}.zoom-in-left-transition-enter,.zoom-in-left-transition-leave-active{opacity:0;transform:scale(.45)}.zoom-in-right-transition-enter-active,.zoom-in-right-transition-leave-active{opacity:1;transform:scale(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top right}.zoom-in-right-transition-enter,.zoom-in-right-transition-leave-active{opacity:0;transform:scale(.45)}.blockquote{margin:0 0 1rem;font-size:1.32rem}.blockquote.-left{text-align:left}.blockquote.-left.-bordered{padding-left:1rem;border-left:3px solid #dee2e6}.blockquote.-center{text-align:center}.blockquote.-right{text-align:right}.blockquote.-right.-bordered{padding-right:1rem;border-right:3px solid #dee2e6}.blockquote>p{margin-bottom:0}.blockquote>.footer,.blockquote>footer{display:block;font-size:80%;color:#868e96}.blockquote>.footer:before,.blockquote>footer:before{content:"\2014 \00A0"}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{font-size:1.1rem;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;line-height:1.5;letter-spacing:0;text-align:left;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}.d1,.h1,h1{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h1,h1{font-size:2.75rem}.d1,.h1,h1{font-weight:600;line-height:1.1}.d1{font-size:6.05rem}.d2,.h2,h2{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h2,h2{font-size:2.2rem}.d2,.h2,h2{font-weight:600;line-height:1.1}.d2{font-size:5.5rem}.d3,.h3,h3{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h3,h3{font-size:1.925rem}.d3,.h3,h3{font-weight:600;line-height:1.1}.d3{font-size:4.95rem}.d4,.h4,h4{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h4,h4{font-size:1.65rem}.d4,.h4,h4{font-weight:600;line-height:1.1}.d4{font-size:4.4rem}.d5,.h5,h5{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h5,h5{font-size:1.375rem}.d5,.h5,h5{font-weight:600;line-height:1.1}.d5{font-size:3.85rem}.d6,.h6,h6{margin-top:2.5rem;margin-bottom:1rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;color:inherit}.h6,h6{font-size:1.1rem}.d6,.h6,h6{font-weight:600;line-height:1.1}.d6{font-size:3.3rem}.list>.item,.list>li,dl>.item,dl>li,ol>.item,ol>li,ul>.item,ul>li{margin-bottom:.5rem}.list.-inline,.list.-unstyled,dl.-inline,dl.-unstyled,ol.-inline,ol.-unstyled,ul.-inline,ul.-unstyled{padding-left:0;list-style:none}.list.-inline>.item,.list.-inline>li,dl.-inline>.item,dl.-inline>li,ol.-inline>.item,ol.-inline>li,ul.-inline>.item,ul.-inline>li{display:inline-block;margin-bottom:0}.list.-inline>.item:not(:last-child),.list.-inline>li:not(:last-child),dl.-inline>.item:not(:last-child),dl.-inline>li:not(:last-child),ol.-inline>.item:not(:last-child),ol.-inline>li:not(:last-child),ul.-inline>.item:not(:last-child),ul.-inline>li:not(:last-child){margin-right:1rem}hr{margin:1rem 0;border:none;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:.88rem}.mark,mark{padding:.2rem .4rem;background-color:#fcf8e3;color:#343a40}.lead{font-size:1.32rem;font-weight:300}.initialism{font-size:90%;text-transform:uppercase}._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}._border{border-width:1px!important;border-style:solid!important;border-color:#e9ecef}._border-0{border:none!important}._border-top{border-top-width:1px!important;border-top-style:solid!important;border-top-color:#e9ecef}._border-right{border-right-width:1px!important;border-right-style:solid!important;border-right-color:#e9ecef}._border-bottom{border-bottom-width:1px!important;border-bottom-style:solid!important;border-bottom-color:#e9ecef}._border-left{border-left-width:1px!important;border-left-style:solid!important;border-left-color:#e9ecef}._border-top-0{border-top:none!important}._border-right-0{border-right:none!important}._border-bottom-0{border-bottom:none!important}._border-left-0{border-left:none!important}._border-color-primary{border-color:#37598d!important}._border-top-color-primary{border-top-color:#37598d!important}._border-right-color-primary{border-right-color:#37598d!important}._border-bottom-color-primary{border-bottom-color:#37598d!important}._border-left-color-primary{border-left-color:#37598d!important}._border-color-secondary{border-color:#5d65b9!important}._border-top-color-secondary{border-top-color:#5d65b9!important}._border-right-color-secondary{border-right-color:#5d65b9!important}._border-bottom-color-secondary{border-bottom-color:#5d65b9!important}._border-left-color-secondary{border-left-color:#5d65b9!important}._border-color-light{border-color:#e9ecef!important}._border-top-color-light{border-top-color:#e9ecef!important}._border-right-color-light{border-right-color:#e9ecef!important}._border-bottom-color-light{border-bottom-color:#e9ecef!important}._border-left-color-light{border-left-color:#e9ecef!important}._border-color-dark{border-color:#343a40!important}._border-top-color-dark{border-top-color:#343a40!important}._border-right-color-dark{border-right-color:#343a40!important}._border-bottom-color-dark{border-bottom-color:#343a40!important}._border-left-color-dark{border-left-color:#343a40!important}._border-color-transparent{border-color:transparent!important}._border-top-color-transparent{border-top-color:transparent!important}._border-right-color-transparent{border-right-color:transparent!important}._border-bottom-color-transparent{border-bottom-color:transparent!important}._border-left-color-transparent{border-left-color:transparent!important}._border-color-white{border-color:#fff!important}._border-top-color-white{border-top-color:#fff!important}._border-right-color-white{border-right-color:#fff!important}._border-bottom-color-white{border-bottom-color:#fff!important}._border-left-color-white{border-left-color:#fff!important}._border-color-gray-10{border-color:#f8f9fa!important}._border-top-color-gray-10{border-top-color:#f8f9fa!important}._border-right-color-gray-10{border-right-color:#f8f9fa!important}._border-bottom-color-gray-10{border-bottom-color:#f8f9fa!important}._border-left-color-gray-10{border-left-color:#f8f9fa!important}._border-color-gray-20{border-color:#e9ecef!important}._border-top-color-gray-20{border-top-color:#e9ecef!important}._border-right-color-gray-20{border-right-color:#e9ecef!important}._border-bottom-color-gray-20{border-bottom-color:#e9ecef!important}._border-left-color-gray-20{border-left-color:#e9ecef!important}._border-color-gray-30{border-color:#dee2e6!important}._border-top-color-gray-30{border-top-color:#dee2e6!important}._border-right-color-gray-30{border-right-color:#dee2e6!important}._border-bottom-color-gray-30{border-bottom-color:#dee2e6!important}._border-left-color-gray-30{border-left-color:#dee2e6!important}._border-color-gray-40{border-color:#ced4da!important}._border-top-color-gray-40{border-top-color:#ced4da!important}._border-right-color-gray-40{border-right-color:#ced4da!important}._border-bottom-color-gray-40{border-bottom-color:#ced4da!important}._border-left-color-gray-40{border-left-color:#ced4da!important}._border-color-gray-50{border-color:#adb5bd!important}._border-top-color-gray-50{border-top-color:#adb5bd!important}._border-right-color-gray-50{border-right-color:#adb5bd!important}._border-bottom-color-gray-50{border-bottom-color:#adb5bd!important}._border-left-color-gray-50{border-left-color:#adb5bd!important}._border-color-gray-60{border-color:#868e96!important}._border-top-color-gray-60{border-top-color:#868e96!important}._border-right-color-gray-60{border-right-color:#868e96!important}._border-bottom-color-gray-60{border-bottom-color:#868e96!important}._border-left-color-gray-60{border-left-color:#868e96!important}._border-color-gray-70{border-color:#495057!important}._border-top-color-gray-70{border-top-color:#495057!important}._border-right-color-gray-70{border-right-color:#495057!important}._border-bottom-color-gray-70{border-bottom-color:#495057!important}._border-left-color-gray-70{border-left-color:#495057!important}._border-color-gray-80{border-color:#343a40!important}._border-top-color-gray-80{border-top-color:#343a40!important}._border-right-color-gray-80{border-right-color:#343a40!important}._border-bottom-color-gray-80{border-bottom-color:#343a40!important}._border-left-color-gray-80{border-left-color:#343a40!important}._border-color-gray-90{border-color:#202229!important}._border-top-color-gray-90{border-top-color:#202229!important}._border-right-color-gray-90{border-right-color:#202229!important}._border-bottom-color-gray-90{border-bottom-color:#202229!important}._border-left-color-gray-90{border-left-color:#202229!important}._border-color-black{border-color:#000!important}._border-top-color-black{border-top-color:#000!important}._border-right-color-black{border-right-color:#000!important}._border-bottom-color-black{border-bottom-color:#000!important}._border-left-color-black{border-left-color:#000!important}._border-color-success{border-color:#5fb072!important}._border-top-color-success{border-top-color:#5fb072!important}._border-right-color-success{border-right-color:#5fb072!important}._border-bottom-color-success{border-bottom-color:#5fb072!important}._border-left-color-success{border-left-color:#5fb072!important}._border-color-danger{border-color:#f25f5c!important}._border-top-color-danger{border-top-color:#f25f5c!important}._border-right-color-danger{border-right-color:#f25f5c!important}._border-bottom-color-danger{border-bottom-color:#f25f5c!important}._border-left-color-danger{border-left-color:#f25f5c!important}._border-color-warning{border-color:#f1ac53!important}._border-top-color-warning{border-top-color:#f1ac53!important}._border-right-color-warning{border-right-color:#f1ac53!important}._border-bottom-color-warning{border-bottom-color:#f1ac53!important}._border-left-color-warning{border-left-color:#f1ac53!important}._border-color-info{border-color:#62bec1!important}._border-top-color-info{border-top-color:#62bec1!important}._border-right-color-info{border-right-color:#62bec1!important}._border-bottom-color-info{border-bottom-color:#62bec1!important}._border-left-color-info{border-left-color:#62bec1!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,._rounded-top-left{border-top-left-radius:.25rem!important}._rounded-top-right{border-top-right-radius:.25rem!important}._rounded-bottom-left{border-bottom-left-radius:.25rem!important}._rounded-bottom-right{border-bottom-right-radius:.25rem!important}._rounded-circle{border-radius:50%!important}._rounded-0{border-radius:0!important}._background-red{color:#fff;background-color:#f25f5c!important}._background-orange{color:#fff;background-color:#f1ac53!important}._background-yellow{color:#343a40;background-color:#ffe066!important}._background-green{color:#fff;background-color:#5fb072!important}._background-teal{color:#fff;background-color:#62bec1!important}._background-blue{color:#fff;background-color:#178bb2!important}._background-purple{color:#fff;background-color:#5d65b9!important}._background-pink{color:#fff;background-color:#ff6f80!important}._background-primary{color:#fff;background-color:#37598d!important}._background-secondary{color:#fff;background-color:#5d65b9!important}._background-light{color:#343a40;background-color:#e9ecef!important}._background-dark{color:#fff;background-color:#343a40!important}._background-transparent{color:#fff}._background-white{color:#343a40;background-color:#fff!important}._background-gray-10{color:#343a40;background-color:#f8f9fa!important}._background-gray-20{color:#343a40;background-color:#e9ecef!important}._background-gray-30{color:#343a40;background-color:#dee2e6!important}._background-gray-40{color:#343a40;background-color:#ced4da!important}._background-gray-50{color:#fff;background-color:#adb5bd!important}._background-gray-60{color:#fff;background-color:#868e96!important}._background-gray-70{color:#fff;background-color:#495057!important}._background-gray-80{color:#fff;background-color:#343a40!important}._background-gray-90{color:#fff;background-color:#202229!important}._background-black{color:#fff;background-color:#000!important}._background-success{color:#fff;background-color:#5fb072!important}._background-danger{color:#fff;background-color:#f25f5c!important}._background-warning{color:#fff;background-color:#f1ac53!important}._background-info{color:#fff;background-color:#62bec1!important}._background-facebook{color:#fff;background-color:#3b5998!important}._background-twitter{color:#fff;background-color:#1da1f2!important}._background-google{color:#fff;background-color:#dd4b39!important}._background-instagram{color:#fff;background-color:#fd1d1d!important}._background-dribbble{color:#fff;background-color:#ea4c89!important}._background-behance{color:#fff;background-color:#1769ff!important}._background-flickr{color:#fff;background-color:#ff0084!important}._background-linkedin{color:#fff;background-color:#0077b5!important}._background-youtube{color:#fff;background-color:#b31217!important}._background-pinterest{color:#fff;background-color:#bd081c!important}._background-github{color:#fff;background-color:#333!important}._background-tumblr{color:#fff;background-color:#35465c!important}._background-twitch{color:#fff;background-color:#6441a5!important}._background-envato{color:#fff;background-color:#82b541!important}._background-vine{color:#fff;background-color:#00bf8f!important}._background-transparent{background-color:transparent!important}._text-red{color:#f25f5c!important}._text-orange{color:#f1ac53!important}._text-yellow{color:#ffe066!important}._text-green{color:#5fb072!important}._text-teal{color:#62bec1!important}._text-blue{color:#178bb2!important}._text-purple{color:#5d65b9!important}._text-pink{color:#ff6f80!important}._text-primary{color:#37598d!important}._text-secondary{color:#5d65b9!important}._text-light{color:#e9ecef!important}._text-dark{color:#343a40!important}._text-transparent{color:transparent!important}._text-white{color:#fff!important}._text-gray-10{color:#f8f9fa!important}._text-gray-20{color:#e9ecef!important}._text-gray-30{color:#dee2e6!important}._text-gray-40{color:#ced4da!important}._text-gray-50{color:#adb5bd!important}._text-gray-60{color:#868e96!important}._text-gray-70{color:#495057!important}._text-gray-80{color:#343a40!important}._text-gray-90{color:#202229!important}._text-black{color:#000!important}._text-success{color:#5fb072!important}._text-danger{color:#f25f5c!important}._text-warning{color:#f1ac53!important}._text-info{color:#62bec1!important}._text-facebook{color:#3b5998!important}._text-twitter{color:#1da1f2!important}._text-google{color:#dd4b39!important}._text-instagram{color:#fd1d1d!important}._text-dribbble{color:#ea4c89!important}._text-behance{color:#1769ff!important}._text-flickr{color:#ff0084!important}._text-linkedin{color:#0077b5!important}._text-youtube{color:#b31217!important}._text-pinterest{color:#bd081c!important}._text-github{color:#333!important}._text-tumblr{color:#35465c!important}._text-twitch{color:#6441a5!important}._text-envato{color:#82b541!important}._text-vine{color:#00bf8f!important}@media screen and (max-width:575px){._display-xs-none{display:none!important}._display-xs-inline{display:inline!important}._display-xs-inline-block{display:inline-block!important}._display-xs-block{display:block!important}._display-xs-table{display:table!important}._display-xs-table-cell{display:table-cell!important}._display-xs-flex{display:flex!important}._display-xs-inline-flex{display:inline-flex!important}}@media screen and (min-width:576px) and (max-width:767px){._display-sm-none{display:none!important}._display-sm-inline{display:inline!important}._display-sm-inline-block{display:inline-block!important}._display-sm-block{display:block!important}._display-sm-table{display:table!important}._display-sm-table-cell{display:table-cell!important}._display-sm-flex{display:flex!important}._display-sm-inline-flex{display:inline-flex!important}}@media screen and (min-width:768px) and (max-width:991px){._display-md-none{display:none!important}._display-md-inline{display:inline!important}._display-md-inline-block{display:inline-block!important}._display-md-block{display:block!important}._display-md-table{display:table!important}._display-md-table-cell{display:table-cell!important}._display-md-flex{display:flex!important}._display-md-inline-flex{display:inline-flex!important}}@media screen and (min-width:992px) and (max-width:1199px){._display-lg-none{display:none!important}._display-lg-inline{display:inline!important}._display-lg-inline-block{display:inline-block!important}._display-lg-block{display:block!important}._display-lg-table{display:table!important}._display-lg-table-cell{display:table-cell!important}._display-lg-flex{display:flex!important}._display-lg-inline-flex{display:inline-flex!important}}@media screen and (min-width:1200px){._display-xl-none{display:none!important}._display-xl-inline{display:inline!important}._display-xl-inline-block{display:inline-block!important}._display-xl-block{display:block!important}._display-xl-table{display:table!important}._display-xl-table-cell{display:table-cell!important}._display-xl-flex{display:flex!important}._display-xl-inline-flex{display:inline-flex!important}}._display-none{display:none!important}._display-inline{display:inline!important}._display-inline-block{display:inline-block!important}._display-block{display:block!important}._display-table{display:table!important}._display-table-cell{display:table-cell!important}._display-flex{display:flex!important}._display-inline-flex{display:inline-flex!important}._display-print-block{display:none!important}@media print{._display-print-block{display:block!important}}._display-print-inline{display:none!important}@media print{._display-print-inline{display:inline!important}}._display-print-inline-block{display:none!important}@media print{._display-print-inline-block{display:inline-block!important}}@media print{._display-print-none{display:none!important}}._embed{position:relative;display:block;width:100%;padding:0;overflow:hidden}._embed:before{display:block;content:""}._embed>._embed-item,._embed embed,._embed iframe,._embed object,._embed video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:none}._embed-21by9:before{padding-top:42.85714%}._embed-16by9:before{padding-top:56.25%}._embed-4by3:before{padding-top:75%}._embed-1by1:before{padding-top:100%}._flex-direction-xs-row{flex-direction:row!important}._flex-direction-xs-column{flex-direction:column!important}._flex-direction-xs-row-reverse{flex-direction:row-reverse!important}._flex-direction-xs-column-reverse{flex-direction:column-reverse!important}._flex-xs-wrap{flex-wrap:wrap!important}._flex-xs-nowrap{flex-wrap:nowrap!important}._flex-xs-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-xs-fill{flex:1 1 auto!important}._flex-xs-grow-1{flex-grow:1!important}._flex-xs-grow-0{flex-grow:0!important}._flex-xs-shrink-1{flex-shrink:1!important}._flex-xs-shrink-0{flex-shrink:0!important}._justify-content-xs-start{justify-content:flex-start!important}._justify-content-xs-end{justify-content:flex-end!important}._justify-content-xs-center{justify-content:center!important}._justify-content-xs-space-between{justify-content:space-between!important}._justify-content-xs-space-around{justify-content:space-around!important}._align-items-xs-start{align-items:flex-start!important}._align-items-xs-end{align-items:flex-end!important}._align-items-xs-center{align-items:center!important}._align-items-xs-baseline{align-items:baseline!important}._align-items-xs-stretch{align-items:stretch!important}._align-content-xs-start{align-content:flex-start!important}._align-content-xs-end{align-content:flex-end!important}._align-content-xs-center{align-content:center!important}._align-content-xs-space-between{align-content:space-between!important}._align-content-xs-space-around{align-content:space-around!important}._align-content-xs-stretch{align-content:stretch!important}._align-self-xs-auto{align-self:auto!important}._align-self-xs-start{align-self:flex-start!important}._align-self-xs-end{align-self:flex-end!important}._align-self-xs-center{align-self:center!important}._align-self-xs-baseline{align-self:baseline!important}._align-self-xs-stretch{align-self:stretch!important}._order-xs-1{order:1}._order-xs-2{order:2}._order-xs-3{order:3}._order-xs-4{order:4}._order-xs-5{order:5}._order-xs-6{order:6}._order-xs-7{order:7}._order-xs-8{order:8}._order-xs-9{order:9}._order-xs-10{order:10}._order-xs-11{order:11}._order-xs-12{order:12}._order-xs-first{order:1}._order-xs-last{order:-1}._flex-direction-sm-row{flex-direction:row!important}._flex-direction-sm-column{flex-direction:column!important}._flex-direction-sm-row-reverse{flex-direction:row-reverse!important}._flex-direction-sm-column-reverse{flex-direction:column-reverse!important}._flex-sm-wrap{flex-wrap:wrap!important}._flex-sm-nowrap{flex-wrap:nowrap!important}._flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-sm-fill{flex:1 1 auto!important}._flex-sm-grow-1{flex-grow:1!important}._flex-sm-grow-0{flex-grow:0!important}._flex-sm-shrink-1{flex-shrink:1!important}._flex-sm-shrink-0{flex-shrink:0!important}._justify-content-sm-start{justify-content:flex-start!important}._justify-content-sm-end{justify-content:flex-end!important}._justify-content-sm-center{justify-content:center!important}._justify-content-sm-space-between{justify-content:space-between!important}._justify-content-sm-space-around{justify-content:space-around!important}._align-items-sm-start{align-items:flex-start!important}._align-items-sm-end{align-items:flex-end!important}._align-items-sm-center{align-items:center!important}._align-items-sm-baseline{align-items:baseline!important}._align-items-sm-stretch{align-items:stretch!important}._align-content-sm-start{align-content:flex-start!important}._align-content-sm-end{align-content:flex-end!important}._align-content-sm-center{align-content:center!important}._align-content-sm-space-between{align-content:space-between!important}._align-content-sm-space-around{align-content:space-around!important}._align-content-sm-stretch{align-content:stretch!important}._align-self-sm-auto{align-self:auto!important}._align-self-sm-start{align-self:flex-start!important}._align-self-sm-end{align-self:flex-end!important}._align-self-sm-center{align-self:center!important}._align-self-sm-baseline{align-self:baseline!important}._align-self-sm-stretch{align-self:stretch!important}._order-sm-1{order:1}._order-sm-2{order:2}._order-sm-3{order:3}._order-sm-4{order:4}._order-sm-5{order:5}._order-sm-6{order:6}._order-sm-7{order:7}._order-sm-8{order:8}._order-sm-9{order:9}._order-sm-10{order:10}._order-sm-11{order:11}._order-sm-12{order:12}._order-sm-first{order:1}._order-sm-last{order:-1}._flex-direction-md-row{flex-direction:row!important}._flex-direction-md-column{flex-direction:column!important}._flex-direction-md-row-reverse{flex-direction:row-reverse!important}._flex-direction-md-column-reverse{flex-direction:column-reverse!important}._flex-md-wrap{flex-wrap:wrap!important}._flex-md-nowrap{flex-wrap:nowrap!important}._flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-md-fill{flex:1 1 auto!important}._flex-md-grow-1{flex-grow:1!important}._flex-md-grow-0{flex-grow:0!important}._flex-md-shrink-1{flex-shrink:1!important}._flex-md-shrink-0{flex-shrink:0!important}._justify-content-md-start{justify-content:flex-start!important}._justify-content-md-end{justify-content:flex-end!important}._justify-content-md-center{justify-content:center!important}._justify-content-md-space-between{justify-content:space-between!important}._justify-content-md-space-around{justify-content:space-around!important}._align-items-md-start{align-items:flex-start!important}._align-items-md-end{align-items:flex-end!important}._align-items-md-center{align-items:center!important}._align-items-md-baseline{align-items:baseline!important}._align-items-md-stretch{align-items:stretch!important}._align-content-md-start{align-content:flex-start!important}._align-content-md-end{align-content:flex-end!important}._align-content-md-center{align-content:center!important}._align-content-md-space-between{align-content:space-between!important}._align-content-md-space-around{align-content:space-around!important}._align-content-md-stretch{align-content:stretch!important}._align-self-md-auto{align-self:auto!important}._align-self-md-start{align-self:flex-start!important}._align-self-md-end{align-self:flex-end!important}._align-self-md-center{align-self:center!important}._align-self-md-baseline{align-self:baseline!important}._align-self-md-stretch{align-self:stretch!important}._order-md-1{order:1}._order-md-2{order:2}._order-md-3{order:3}._order-md-4{order:4}._order-md-5{order:5}._order-md-6{order:6}._order-md-7{order:7}._order-md-8{order:8}._order-md-9{order:9}._order-md-10{order:10}._order-md-11{order:11}._order-md-12{order:12}._order-md-first{order:1}._order-md-last{order:-1}._flex-direction-lg-row{flex-direction:row!important}._flex-direction-lg-column{flex-direction:column!important}._flex-direction-lg-row-reverse{flex-direction:row-reverse!important}._flex-direction-lg-column-reverse{flex-direction:column-reverse!important}._flex-lg-wrap{flex-wrap:wrap!important}._flex-lg-nowrap{flex-wrap:nowrap!important}._flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-lg-fill{flex:1 1 auto!important}._flex-lg-grow-1{flex-grow:1!important}._flex-lg-grow-0{flex-grow:0!important}._flex-lg-shrink-1{flex-shrink:1!important}._flex-lg-shrink-0{flex-shrink:0!important}._justify-content-lg-start{justify-content:flex-start!important}._justify-content-lg-end{justify-content:flex-end!important}._justify-content-lg-center{justify-content:center!important}._justify-content-lg-space-between{justify-content:space-between!important}._justify-content-lg-space-around{justify-content:space-around!important}._align-items-lg-start{align-items:flex-start!important}._align-items-lg-end{align-items:flex-end!important}._align-items-lg-center{align-items:center!important}._align-items-lg-baseline{align-items:baseline!important}._align-items-lg-stretch{align-items:stretch!important}._align-content-lg-start{align-content:flex-start!important}._align-content-lg-end{align-content:flex-end!important}._align-content-lg-center{align-content:center!important}._align-content-lg-space-between{align-content:space-between!important}._align-content-lg-space-around{align-content:space-around!important}._align-content-lg-stretch{align-content:stretch!important}._align-self-lg-auto{align-self:auto!important}._align-self-lg-start{align-self:flex-start!important}._align-self-lg-end{align-self:flex-end!important}._align-self-lg-center{align-self:center!important}._align-self-lg-baseline{align-self:baseline!important}._align-self-lg-stretch{align-self:stretch!important}._order-lg-1{order:1}._order-lg-2{order:2}._order-lg-3{order:3}._order-lg-4{order:4}._order-lg-5{order:5}._order-lg-6{order:6}._order-lg-7{order:7}._order-lg-8{order:8}._order-lg-9{order:9}._order-lg-10{order:10}._order-lg-11{order:11}._order-lg-12{order:12}._order-lg-first{order:1}._order-lg-last{order:-1}._flex-direction-xl-row{flex-direction:row!important}._flex-direction-xl-column{flex-direction:column!important}._flex-direction-xl-row-reverse{flex-direction:row-reverse!important}._flex-direction-xl-column-reverse{flex-direction:column-reverse!important}._flex-xl-wrap{flex-wrap:wrap!important}._flex-xl-nowrap{flex-wrap:nowrap!important}._flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-xl-fill{flex:1 1 auto!important}._flex-xl-grow-1{flex-grow:1!important}._flex-xl-grow-0{flex-grow:0!important}._flex-xl-shrink-1{flex-shrink:1!important}._flex-xl-shrink-0{flex-shrink:0!important}._justify-content-xl-start{justify-content:flex-start!important}._justify-content-xl-end{justify-content:flex-end!important}._justify-content-xl-center{justify-content:center!important}._justify-content-xl-space-between{justify-content:space-between!important}._justify-content-xl-space-around{justify-content:space-around!important}._align-items-xl-start{align-items:flex-start!important}._align-items-xl-end{align-items:flex-end!important}._align-items-xl-center{align-items:center!important}._align-items-xl-baseline{align-items:baseline!important}._align-items-xl-stretch{align-items:stretch!important}._align-content-xl-start{align-content:flex-start!important}._align-content-xl-end{align-content:flex-end!important}._align-content-xl-center{align-content:center!important}._align-content-xl-space-between{align-content:space-between!important}._align-content-xl-space-around{align-content:space-around!important}._align-content-xl-stretch{align-content:stretch!important}._align-self-xl-auto{align-self:auto!important}._align-self-xl-start{align-self:flex-start!important}._align-self-xl-end{align-self:flex-end!important}._align-self-xl-center{align-self:center!important}._align-self-xl-baseline{align-self:baseline!important}._align-self-xl-stretch{align-self:stretch!important}._order-xl-1{order:1}._order-xl-2{order:2}._order-xl-3{order:3}._order-xl-4{order:4}._order-xl-5{order:5}._order-xl-6{order:6}._order-xl-7{order:7}._order-xl-8{order:8}._order-xl-9{order:9}._order-xl-10{order:10}._order-xl-11{order:11}._order-xl-12{order:12}._order-xl-first{order:1}._order-xl-last{order:-1}._flex-direction-row{flex-direction:row!important}._flex-direction-column{flex-direction:column!important}._flex-direction-row-reverse{flex-direction:row-reverse!important}._flex-direction-column-reverse{flex-direction:column-reverse!important}._flex-wrap{flex-wrap:wrap!important}._flex-nowrap{flex-wrap:nowrap!important}._flex-wrap-reverse{flex-wrap:wrap-reverse!important}._flex-fill{flex:1 1 auto!important}._flex-grow-1{flex-grow:1!important}._flex-grow-0{flex-grow:0!important}._flex-shrink-1{flex-shrink:1!important}._flex-shrink-0{flex-shrink:0!important}._justify-content-start{justify-content:flex-start!important}._justify-content-end{justify-content:flex-end!important}._justify-content-center{justify-content:center!important}._justify-content-space-between{justify-content:space-between!important}._justify-content-space-around{justify-content:space-around!important}._align-items-start{align-items:flex-start!important}._align-items-end{align-items:flex-end!important}._align-items-center{align-items:center!important}._align-items-baseline{align-items:baseline!important}._align-items-stretch{align-items:stretch!important}._align-content-start{align-content:flex-start!important}._align-content-end{align-content:flex-end!important}._align-content-center{align-content:center!important}._align-content-space-between{align-content:space-between!important}._align-content-space-around{align-content:space-around!important}._align-content-stretch{align-content:stretch!important}._align-self-auto{align-self:auto!important}._align-self-start{align-self:flex-start!important}._align-self-end{align-self:flex-end!important}._align-self-center{align-self:center!important}._align-self-baseline{align-self:baseline!important}._align-self-stretch{align-self:stretch!important}._order-1{order:1}._order-2{order:2}._order-3{order:3}._order-4{order:4}._order-5{order:5}._order-6{order:6}._order-7{order:7}._order-8{order:8}._order-9{order:9}._order-10{order:10}._order-11{order:11}._order-12{order:12}._order-first{order:1}._order-last{order:-1}@media screen and (max-width:575px){._float-xs-left{float:left!important}._float-xs-right{float:right!important}._float-xs-none{float:none!important}}@media screen and (min-width:576px) and (max-width:767px){._float-sm-left{float:left!important}._float-sm-right{float:right!important}._float-sm-none{float:none!important}}@media screen and (min-width:768px) and (max-width:991px){._float-md-left{float:left!important}._float-md-right{float:right!important}._float-md-none{float:none!important}}@media screen and (min-width:992px) and (max-width:1199px){._float-lg-left{float:left!important}._float-lg-right{float:right!important}._float-lg-none{float:none!important}}@media screen and (min-width:1200px){._float-xl-left{float:left!important}._float-xl-right{float:right!important}._float-xl-none{float:none!important}}._float-left{float:left!important}._float-right{float:right!important}._float-none{float:none!important}._cursor-pointer{cursor:pointer!important}._cursor-default{cursor:default!important}._overflow-auto{overflow:auto!important}._overflow-hidden{overflow:hidden!important}._overlay,._overlay-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}._overlay-link:after{pointer-events:auto;content:""}._position-static{position:"static"!important}._position-relative{position:"relative"!important}._position-absolute{position:"absolute"!important}._position-fixed{position:"fixed"!important}._position-sticky{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}}._width-25{width:25%!important}._height-25{height:25%!important}._width-50{width:50%!important}._height-50{height:50%!important}._width-75{width:75%!important}._height-75{height:75%!important}._width-100{width:100%!important}._height-100{height:100%!important}._max-height-100{max-height:100%!important}._max-width-100{max-width:100%!important}._vw-100{width:100vw!important}._vh-100{height:100vh!important}._max-vw-100{max-width:100vw!important}._max-vh-100{max-height:100vh!important}@media screen and (max-width:575px){._margin-xs-1-2{margin:.5rem!important}._margin-top-xs-1-2,._margin-y-xs-1-2{margin-top:.5rem!important}._margin-right-xs-1-2,._margin-x-xs-1-2{margin-right:.5rem!important}._margin-bottom-xs-1-2,._margin-y-xs-1-2{margin-bottom:.5rem!important}._margin-left-xs-1-2,._margin-x-xs-1-2{margin-left:.5rem!important}._margin-xs-1-3{margin:.33333rem!important}._margin-top-xs-1-3,._margin-y-xs-1-3{margin-top:.33333rem!important}._margin-right-xs-1-3,._margin-x-xs-1-3{margin-right:.33333rem!important}._margin-bottom-xs-1-3,._margin-y-xs-1-3{margin-bottom:.33333rem!important}._margin-left-xs-1-3,._margin-x-xs-1-3{margin-left:.33333rem!important}._margin-xs-2-3{margin:.66667rem!important}._margin-top-xs-2-3,._margin-y-xs-2-3{margin-top:.66667rem!important}._margin-right-xs-2-3,._margin-x-xs-2-3{margin-right:.66667rem!important}._margin-bottom-xs-2-3,._margin-y-xs-2-3{margin-bottom:.66667rem!important}._margin-left-xs-2-3,._margin-x-xs-2-3{margin-left:.66667rem!important}._margin-xs-1-4{margin:.25rem!important}._margin-top-xs-1-4,._margin-y-xs-1-4{margin-top:.25rem!important}._margin-right-xs-1-4,._margin-x-xs-1-4{margin-right:.25rem!important}._margin-bottom-xs-1-4,._margin-y-xs-1-4{margin-bottom:.25rem!important}._margin-left-xs-1-4,._margin-x-xs-1-4{margin-left:.25rem!important}._margin-xs-3-4{margin:.75rem!important}._margin-top-xs-3-4,._margin-y-xs-3-4{margin-top:.75rem!important}._margin-right-xs-3-4,._margin-x-xs-3-4{margin-right:.75rem!important}._margin-bottom-xs-3-4,._margin-y-xs-3-4{margin-bottom:.75rem!important}._margin-left-xs-3-4,._margin-x-xs-3-4{margin-left:.75rem!important}._margin-xs-0{margin:0!important}._margin-top-xs-0,._margin-y-xs-0{margin-top:0!important}._margin-right-xs-0,._margin-x-xs-0{margin-right:0!important}._margin-bottom-xs-0,._margin-y-xs-0{margin-bottom:0!important}._margin-left-xs-0,._margin-x-xs-0{margin-left:0!important}._margin-xs-1{margin:1rem!important}._margin-top-xs-1,._margin-y-xs-1{margin-top:1rem!important}._margin-right-xs-1,._margin-x-xs-1{margin-right:1rem!important}._margin-bottom-xs-1,._margin-y-xs-1{margin-bottom:1rem!important}._margin-left-xs-1,._margin-x-xs-1{margin-left:1rem!important}._margin-xs-2{margin:2rem!important}._margin-top-xs-2,._margin-y-xs-2{margin-top:2rem!important}._margin-right-xs-2,._margin-x-xs-2{margin-right:2rem!important}._margin-bottom-xs-2,._margin-y-xs-2{margin-bottom:2rem!important}._margin-left-xs-2,._margin-x-xs-2{margin-left:2rem!important}._margin-xs-3{margin:3rem!important}._margin-top-xs-3,._margin-y-xs-3{margin-top:3rem!important}._margin-right-xs-3,._margin-x-xs-3{margin-right:3rem!important}._margin-bottom-xs-3,._margin-y-xs-3{margin-bottom:3rem!important}._margin-left-xs-3,._margin-x-xs-3{margin-left:3rem!important}._margin-xs-4{margin:4rem!important}._margin-top-xs-4,._margin-y-xs-4{margin-top:4rem!important}._margin-right-xs-4,._margin-x-xs-4{margin-right:4rem!important}._margin-bottom-xs-4,._margin-y-xs-4{margin-bottom:4rem!important}._margin-left-xs-4,._margin-x-xs-4{margin-left:4rem!important}._margin-xs-5{margin:5rem!important}._margin-top-xs-5,._margin-y-xs-5{margin-top:5rem!important}._margin-right-xs-5,._margin-x-xs-5{margin-right:5rem!important}._margin-bottom-xs-5,._margin-y-xs-5{margin-bottom:5rem!important}._margin-left-xs-5,._margin-x-xs-5{margin-left:5rem!important}._margin-xs-6{margin:6rem!important}._margin-top-xs-6,._margin-y-xs-6{margin-top:6rem!important}._margin-right-xs-6,._margin-x-xs-6{margin-right:6rem!important}._margin-bottom-xs-6,._margin-y-xs-6{margin-bottom:6rem!important}._margin-left-xs-6,._margin-x-xs-6{margin-left:6rem!important}._margin-xs-7{margin:7rem!important}._margin-top-xs-7,._margin-y-xs-7{margin-top:7rem!important}._margin-right-xs-7,._margin-x-xs-7{margin-right:7rem!important}._margin-bottom-xs-7,._margin-y-xs-7{margin-bottom:7rem!important}._margin-left-xs-7,._margin-x-xs-7{margin-left:7rem!important}._margin-xs-8{margin:8rem!important}._margin-top-xs-8,._margin-y-xs-8{margin-top:8rem!important}._margin-right-xs-8,._margin-x-xs-8{margin-right:8rem!important}._margin-bottom-xs-8,._margin-y-xs-8{margin-bottom:8rem!important}._margin-left-xs-8,._margin-x-xs-8{margin-left:8rem!important}._padding-xs-1-2{padding:.5rem!important}._padding-top-xs-1-2,._padding-y-xs-1-2{padding-top:.5rem!important}._padding-right-xs-1-2,._padding-x-xs-1-2{padding-right:.5rem!important}._padding-bottom-xs-1-2,._padding-y-xs-1-2{padding-bottom:.5rem!important}._padding-left-xs-1-2,._padding-x-xs-1-2{padding-left:.5rem!important}._padding-xs-1-3{padding:.33333rem!important}._padding-top-xs-1-3,._padding-y-xs-1-3{padding-top:.33333rem!important}._padding-right-xs-1-3,._padding-x-xs-1-3{padding-right:.33333rem!important}._padding-bottom-xs-1-3,._padding-y-xs-1-3{padding-bottom:.33333rem!important}._padding-left-xs-1-3,._padding-x-xs-1-3{padding-left:.33333rem!important}._padding-xs-2-3{padding:.66667rem!important}._padding-top-xs-2-3,._padding-y-xs-2-3{padding-top:.66667rem!important}._padding-right-xs-2-3,._padding-x-xs-2-3{padding-right:.66667rem!important}._padding-bottom-xs-2-3,._padding-y-xs-2-3{padding-bottom:.66667rem!important}._padding-left-xs-2-3,._padding-x-xs-2-3{padding-left:.66667rem!important}._padding-xs-1-4{padding:.25rem!important}._padding-top-xs-1-4,._padding-y-xs-1-4{padding-top:.25rem!important}._padding-right-xs-1-4,._padding-x-xs-1-4{padding-right:.25rem!important}._padding-bottom-xs-1-4,._padding-y-xs-1-4{padding-bottom:.25rem!important}._padding-left-xs-1-4,._padding-x-xs-1-4{padding-left:.25rem!important}._padding-xs-3-4{padding:.75rem!important}._padding-top-xs-3-4,._padding-y-xs-3-4{padding-top:.75rem!important}._padding-right-xs-3-4,._padding-x-xs-3-4{padding-right:.75rem!important}._padding-bottom-xs-3-4,._padding-y-xs-3-4{padding-bottom:.75rem!important}._padding-left-xs-3-4,._padding-x-xs-3-4{padding-left:.75rem!important}._padding-xs-0{padding:0!important}._padding-top-xs-0,._padding-y-xs-0{padding-top:0!important}._padding-right-xs-0,._padding-x-xs-0{padding-right:0!important}._padding-bottom-xs-0,._padding-y-xs-0{padding-bottom:0!important}._padding-left-xs-0,._padding-x-xs-0{padding-left:0!important}._padding-xs-1{padding:1rem!important}._padding-top-xs-1,._padding-y-xs-1{padding-top:1rem!important}._padding-right-xs-1,._padding-x-xs-1{padding-right:1rem!important}._padding-bottom-xs-1,._padding-y-xs-1{padding-bottom:1rem!important}._padding-left-xs-1,._padding-x-xs-1{padding-left:1rem!important}._padding-xs-2{padding:2rem!important}._padding-top-xs-2,._padding-y-xs-2{padding-top:2rem!important}._padding-right-xs-2,._padding-x-xs-2{padding-right:2rem!important}._padding-bottom-xs-2,._padding-y-xs-2{padding-bottom:2rem!important}._padding-left-xs-2,._padding-x-xs-2{padding-left:2rem!important}._padding-xs-3{padding:3rem!important}._padding-top-xs-3,._padding-y-xs-3{padding-top:3rem!important}._padding-right-xs-3,._padding-x-xs-3{padding-right:3rem!important}._padding-bottom-xs-3,._padding-y-xs-3{padding-bottom:3rem!important}._padding-left-xs-3,._padding-x-xs-3{padding-left:3rem!important}._padding-xs-4{padding:4rem!important}._padding-top-xs-4,._padding-y-xs-4{padding-top:4rem!important}._padding-right-xs-4,._padding-x-xs-4{padding-right:4rem!important}._padding-bottom-xs-4,._padding-y-xs-4{padding-bottom:4rem!important}._padding-left-xs-4,._padding-x-xs-4{padding-left:4rem!important}._padding-xs-5{padding:5rem!important}._padding-top-xs-5,._padding-y-xs-5{padding-top:5rem!important}._padding-right-xs-5,._padding-x-xs-5{padding-right:5rem!important}._padding-bottom-xs-5,._padding-y-xs-5{padding-bottom:5rem!important}._padding-left-xs-5,._padding-x-xs-5{padding-left:5rem!important}._padding-xs-6{padding:6rem!important}._padding-top-xs-6,._padding-y-xs-6{padding-top:6rem!important}._padding-right-xs-6,._padding-x-xs-6{padding-right:6rem!important}._padding-bottom-xs-6,._padding-y-xs-6{padding-bottom:6rem!important}._padding-left-xs-6,._padding-x-xs-6{padding-left:6rem!important}._padding-xs-7{padding:7rem!important}._padding-top-xs-7,._padding-y-xs-7{padding-top:7rem!important}._padding-right-xs-7,._padding-x-xs-7{padding-right:7rem!important}._padding-bottom-xs-7,._padding-y-xs-7{padding-bottom:7rem!important}._padding-left-xs-7,._padding-x-xs-7{padding-left:7rem!important}._padding-xs-8{padding:8rem!important}._padding-top-xs-8,._padding-y-xs-8{padding-top:8rem!important}._padding-right-xs-8,._padding-x-xs-8{padding-right:8rem!important}._padding-bottom-xs-8,._padding-y-xs-8{padding-bottom:8rem!important}._padding-left-xs-8,._padding-x-xs-8{padding-left:8rem!important}._margin-xs-auto{margin:auto!important}._margin-top-xs-auto,._margin-y-xs-auto{margin-top:auto!important}._margin-right-xs-auto,._margin-x-xs-auto{margin-right:auto!important}._margin-bottom-xs-auto,._margin-y-xs-auto{margin-bottom:auto!important}._margin-left-xs-auto,._margin-x-xs-auto{margin-left:auto!important}}@media screen and (min-width:576px) and (max-width:767px){._margin-sm-1-2{margin:.5rem!important}._margin-top-sm-1-2,._margin-y-sm-1-2{margin-top:.5rem!important}._margin-right-sm-1-2,._margin-x-sm-1-2{margin-right:.5rem!important}._margin-bottom-sm-1-2,._margin-y-sm-1-2{margin-bottom:.5rem!important}._margin-left-sm-1-2,._margin-x-sm-1-2{margin-left:.5rem!important}._margin-sm-1-3{margin:.33333rem!important}._margin-top-sm-1-3,._margin-y-sm-1-3{margin-top:.33333rem!important}._margin-right-sm-1-3,._margin-x-sm-1-3{margin-right:.33333rem!important}._margin-bottom-sm-1-3,._margin-y-sm-1-3{margin-bottom:.33333rem!important}._margin-left-sm-1-3,._margin-x-sm-1-3{margin-left:.33333rem!important}._margin-sm-2-3{margin:.66667rem!important}._margin-top-sm-2-3,._margin-y-sm-2-3{margin-top:.66667rem!important}._margin-right-sm-2-3,._margin-x-sm-2-3{margin-right:.66667rem!important}._margin-bottom-sm-2-3,._margin-y-sm-2-3{margin-bottom:.66667rem!important}._margin-left-sm-2-3,._margin-x-sm-2-3{margin-left:.66667rem!important}._margin-sm-1-4{margin:.25rem!important}._margin-top-sm-1-4,._margin-y-sm-1-4{margin-top:.25rem!important}._margin-right-sm-1-4,._margin-x-sm-1-4{margin-right:.25rem!important}._margin-bottom-sm-1-4,._margin-y-sm-1-4{margin-bottom:.25rem!important}._margin-left-sm-1-4,._margin-x-sm-1-4{margin-left:.25rem!important}._margin-sm-3-4{margin:.75rem!important}._margin-top-sm-3-4,._margin-y-sm-3-4{margin-top:.75rem!important}._margin-right-sm-3-4,._margin-x-sm-3-4{margin-right:.75rem!important}._margin-bottom-sm-3-4,._margin-y-sm-3-4{margin-bottom:.75rem!important}._margin-left-sm-3-4,._margin-x-sm-3-4{margin-left:.75rem!important}._margin-sm-0{margin:0!important}._margin-top-sm-0,._margin-y-sm-0{margin-top:0!important}._margin-right-sm-0,._margin-x-sm-0{margin-right:0!important}._margin-bottom-sm-0,._margin-y-sm-0{margin-bottom:0!important}._margin-left-sm-0,._margin-x-sm-0{margin-left:0!important}._margin-sm-1{margin:1rem!important}._margin-top-sm-1,._margin-y-sm-1{margin-top:1rem!important}._margin-right-sm-1,._margin-x-sm-1{margin-right:1rem!important}._margin-bottom-sm-1,._margin-y-sm-1{margin-bottom:1rem!important}._margin-left-sm-1,._margin-x-sm-1{margin-left:1rem!important}._margin-sm-2{margin:2rem!important}._margin-top-sm-2,._margin-y-sm-2{margin-top:2rem!important}._margin-right-sm-2,._margin-x-sm-2{margin-right:2rem!important}._margin-bottom-sm-2,._margin-y-sm-2{margin-bottom:2rem!important}._margin-left-sm-2,._margin-x-sm-2{margin-left:2rem!important}._margin-sm-3{margin:3rem!important}._margin-top-sm-3,._margin-y-sm-3{margin-top:3rem!important}._margin-right-sm-3,._margin-x-sm-3{margin-right:3rem!important}._margin-bottom-sm-3,._margin-y-sm-3{margin-bottom:3rem!important}._margin-left-sm-3,._margin-x-sm-3{margin-left:3rem!important}._margin-sm-4{margin:4rem!important}._margin-top-sm-4,._margin-y-sm-4{margin-top:4rem!important}._margin-right-sm-4,._margin-x-sm-4{margin-right:4rem!important}._margin-bottom-sm-4,._margin-y-sm-4{margin-bottom:4rem!important}._margin-left-sm-4,._margin-x-sm-4{margin-left:4rem!important}._margin-sm-5{margin:5rem!important}._margin-top-sm-5,._margin-y-sm-5{margin-top:5rem!important}._margin-right-sm-5,._margin-x-sm-5{margin-right:5rem!important}._margin-bottom-sm-5,._margin-y-sm-5{margin-bottom:5rem!important}._margin-left-sm-5,._margin-x-sm-5{margin-left:5rem!important}._margin-sm-6{margin:6rem!important}._margin-top-sm-6,._margin-y-sm-6{margin-top:6rem!important}._margin-right-sm-6,._margin-x-sm-6{margin-right:6rem!important}._margin-bottom-sm-6,._margin-y-sm-6{margin-bottom:6rem!important}._margin-left-sm-6,._margin-x-sm-6{margin-left:6rem!important}._margin-sm-7{margin:7rem!important}._margin-top-sm-7,._margin-y-sm-7{margin-top:7rem!important}._margin-right-sm-7,._margin-x-sm-7{margin-right:7rem!important}._margin-bottom-sm-7,._margin-y-sm-7{margin-bottom:7rem!important}._margin-left-sm-7,._margin-x-sm-7{margin-left:7rem!important}._margin-sm-8{margin:8rem!important}._margin-top-sm-8,._margin-y-sm-8{margin-top:8rem!important}._margin-right-sm-8,._margin-x-sm-8{margin-right:8rem!important}._margin-bottom-sm-8,._margin-y-sm-8{margin-bottom:8rem!important}._margin-left-sm-8,._margin-x-sm-8{margin-left:8rem!important}._padding-sm-1-2{padding:.5rem!important}._padding-top-sm-1-2,._padding-y-sm-1-2{padding-top:.5rem!important}._padding-right-sm-1-2,._padding-x-sm-1-2{padding-right:.5rem!important}._padding-bottom-sm-1-2,._padding-y-sm-1-2{padding-bottom:.5rem!important}._padding-left-sm-1-2,._padding-x-sm-1-2{padding-left:.5rem!important}._padding-sm-1-3{padding:.33333rem!important}._padding-top-sm-1-3,._padding-y-sm-1-3{padding-top:.33333rem!important}._padding-right-sm-1-3,._padding-x-sm-1-3{padding-right:.33333rem!important}._padding-bottom-sm-1-3,._padding-y-sm-1-3{padding-bottom:.33333rem!important}._padding-left-sm-1-3,._padding-x-sm-1-3{padding-left:.33333rem!important}._padding-sm-2-3{padding:.66667rem!important}._padding-top-sm-2-3,._padding-y-sm-2-3{padding-top:.66667rem!important}._padding-right-sm-2-3,._padding-x-sm-2-3{padding-right:.66667rem!important}._padding-bottom-sm-2-3,._padding-y-sm-2-3{padding-bottom:.66667rem!important}._padding-left-sm-2-3,._padding-x-sm-2-3{padding-left:.66667rem!important}._padding-sm-1-4{padding:.25rem!important}._padding-top-sm-1-4,._padding-y-sm-1-4{padding-top:.25rem!important}._padding-right-sm-1-4,._padding-x-sm-1-4{padding-right:.25rem!important}._padding-bottom-sm-1-4,._padding-y-sm-1-4{padding-bottom:.25rem!important}._padding-left-sm-1-4,._padding-x-sm-1-4{padding-left:.25rem!important}._padding-sm-3-4{padding:.75rem!important}._padding-top-sm-3-4,._padding-y-sm-3-4{padding-top:.75rem!important}._padding-right-sm-3-4,._padding-x-sm-3-4{padding-right:.75rem!important}._padding-bottom-sm-3-4,._padding-y-sm-3-4{padding-bottom:.75rem!important}._padding-left-sm-3-4,._padding-x-sm-3-4{padding-left:.75rem!important}._padding-sm-0{padding:0!important}._padding-top-sm-0,._padding-y-sm-0{padding-top:0!important}._padding-right-sm-0,._padding-x-sm-0{padding-right:0!important}._padding-bottom-sm-0,._padding-y-sm-0{padding-bottom:0!important}._padding-left-sm-0,._padding-x-sm-0{padding-left:0!important}._padding-sm-1{padding:1rem!important}._padding-top-sm-1,._padding-y-sm-1{padding-top:1rem!important}._padding-right-sm-1,._padding-x-sm-1{padding-right:1rem!important}._padding-bottom-sm-1,._padding-y-sm-1{padding-bottom:1rem!important}._padding-left-sm-1,._padding-x-sm-1{padding-left:1rem!important}._padding-sm-2{padding:2rem!important}._padding-top-sm-2,._padding-y-sm-2{padding-top:2rem!important}._padding-right-sm-2,._padding-x-sm-2{padding-right:2rem!important}._padding-bottom-sm-2,._padding-y-sm-2{padding-bottom:2rem!important}._padding-left-sm-2,._padding-x-sm-2{padding-left:2rem!important}._padding-sm-3{padding:3rem!important}._padding-top-sm-3,._padding-y-sm-3{padding-top:3rem!important}._padding-right-sm-3,._padding-x-sm-3{padding-right:3rem!important}._padding-bottom-sm-3,._padding-y-sm-3{padding-bottom:3rem!important}._padding-left-sm-3,._padding-x-sm-3{padding-left:3rem!important}._padding-sm-4{padding:4rem!important}._padding-top-sm-4,._padding-y-sm-4{padding-top:4rem!important}._padding-right-sm-4,._padding-x-sm-4{padding-right:4rem!important}._padding-bottom-sm-4,._padding-y-sm-4{padding-bottom:4rem!important}._padding-left-sm-4,._padding-x-sm-4{padding-left:4rem!important}._padding-sm-5{padding:5rem!important}._padding-top-sm-5,._padding-y-sm-5{padding-top:5rem!important}._padding-right-sm-5,._padding-x-sm-5{padding-right:5rem!important}._padding-bottom-sm-5,._padding-y-sm-5{padding-bottom:5rem!important}._padding-left-sm-5,._padding-x-sm-5{padding-left:5rem!important}._padding-sm-6{padding:6rem!important}._padding-top-sm-6,._padding-y-sm-6{padding-top:6rem!important}._padding-right-sm-6,._padding-x-sm-6{padding-right:6rem!important}._padding-bottom-sm-6,._padding-y-sm-6{padding-bottom:6rem!important}._padding-left-sm-6,._padding-x-sm-6{padding-left:6rem!important}._padding-sm-7{padding:7rem!important}._padding-top-sm-7,._padding-y-sm-7{padding-top:7rem!important}._padding-right-sm-7,._padding-x-sm-7{padding-right:7rem!important}._padding-bottom-sm-7,._padding-y-sm-7{padding-bottom:7rem!important}._padding-left-sm-7,._padding-x-sm-7{padding-left:7rem!important}._padding-sm-8{padding:8rem!important}._padding-top-sm-8,._padding-y-sm-8{padding-top:8rem!important}._padding-right-sm-8,._padding-x-sm-8{padding-right:8rem!important}._padding-bottom-sm-8,._padding-y-sm-8{padding-bottom:8rem!important}._padding-left-sm-8,._padding-x-sm-8{padding-left:8rem!important}._margin-sm-auto{margin:auto!important}._margin-top-sm-auto,._margin-y-sm-auto{margin-top:auto!important}._margin-right-sm-auto,._margin-x-sm-auto{margin-right:auto!important}._margin-bottom-sm-auto,._margin-y-sm-auto{margin-bottom:auto!important}._margin-left-sm-auto,._margin-x-sm-auto{margin-left:auto!important}}@media screen and (min-width:768px) and (max-width:991px){._margin-md-1-2{margin:.5rem!important}._margin-top-md-1-2,._margin-y-md-1-2{margin-top:.5rem!important}._margin-right-md-1-2,._margin-x-md-1-2{margin-right:.5rem!important}._margin-bottom-md-1-2,._margin-y-md-1-2{margin-bottom:.5rem!important}._margin-left-md-1-2,._margin-x-md-1-2{margin-left:.5rem!important}._margin-md-1-3{margin:.33333rem!important}._margin-top-md-1-3,._margin-y-md-1-3{margin-top:.33333rem!important}._margin-right-md-1-3,._margin-x-md-1-3{margin-right:.33333rem!important}._margin-bottom-md-1-3,._margin-y-md-1-3{margin-bottom:.33333rem!important}._margin-left-md-1-3,._margin-x-md-1-3{margin-left:.33333rem!important}._margin-md-2-3{margin:.66667rem!important}._margin-top-md-2-3,._margin-y-md-2-3{margin-top:.66667rem!important}._margin-right-md-2-3,._margin-x-md-2-3{margin-right:.66667rem!important}._margin-bottom-md-2-3,._margin-y-md-2-3{margin-bottom:.66667rem!important}._margin-left-md-2-3,._margin-x-md-2-3{margin-left:.66667rem!important}._margin-md-1-4{margin:.25rem!important}._margin-top-md-1-4,._margin-y-md-1-4{margin-top:.25rem!important}._margin-right-md-1-4,._margin-x-md-1-4{margin-right:.25rem!important}._margin-bottom-md-1-4,._margin-y-md-1-4{margin-bottom:.25rem!important}._margin-left-md-1-4,._margin-x-md-1-4{margin-left:.25rem!important}._margin-md-3-4{margin:.75rem!important}._margin-top-md-3-4,._margin-y-md-3-4{margin-top:.75rem!important}._margin-right-md-3-4,._margin-x-md-3-4{margin-right:.75rem!important}._margin-bottom-md-3-4,._margin-y-md-3-4{margin-bottom:.75rem!important}._margin-left-md-3-4,._margin-x-md-3-4{margin-left:.75rem!important}._margin-md-0{margin:0!important}._margin-top-md-0,._margin-y-md-0{margin-top:0!important}._margin-right-md-0,._margin-x-md-0{margin-right:0!important}._margin-bottom-md-0,._margin-y-md-0{margin-bottom:0!important}._margin-left-md-0,._margin-x-md-0{margin-left:0!important}._margin-md-1{margin:1rem!important}._margin-top-md-1,._margin-y-md-1{margin-top:1rem!important}._margin-right-md-1,._margin-x-md-1{margin-right:1rem!important}._margin-bottom-md-1,._margin-y-md-1{margin-bottom:1rem!important}._margin-left-md-1,._margin-x-md-1{margin-left:1rem!important}._margin-md-2{margin:2rem!important}._margin-top-md-2,._margin-y-md-2{margin-top:2rem!important}._margin-right-md-2,._margin-x-md-2{margin-right:2rem!important}._margin-bottom-md-2,._margin-y-md-2{margin-bottom:2rem!important}._margin-left-md-2,._margin-x-md-2{margin-left:2rem!important}._margin-md-3{margin:3rem!important}._margin-top-md-3,._margin-y-md-3{margin-top:3rem!important}._margin-right-md-3,._margin-x-md-3{margin-right:3rem!important}._margin-bottom-md-3,._margin-y-md-3{margin-bottom:3rem!important}._margin-left-md-3,._margin-x-md-3{margin-left:3rem!important}._margin-md-4{margin:4rem!important}._margin-top-md-4,._margin-y-md-4{margin-top:4rem!important}._margin-right-md-4,._margin-x-md-4{margin-right:4rem!important}._margin-bottom-md-4,._margin-y-md-4{margin-bottom:4rem!important}._margin-left-md-4,._margin-x-md-4{margin-left:4rem!important}._margin-md-5{margin:5rem!important}._margin-top-md-5,._margin-y-md-5{margin-top:5rem!important}._margin-right-md-5,._margin-x-md-5{margin-right:5rem!important}._margin-bottom-md-5,._margin-y-md-5{margin-bottom:5rem!important}._margin-left-md-5,._margin-x-md-5{margin-left:5rem!important}._margin-md-6{margin:6rem!important}._margin-top-md-6,._margin-y-md-6{margin-top:6rem!important}._margin-right-md-6,._margin-x-md-6{margin-right:6rem!important}._margin-bottom-md-6,._margin-y-md-6{margin-bottom:6rem!important}._margin-left-md-6,._margin-x-md-6{margin-left:6rem!important}._margin-md-7{margin:7rem!important}._margin-top-md-7,._margin-y-md-7{margin-top:7rem!important}._margin-right-md-7,._margin-x-md-7{margin-right:7rem!important}._margin-bottom-md-7,._margin-y-md-7{margin-bottom:7rem!important}._margin-left-md-7,._margin-x-md-7{margin-left:7rem!important}._margin-md-8{margin:8rem!important}._margin-top-md-8,._margin-y-md-8{margin-top:8rem!important}._margin-right-md-8,._margin-x-md-8{margin-right:8rem!important}._margin-bottom-md-8,._margin-y-md-8{margin-bottom:8rem!important}._margin-left-md-8,._margin-x-md-8{margin-left:8rem!important}._padding-md-1-2{padding:.5rem!important}._padding-top-md-1-2,._padding-y-md-1-2{padding-top:.5rem!important}._padding-right-md-1-2,._padding-x-md-1-2{padding-right:.5rem!important}._padding-bottom-md-1-2,._padding-y-md-1-2{padding-bottom:.5rem!important}._padding-left-md-1-2,._padding-x-md-1-2{padding-left:.5rem!important}._padding-md-1-3{padding:.33333rem!important}._padding-top-md-1-3,._padding-y-md-1-3{padding-top:.33333rem!important}._padding-right-md-1-3,._padding-x-md-1-3{padding-right:.33333rem!important}._padding-bottom-md-1-3,._padding-y-md-1-3{padding-bottom:.33333rem!important}._padding-left-md-1-3,._padding-x-md-1-3{padding-left:.33333rem!important}._padding-md-2-3{padding:.66667rem!important}._padding-top-md-2-3,._padding-y-md-2-3{padding-top:.66667rem!important}._padding-right-md-2-3,._padding-x-md-2-3{padding-right:.66667rem!important}._padding-bottom-md-2-3,._padding-y-md-2-3{padding-bottom:.66667rem!important}._padding-left-md-2-3,._padding-x-md-2-3{padding-left:.66667rem!important}._padding-md-1-4{padding:.25rem!important}._padding-top-md-1-4,._padding-y-md-1-4{padding-top:.25rem!important}._padding-right-md-1-4,._padding-x-md-1-4{padding-right:.25rem!important}._padding-bottom-md-1-4,._padding-y-md-1-4{padding-bottom:.25rem!important}._padding-left-md-1-4,._padding-x-md-1-4{padding-left:.25rem!important}._padding-md-3-4{padding:.75rem!important}._padding-top-md-3-4,._padding-y-md-3-4{padding-top:.75rem!important}._padding-right-md-3-4,._padding-x-md-3-4{padding-right:.75rem!important}._padding-bottom-md-3-4,._padding-y-md-3-4{padding-bottom:.75rem!important}._padding-left-md-3-4,._padding-x-md-3-4{padding-left:.75rem!important}._padding-md-0{padding:0!important}._padding-top-md-0,._padding-y-md-0{padding-top:0!important}._padding-right-md-0,._padding-x-md-0{padding-right:0!important}._padding-bottom-md-0,._padding-y-md-0{padding-bottom:0!important}._padding-left-md-0,._padding-x-md-0{padding-left:0!important}._padding-md-1{padding:1rem!important}._padding-top-md-1,._padding-y-md-1{padding-top:1rem!important}._padding-right-md-1,._padding-x-md-1{padding-right:1rem!important}._padding-bottom-md-1,._padding-y-md-1{padding-bottom:1rem!important}._padding-left-md-1,._padding-x-md-1{padding-left:1rem!important}._padding-md-2{padding:2rem!important}._padding-top-md-2,._padding-y-md-2{padding-top:2rem!important}._padding-right-md-2,._padding-x-md-2{padding-right:2rem!important}._padding-bottom-md-2,._padding-y-md-2{padding-bottom:2rem!important}._padding-left-md-2,._padding-x-md-2{padding-left:2rem!important}._padding-md-3{padding:3rem!important}._padding-top-md-3,._padding-y-md-3{padding-top:3rem!important}._padding-right-md-3,._padding-x-md-3{padding-right:3rem!important}._padding-bottom-md-3,._padding-y-md-3{padding-bottom:3rem!important}._padding-left-md-3,._padding-x-md-3{padding-left:3rem!important}._padding-md-4{padding:4rem!important}._padding-top-md-4,._padding-y-md-4{padding-top:4rem!important}._padding-right-md-4,._padding-x-md-4{padding-right:4rem!important}._padding-bottom-md-4,._padding-y-md-4{padding-bottom:4rem!important}._padding-left-md-4,._padding-x-md-4{padding-left:4rem!important}._padding-md-5{padding:5rem!important}._padding-top-md-5,._padding-y-md-5{padding-top:5rem!important}._padding-right-md-5,._padding-x-md-5{padding-right:5rem!important}._padding-bottom-md-5,._padding-y-md-5{padding-bottom:5rem!important}._padding-left-md-5,._padding-x-md-5{padding-left:5rem!important}._padding-md-6{padding:6rem!important}._padding-top-md-6,._padding-y-md-6{padding-top:6rem!important}._padding-right-md-6,._padding-x-md-6{padding-right:6rem!important}._padding-bottom-md-6,._padding-y-md-6{padding-bottom:6rem!important}._padding-left-md-6,._padding-x-md-6{padding-left:6rem!important}._padding-md-7{padding:7rem!important}._padding-top-md-7,._padding-y-md-7{padding-top:7rem!important}._padding-right-md-7,._padding-x-md-7{padding-right:7rem!important}._padding-bottom-md-7,._padding-y-md-7{padding-bottom:7rem!important}._padding-left-md-7,._padding-x-md-7{padding-left:7rem!important}._padding-md-8{padding:8rem!important}._padding-top-md-8,._padding-y-md-8{padding-top:8rem!important}._padding-right-md-8,._padding-x-md-8{padding-right:8rem!important}._padding-bottom-md-8,._padding-y-md-8{padding-bottom:8rem!important}._padding-left-md-8,._padding-x-md-8{padding-left:8rem!important}._margin-md-auto{margin:auto!important}._margin-top-md-auto,._margin-y-md-auto{margin-top:auto!important}._margin-right-md-auto,._margin-x-md-auto{margin-right:auto!important}._margin-bottom-md-auto,._margin-y-md-auto{margin-bottom:auto!important}._margin-left-md-auto,._margin-x-md-auto{margin-left:auto!important}}@media screen and (min-width:992px) and (max-width:1199px){._margin-lg-1-2{margin:.5rem!important}._margin-top-lg-1-2,._margin-y-lg-1-2{margin-top:.5rem!important}._margin-right-lg-1-2,._margin-x-lg-1-2{margin-right:.5rem!important}._margin-bottom-lg-1-2,._margin-y-lg-1-2{margin-bottom:.5rem!important}._margin-left-lg-1-2,._margin-x-lg-1-2{margin-left:.5rem!important}._margin-lg-1-3{margin:.33333rem!important}._margin-top-lg-1-3,._margin-y-lg-1-3{margin-top:.33333rem!important}._margin-right-lg-1-3,._margin-x-lg-1-3{margin-right:.33333rem!important}._margin-bottom-lg-1-3,._margin-y-lg-1-3{margin-bottom:.33333rem!important}._margin-left-lg-1-3,._margin-x-lg-1-3{margin-left:.33333rem!important}._margin-lg-2-3{margin:.66667rem!important}._margin-top-lg-2-3,._margin-y-lg-2-3{margin-top:.66667rem!important}._margin-right-lg-2-3,._margin-x-lg-2-3{margin-right:.66667rem!important}._margin-bottom-lg-2-3,._margin-y-lg-2-3{margin-bottom:.66667rem!important}._margin-left-lg-2-3,._margin-x-lg-2-3{margin-left:.66667rem!important}._margin-lg-1-4{margin:.25rem!important}._margin-top-lg-1-4,._margin-y-lg-1-4{margin-top:.25rem!important}._margin-right-lg-1-4,._margin-x-lg-1-4{margin-right:.25rem!important}._margin-bottom-lg-1-4,._margin-y-lg-1-4{margin-bottom:.25rem!important}._margin-left-lg-1-4,._margin-x-lg-1-4{margin-left:.25rem!important}._margin-lg-3-4{margin:.75rem!important}._margin-top-lg-3-4,._margin-y-lg-3-4{margin-top:.75rem!important}._margin-right-lg-3-4,._margin-x-lg-3-4{margin-right:.75rem!important}._margin-bottom-lg-3-4,._margin-y-lg-3-4{margin-bottom:.75rem!important}._margin-left-lg-3-4,._margin-x-lg-3-4{margin-left:.75rem!important}._margin-lg-0{margin:0!important}._margin-top-lg-0,._margin-y-lg-0{margin-top:0!important}._margin-right-lg-0,._margin-x-lg-0{margin-right:0!important}._margin-bottom-lg-0,._margin-y-lg-0{margin-bottom:0!important}._margin-left-lg-0,._margin-x-lg-0{margin-left:0!important}._margin-lg-1{margin:1rem!important}._margin-top-lg-1,._margin-y-lg-1{margin-top:1rem!important}._margin-right-lg-1,._margin-x-lg-1{margin-right:1rem!important}._margin-bottom-lg-1,._margin-y-lg-1{margin-bottom:1rem!important}._margin-left-lg-1,._margin-x-lg-1{margin-left:1rem!important}._margin-lg-2{margin:2rem!important}._margin-top-lg-2,._margin-y-lg-2{margin-top:2rem!important}._margin-right-lg-2,._margin-x-lg-2{margin-right:2rem!important}._margin-bottom-lg-2,._margin-y-lg-2{margin-bottom:2rem!important}._margin-left-lg-2,._margin-x-lg-2{margin-left:2rem!important}._margin-lg-3{margin:3rem!important}._margin-top-lg-3,._margin-y-lg-3{margin-top:3rem!important}._margin-right-lg-3,._margin-x-lg-3{margin-right:3rem!important}._margin-bottom-lg-3,._margin-y-lg-3{margin-bottom:3rem!important}._margin-left-lg-3,._margin-x-lg-3{margin-left:3rem!important}._margin-lg-4{margin:4rem!important}._margin-top-lg-4,._margin-y-lg-4{margin-top:4rem!important}._margin-right-lg-4,._margin-x-lg-4{margin-right:4rem!important}._margin-bottom-lg-4,._margin-y-lg-4{margin-bottom:4rem!important}._margin-left-lg-4,._margin-x-lg-4{margin-left:4rem!important}._margin-lg-5{margin:5rem!important}._margin-top-lg-5,._margin-y-lg-5{margin-top:5rem!important}._margin-right-lg-5,._margin-x-lg-5{margin-right:5rem!important}._margin-bottom-lg-5,._margin-y-lg-5{margin-bottom:5rem!important}._margin-left-lg-5,._margin-x-lg-5{margin-left:5rem!important}._margin-lg-6{margin:6rem!important}._margin-top-lg-6,._margin-y-lg-6{margin-top:6rem!important}._margin-right-lg-6,._margin-x-lg-6{margin-right:6rem!important}._margin-bottom-lg-6,._margin-y-lg-6{margin-bottom:6rem!important}._margin-left-lg-6,._margin-x-lg-6{margin-left:6rem!important}._margin-lg-7{margin:7rem!important}._margin-top-lg-7,._margin-y-lg-7{margin-top:7rem!important}._margin-right-lg-7,._margin-x-lg-7{margin-right:7rem!important}._margin-bottom-lg-7,._margin-y-lg-7{margin-bottom:7rem!important}._margin-left-lg-7,._margin-x-lg-7{margin-left:7rem!important}._margin-lg-8{margin:8rem!important}._margin-top-lg-8,._margin-y-lg-8{margin-top:8rem!important}._margin-right-lg-8,._margin-x-lg-8{margin-right:8rem!important}._margin-bottom-lg-8,._margin-y-lg-8{margin-bottom:8rem!important}._margin-left-lg-8,._margin-x-lg-8{margin-left:8rem!important}._padding-lg-1-2{padding:.5rem!important}._padding-top-lg-1-2,._padding-y-lg-1-2{padding-top:.5rem!important}._padding-right-lg-1-2,._padding-x-lg-1-2{padding-right:.5rem!important}._padding-bottom-lg-1-2,._padding-y-lg-1-2{padding-bottom:.5rem!important}._padding-left-lg-1-2,._padding-x-lg-1-2{padding-left:.5rem!important}._padding-lg-1-3{padding:.33333rem!important}._padding-top-lg-1-3,._padding-y-lg-1-3{padding-top:.33333rem!important}._padding-right-lg-1-3,._padding-x-lg-1-3{padding-right:.33333rem!important}._padding-bottom-lg-1-3,._padding-y-lg-1-3{padding-bottom:.33333rem!important}._padding-left-lg-1-3,._padding-x-lg-1-3{padding-left:.33333rem!important}._padding-lg-2-3{padding:.66667rem!important}._padding-top-lg-2-3,._padding-y-lg-2-3{padding-top:.66667rem!important}._padding-right-lg-2-3,._padding-x-lg-2-3{padding-right:.66667rem!important}._padding-bottom-lg-2-3,._padding-y-lg-2-3{padding-bottom:.66667rem!important}._padding-left-lg-2-3,._padding-x-lg-2-3{padding-left:.66667rem!important}._padding-lg-1-4{padding:.25rem!important}._padding-top-lg-1-4,._padding-y-lg-1-4{padding-top:.25rem!important}._padding-right-lg-1-4,._padding-x-lg-1-4{padding-right:.25rem!important}._padding-bottom-lg-1-4,._padding-y-lg-1-4{padding-bottom:.25rem!important}._padding-left-lg-1-4,._padding-x-lg-1-4{padding-left:.25rem!important}._padding-lg-3-4{padding:.75rem!important}._padding-top-lg-3-4,._padding-y-lg-3-4{padding-top:.75rem!important}._padding-right-lg-3-4,._padding-x-lg-3-4{padding-right:.75rem!important}._padding-bottom-lg-3-4,._padding-y-lg-3-4{padding-bottom:.75rem!important}._padding-left-lg-3-4,._padding-x-lg-3-4{padding-left:.75rem!important}._padding-lg-0{padding:0!important}._padding-top-lg-0,._padding-y-lg-0{padding-top:0!important}._padding-right-lg-0,._padding-x-lg-0{padding-right:0!important}._padding-bottom-lg-0,._padding-y-lg-0{padding-bottom:0!important}._padding-left-lg-0,._padding-x-lg-0{padding-left:0!important}._padding-lg-1{padding:1rem!important}._padding-top-lg-1,._padding-y-lg-1{padding-top:1rem!important}._padding-right-lg-1,._padding-x-lg-1{padding-right:1rem!important}._padding-bottom-lg-1,._padding-y-lg-1{padding-bottom:1rem!important}._padding-left-lg-1,._padding-x-lg-1{padding-left:1rem!important}._padding-lg-2{padding:2rem!important}._padding-top-lg-2,._padding-y-lg-2{padding-top:2rem!important}._padding-right-lg-2,._padding-x-lg-2{padding-right:2rem!important}._padding-bottom-lg-2,._padding-y-lg-2{padding-bottom:2rem!important}._padding-left-lg-2,._padding-x-lg-2{padding-left:2rem!important}._padding-lg-3{padding:3rem!important}._padding-top-lg-3,._padding-y-lg-3{padding-top:3rem!important}._padding-right-lg-3,._padding-x-lg-3{padding-right:3rem!important}._padding-bottom-lg-3,._padding-y-lg-3{padding-bottom:3rem!important}._padding-left-lg-3,._padding-x-lg-3{padding-left:3rem!important}._padding-lg-4{padding:4rem!important}._padding-top-lg-4,._padding-y-lg-4{padding-top:4rem!important}._padding-right-lg-4,._padding-x-lg-4{padding-right:4rem!important}._padding-bottom-lg-4,._padding-y-lg-4{padding-bottom:4rem!important}._padding-left-lg-4,._padding-x-lg-4{padding-left:4rem!important}._padding-lg-5{padding:5rem!important}._padding-top-lg-5,._padding-y-lg-5{padding-top:5rem!important}._padding-right-lg-5,._padding-x-lg-5{padding-right:5rem!important}._padding-bottom-lg-5,._padding-y-lg-5{padding-bottom:5rem!important}._padding-left-lg-5,._padding-x-lg-5{padding-left:5rem!important}._padding-lg-6{padding:6rem!important}._padding-top-lg-6,._padding-y-lg-6{padding-top:6rem!important}._padding-right-lg-6,._padding-x-lg-6{padding-right:6rem!important}._padding-bottom-lg-6,._padding-y-lg-6{padding-bottom:6rem!important}._padding-left-lg-6,._padding-x-lg-6{padding-left:6rem!important}._padding-lg-7{padding:7rem!important}._padding-top-lg-7,._padding-y-lg-7{padding-top:7rem!important}._padding-right-lg-7,._padding-x-lg-7{padding-right:7rem!important}._padding-bottom-lg-7,._padding-y-lg-7{padding-bottom:7rem!important}._padding-left-lg-7,._padding-x-lg-7{padding-left:7rem!important}._padding-lg-8{padding:8rem!important}._padding-top-lg-8,._padding-y-lg-8{padding-top:8rem!important}._padding-right-lg-8,._padding-x-lg-8{padding-right:8rem!important}._padding-bottom-lg-8,._padding-y-lg-8{padding-bottom:8rem!important}._padding-left-lg-8,._padding-x-lg-8{padding-left:8rem!important}._margin-lg-auto{margin:auto!important}._margin-top-lg-auto,._margin-y-lg-auto{margin-top:auto!important}._margin-right-lg-auto,._margin-x-lg-auto{margin-right:auto!important}._margin-bottom-lg-auto,._margin-y-lg-auto{margin-bottom:auto!important}._margin-left-lg-auto,._margin-x-lg-auto{margin-left:auto!important}}@media screen and (min-width:1200px){._margin-xl-1-2{margin:.5rem!important}._margin-top-xl-1-2,._margin-y-xl-1-2{margin-top:.5rem!important}._margin-right-xl-1-2,._margin-x-xl-1-2{margin-right:.5rem!important}._margin-bottom-xl-1-2,._margin-y-xl-1-2{margin-bottom:.5rem!important}._margin-left-xl-1-2,._margin-x-xl-1-2{margin-left:.5rem!important}._margin-xl-1-3{margin:.33333rem!important}._margin-top-xl-1-3,._margin-y-xl-1-3{margin-top:.33333rem!important}._margin-right-xl-1-3,._margin-x-xl-1-3{margin-right:.33333rem!important}._margin-bottom-xl-1-3,._margin-y-xl-1-3{margin-bottom:.33333rem!important}._margin-left-xl-1-3,._margin-x-xl-1-3{margin-left:.33333rem!important}._margin-xl-2-3{margin:.66667rem!important}._margin-top-xl-2-3,._margin-y-xl-2-3{margin-top:.66667rem!important}._margin-right-xl-2-3,._margin-x-xl-2-3{margin-right:.66667rem!important}._margin-bottom-xl-2-3,._margin-y-xl-2-3{margin-bottom:.66667rem!important}._margin-left-xl-2-3,._margin-x-xl-2-3{margin-left:.66667rem!important}._margin-xl-1-4{margin:.25rem!important}._margin-top-xl-1-4,._margin-y-xl-1-4{margin-top:.25rem!important}._margin-right-xl-1-4,._margin-x-xl-1-4{margin-right:.25rem!important}._margin-bottom-xl-1-4,._margin-y-xl-1-4{margin-bottom:.25rem!important}._margin-left-xl-1-4,._margin-x-xl-1-4{margin-left:.25rem!important}._margin-xl-3-4{margin:.75rem!important}._margin-top-xl-3-4,._margin-y-xl-3-4{margin-top:.75rem!important}._margin-right-xl-3-4,._margin-x-xl-3-4{margin-right:.75rem!important}._margin-bottom-xl-3-4,._margin-y-xl-3-4{margin-bottom:.75rem!important}._margin-left-xl-3-4,._margin-x-xl-3-4{margin-left:.75rem!important}._margin-xl-0{margin:0!important}._margin-top-xl-0,._margin-y-xl-0{margin-top:0!important}._margin-right-xl-0,._margin-x-xl-0{margin-right:0!important}._margin-bottom-xl-0,._margin-y-xl-0{margin-bottom:0!important}._margin-left-xl-0,._margin-x-xl-0{margin-left:0!important}._margin-xl-1{margin:1rem!important}._margin-top-xl-1,._margin-y-xl-1{margin-top:1rem!important}._margin-right-xl-1,._margin-x-xl-1{margin-right:1rem!important}._margin-bottom-xl-1,._margin-y-xl-1{margin-bottom:1rem!important}._margin-left-xl-1,._margin-x-xl-1{margin-left:1rem!important}._margin-xl-2{margin:2rem!important}._margin-top-xl-2,._margin-y-xl-2{margin-top:2rem!important}._margin-right-xl-2,._margin-x-xl-2{margin-right:2rem!important}._margin-bottom-xl-2,._margin-y-xl-2{margin-bottom:2rem!important}._margin-left-xl-2,._margin-x-xl-2{margin-left:2rem!important}._margin-xl-3{margin:3rem!important}._margin-top-xl-3,._margin-y-xl-3{margin-top:3rem!important}._margin-right-xl-3,._margin-x-xl-3{margin-right:3rem!important}._margin-bottom-xl-3,._margin-y-xl-3{margin-bottom:3rem!important}._margin-left-xl-3,._margin-x-xl-3{margin-left:3rem!important}._margin-xl-4{margin:4rem!important}._margin-top-xl-4,._margin-y-xl-4{margin-top:4rem!important}._margin-right-xl-4,._margin-x-xl-4{margin-right:4rem!important}._margin-bottom-xl-4,._margin-y-xl-4{margin-bottom:4rem!important}._margin-left-xl-4,._margin-x-xl-4{margin-left:4rem!important}._margin-xl-5{margin:5rem!important}._margin-top-xl-5,._margin-y-xl-5{margin-top:5rem!important}._margin-right-xl-5,._margin-x-xl-5{margin-right:5rem!important}._margin-bottom-xl-5,._margin-y-xl-5{margin-bottom:5rem!important}._margin-left-xl-5,._margin-x-xl-5{margin-left:5rem!important}._margin-xl-6{margin:6rem!important}._margin-top-xl-6,._margin-y-xl-6{margin-top:6rem!important}._margin-right-xl-6,._margin-x-xl-6{margin-right:6rem!important}._margin-bottom-xl-6,._margin-y-xl-6{margin-bottom:6rem!important}._margin-left-xl-6,._margin-x-xl-6{margin-left:6rem!important}._margin-xl-7{margin:7rem!important}._margin-top-xl-7,._margin-y-xl-7{margin-top:7rem!important}._margin-right-xl-7,._margin-x-xl-7{margin-right:7rem!important}._margin-bottom-xl-7,._margin-y-xl-7{margin-bottom:7rem!important}._margin-left-xl-7,._margin-x-xl-7{margin-left:7rem!important}._margin-xl-8{margin:8rem!important}._margin-top-xl-8,._margin-y-xl-8{margin-top:8rem!important}._margin-right-xl-8,._margin-x-xl-8{margin-right:8rem!important}._margin-bottom-xl-8,._margin-y-xl-8{margin-bottom:8rem!important}._margin-left-xl-8,._margin-x-xl-8{margin-left:8rem!important}._padding-xl-1-2{padding:.5rem!important}._padding-top-xl-1-2,._padding-y-xl-1-2{padding-top:.5rem!important}._padding-right-xl-1-2,._padding-x-xl-1-2{padding-right:.5rem!important}._padding-bottom-xl-1-2,._padding-y-xl-1-2{padding-bottom:.5rem!important}._padding-left-xl-1-2,._padding-x-xl-1-2{padding-left:.5rem!important}._padding-xl-1-3{padding:.33333rem!important}._padding-top-xl-1-3,._padding-y-xl-1-3{padding-top:.33333rem!important}._padding-right-xl-1-3,._padding-x-xl-1-3{padding-right:.33333rem!important}._padding-bottom-xl-1-3,._padding-y-xl-1-3{padding-bottom:.33333rem!important}._padding-left-xl-1-3,._padding-x-xl-1-3{padding-left:.33333rem!important}._padding-xl-2-3{padding:.66667rem!important}._padding-top-xl-2-3,._padding-y-xl-2-3{padding-top:.66667rem!important}._padding-right-xl-2-3,._padding-x-xl-2-3{padding-right:.66667rem!important}._padding-bottom-xl-2-3,._padding-y-xl-2-3{padding-bottom:.66667rem!important}._padding-left-xl-2-3,._padding-x-xl-2-3{padding-left:.66667rem!important}._padding-xl-1-4{padding:.25rem!important}._padding-top-xl-1-4,._padding-y-xl-1-4{padding-top:.25rem!important}._padding-right-xl-1-4,._padding-x-xl-1-4{padding-right:.25rem!important}._padding-bottom-xl-1-4,._padding-y-xl-1-4{padding-bottom:.25rem!important}._padding-left-xl-1-4,._padding-x-xl-1-4{padding-left:.25rem!important}._padding-xl-3-4{padding:.75rem!important}._padding-top-xl-3-4,._padding-y-xl-3-4{padding-top:.75rem!important}._padding-right-xl-3-4,._padding-x-xl-3-4{padding-right:.75rem!important}._padding-bottom-xl-3-4,._padding-y-xl-3-4{padding-bottom:.75rem!important}._padding-left-xl-3-4,._padding-x-xl-3-4{padding-left:.75rem!important}._padding-xl-0{padding:0!important}._padding-top-xl-0,._padding-y-xl-0{padding-top:0!important}._padding-right-xl-0,._padding-x-xl-0{padding-right:0!important}._padding-bottom-xl-0,._padding-y-xl-0{padding-bottom:0!important}._padding-left-xl-0,._padding-x-xl-0{padding-left:0!important}._padding-xl-1{padding:1rem!important}._padding-top-xl-1,._padding-y-xl-1{padding-top:1rem!important}._padding-right-xl-1,._padding-x-xl-1{padding-right:1rem!important}._padding-bottom-xl-1,._padding-y-xl-1{padding-bottom:1rem!important}._padding-left-xl-1,._padding-x-xl-1{padding-left:1rem!important}._padding-xl-2{padding:2rem!important}._padding-top-xl-2,._padding-y-xl-2{padding-top:2rem!important}._padding-right-xl-2,._padding-x-xl-2{padding-right:2rem!important}._padding-bottom-xl-2,._padding-y-xl-2{padding-bottom:2rem!important}._padding-left-xl-2,._padding-x-xl-2{padding-left:2rem!important}._padding-xl-3{padding:3rem!important}._padding-top-xl-3,._padding-y-xl-3{padding-top:3rem!important}._padding-right-xl-3,._padding-x-xl-3{padding-right:3rem!important}._padding-bottom-xl-3,._padding-y-xl-3{padding-bottom:3rem!important}._padding-left-xl-3,._padding-x-xl-3{padding-left:3rem!important}._padding-xl-4{padding:4rem!important}._padding-top-xl-4,._padding-y-xl-4{padding-top:4rem!important}._padding-right-xl-4,._padding-x-xl-4{padding-right:4rem!important}._padding-bottom-xl-4,._padding-y-xl-4{padding-bottom:4rem!important}._padding-left-xl-4,._padding-x-xl-4{padding-left:4rem!important}._padding-xl-5{padding:5rem!important}._padding-top-xl-5,._padding-y-xl-5{padding-top:5rem!important}._padding-right-xl-5,._padding-x-xl-5{padding-right:5rem!important}._padding-bottom-xl-5,._padding-y-xl-5{padding-bottom:5rem!important}._padding-left-xl-5,._padding-x-xl-5{padding-left:5rem!important}._padding-xl-6{padding:6rem!important}._padding-top-xl-6,._padding-y-xl-6{padding-top:6rem!important}._padding-right-xl-6,._padding-x-xl-6{padding-right:6rem!important}._padding-bottom-xl-6,._padding-y-xl-6{padding-bottom:6rem!important}._padding-left-xl-6,._padding-x-xl-6{padding-left:6rem!important}._padding-xl-7{padding:7rem!important}._padding-top-xl-7,._padding-y-xl-7{padding-top:7rem!important}._padding-right-xl-7,._padding-x-xl-7{padding-right:7rem!important}._padding-bottom-xl-7,._padding-y-xl-7{padding-bottom:7rem!important}._padding-left-xl-7,._padding-x-xl-7{padding-left:7rem!important}._padding-xl-8{padding:8rem!important}._padding-top-xl-8,._padding-y-xl-8{padding-top:8rem!important}._padding-right-xl-8,._padding-x-xl-8{padding-right:8rem!important}._padding-bottom-xl-8,._padding-y-xl-8{padding-bottom:8rem!important}._padding-left-xl-8,._padding-x-xl-8{padding-left:8rem!important}._margin-xl-auto{margin:auto!important}._margin-top-xl-auto,._margin-y-xl-auto{margin-top:auto!important}._margin-right-xl-auto,._margin-x-xl-auto{margin-right:auto!important}._margin-bottom-xl-auto,._margin-y-xl-auto{margin-bottom:auto!important}._margin-left-xl-auto,._margin-x-xl-auto{margin-left:auto!important}}._margin-1-2{margin:.5rem!important}._margin-top-1-2,._margin-y-1-2{margin-top:.5rem!important}._margin-right-1-2,._margin-x-1-2{margin-right:.5rem!important}._margin-bottom-1-2,._margin-y-1-2{margin-bottom:.5rem!important}._margin-left-1-2,._margin-x-1-2{margin-left:.5rem!important}._margin-1-3{margin:.33333rem!important}._margin-top-1-3,._margin-y-1-3{margin-top:.33333rem!important}._margin-right-1-3,._margin-x-1-3{margin-right:.33333rem!important}._margin-bottom-1-3,._margin-y-1-3{margin-bottom:.33333rem!important}._margin-left-1-3,._margin-x-1-3{margin-left:.33333rem!important}._margin-2-3{margin:.66667rem!important}._margin-top-2-3,._margin-y-2-3{margin-top:.66667rem!important}._margin-right-2-3,._margin-x-2-3{margin-right:.66667rem!important}._margin-bottom-2-3,._margin-y-2-3{margin-bottom:.66667rem!important}._margin-left-2-3,._margin-x-2-3{margin-left:.66667rem!important}._margin-1-4{margin:.25rem!important}._margin-top-1-4,._margin-y-1-4{margin-top:.25rem!important}._margin-right-1-4,._margin-x-1-4{margin-right:.25rem!important}._margin-bottom-1-4,._margin-y-1-4{margin-bottom:.25rem!important}._margin-left-1-4,._margin-x-1-4{margin-left:.25rem!important}._margin-3-4{margin:.75rem!important}._margin-top-3-4,._margin-y-3-4{margin-top:.75rem!important}._margin-right-3-4,._margin-x-3-4{margin-right:.75rem!important}._margin-bottom-3-4,._margin-y-3-4{margin-bottom:.75rem!important}._margin-left-3-4,._margin-x-3-4{margin-left:.75rem!important}._margin-0{margin:0!important}._margin-top-0,._margin-y-0{margin-top:0!important}._margin-right-0,._margin-x-0{margin-right:0!important}._margin-bottom-0,._margin-y-0{margin-bottom:0!important}._margin-left-0,._margin-x-0{margin-left:0!important}._margin-1{margin:1rem!important}._margin-top-1,._margin-y-1{margin-top:1rem!important}._margin-right-1,._margin-x-1{margin-right:1rem!important}._margin-bottom-1,._margin-y-1{margin-bottom:1rem!important}._margin-left-1,._margin-x-1{margin-left:1rem!important}._margin-2{margin:2rem!important}._margin-top-2,._margin-y-2{margin-top:2rem!important}._margin-right-2,._margin-x-2{margin-right:2rem!important}._margin-bottom-2,._margin-y-2{margin-bottom:2rem!important}._margin-left-2,._margin-x-2{margin-left:2rem!important}._margin-3{margin:3rem!important}._margin-top-3,._margin-y-3{margin-top:3rem!important}._margin-right-3,._margin-x-3{margin-right:3rem!important}._margin-bottom-3,._margin-y-3{margin-bottom:3rem!important}._margin-left-3,._margin-x-3{margin-left:3rem!important}._margin-4{margin:4rem!important}._margin-top-4,._margin-y-4{margin-top:4rem!important}._margin-right-4,._margin-x-4{margin-right:4rem!important}._margin-bottom-4,._margin-y-4{margin-bottom:4rem!important}._margin-left-4,._margin-x-4{margin-left:4rem!important}._margin-5{margin:5rem!important}._margin-top-5,._margin-y-5{margin-top:5rem!important}._margin-right-5,._margin-x-5{margin-right:5rem!important}._margin-bottom-5,._margin-y-5{margin-bottom:5rem!important}._margin-left-5,._margin-x-5{margin-left:5rem!important}._margin-6{margin:6rem!important}._margin-top-6,._margin-y-6{margin-top:6rem!important}._margin-right-6,._margin-x-6{margin-right:6rem!important}._margin-bottom-6,._margin-y-6{margin-bottom:6rem!important}._margin-left-6,._margin-x-6{margin-left:6rem!important}._margin-7{margin:7rem!important}._margin-top-7,._margin-y-7{margin-top:7rem!important}._margin-right-7,._margin-x-7{margin-right:7rem!important}._margin-bottom-7,._margin-y-7{margin-bottom:7rem!important}._margin-left-7,._margin-x-7{margin-left:7rem!important}._margin-8{margin:8rem!important}._margin-top-8,._margin-y-8{margin-top:8rem!important}._margin-right-8,._margin-x-8{margin-right:8rem!important}._margin-bottom-8,._margin-y-8{margin-bottom:8rem!important}._margin-left-8,._margin-x-8{margin-left:8rem!important}._padding-1-2{padding:.5rem!important}._padding-top-1-2,._padding-y-1-2{padding-top:.5rem!important}._padding-right-1-2,._padding-x-1-2{padding-right:.5rem!important}._padding-bottom-1-2,._padding-y-1-2{padding-bottom:.5rem!important}._padding-left-1-2,._padding-x-1-2{padding-left:.5rem!important}._padding-1-3{padding:.33333rem!important}._padding-top-1-3,._padding-y-1-3{padding-top:.33333rem!important}._padding-right-1-3,._padding-x-1-3{padding-right:.33333rem!important}._padding-bottom-1-3,._padding-y-1-3{padding-bottom:.33333rem!important}._padding-left-1-3,._padding-x-1-3{padding-left:.33333rem!important}._padding-2-3{padding:.66667rem!important}._padding-top-2-3,._padding-y-2-3{padding-top:.66667rem!important}._padding-right-2-3,._padding-x-2-3{padding-right:.66667rem!important}._padding-bottom-2-3,._padding-y-2-3{padding-bottom:.66667rem!important}._padding-left-2-3,._padding-x-2-3{padding-left:.66667rem!important}._padding-1-4{padding:.25rem!important}._padding-top-1-4,._padding-y-1-4{padding-top:.25rem!important}._padding-right-1-4,._padding-x-1-4{padding-right:.25rem!important}._padding-bottom-1-4,._padding-y-1-4{padding-bottom:.25rem!important}._padding-left-1-4,._padding-x-1-4{padding-left:.25rem!important}._padding-3-4{padding:.75rem!important}._padding-top-3-4,._padding-y-3-4{padding-top:.75rem!important}._padding-right-3-4,._padding-x-3-4{padding-right:.75rem!important}._padding-bottom-3-4,._padding-y-3-4{padding-bottom:.75rem!important}._padding-left-3-4,._padding-x-3-4{padding-left:.75rem!important}._padding-0{padding:0!important}._padding-top-0,._padding-y-0{padding-top:0!important}._padding-right-0,._padding-x-0{padding-right:0!important}._padding-bottom-0,._padding-y-0{padding-bottom:0!important}._padding-left-0,._padding-x-0{padding-left:0!important}._padding-1{padding:1rem!important}._padding-top-1,._padding-y-1{padding-top:1rem!important}._padding-right-1,._padding-x-1{padding-right:1rem!important}._padding-bottom-1,._padding-y-1{padding-bottom:1rem!important}._padding-left-1,._padding-x-1{padding-left:1rem!important}._padding-2{padding:2rem!important}._padding-top-2,._padding-y-2{padding-top:2rem!important}._padding-right-2,._padding-x-2{padding-right:2rem!important}._padding-bottom-2,._padding-y-2{padding-bottom:2rem!important}._padding-left-2,._padding-x-2{padding-left:2rem!important}._padding-3{padding:3rem!important}._padding-top-3,._padding-y-3{padding-top:3rem!important}._padding-right-3,._padding-x-3{padding-right:3rem!important}._padding-bottom-3,._padding-y-3{padding-bottom:3rem!important}._padding-left-3,._padding-x-3{padding-left:3rem!important}._padding-4{padding:4rem!important}._padding-top-4,._padding-y-4{padding-top:4rem!important}._padding-right-4,._padding-x-4{padding-right:4rem!important}._padding-bottom-4,._padding-y-4{padding-bottom:4rem!important}._padding-left-4,._padding-x-4{padding-left:4rem!important}._padding-5{padding:5rem!important}._padding-top-5,._padding-y-5{padding-top:5rem!important}._padding-right-5,._padding-x-5{padding-right:5rem!important}._padding-bottom-5,._padding-y-5{padding-bottom:5rem!important}._padding-left-5,._padding-x-5{padding-left:5rem!important}._padding-6{padding:6rem!important}._padding-top-6,._padding-y-6{padding-top:6rem!important}._padding-right-6,._padding-x-6{padding-right:6rem!important}._padding-bottom-6,._padding-y-6{padding-bottom:6rem!important}._padding-left-6,._padding-x-6{padding-left:6rem!important}._padding-7{padding:7rem!important}._padding-top-7,._padding-y-7{padding-top:7rem!important}._padding-right-7,._padding-x-7{padding-right:7rem!important}._padding-bottom-7,._padding-y-7{padding-bottom:7rem!important}._padding-left-7,._padding-x-7{padding-left:7rem!important}._padding-8{padding:8rem!important}._padding-top-8,._padding-y-8{padding-top:8rem!important}._padding-right-8,._padding-x-8{padding-right:8rem!important}._padding-bottom-8,._padding-y-8{padding-bottom:8rem!important}._padding-left-8,._padding-x-8{padding-left:8rem!important}._margin-auto{margin:auto!important}._margin-top-auto,._margin-y-auto{margin-top:auto!important}._margin-right-auto,._margin-x-auto{margin-right:auto!important}._margin-bottom-auto,._margin-y-auto{margin-bottom:auto!important}._margin-left-auto,._margin-x-auto{margin-left:auto!important}._text-justify{text-align:justify!important}@media screen and (max-width:575px){._text-left-xs{text-align:left!important}._text-right-xs{text-align:right!important}._text-center-xs{text-align:center!important}._text-wrap-xs{white-space:normal!important}._text-nowrap-xs{white-space:nowrap!important}._text-truncate-xs{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:576px) and (max-width:767px){._text-left-sm{text-align:left!important}._text-right-sm{text-align:right!important}._text-center-sm{text-align:center!important}._text-wrap-sm{white-space:normal!important}._text-nowrap-sm{white-space:nowrap!important}._text-truncate-sm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:768px) and (max-width:991px){._text-left-md{text-align:left!important}._text-right-md{text-align:right!important}._text-center-md{text-align:center!important}._text-wrap-md{white-space:normal!important}._text-nowrap-md{white-space:nowrap!important}._text-truncate-md{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:992px) and (max-width:1199px){._text-left-lg{text-align:left!important}._text-right-lg{text-align:right!important}._text-center-lg{text-align:center!important}._text-wrap-lg{white-space:normal!important}._text-nowrap-lg{white-space:nowrap!important}._text-truncate-lg{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:1200px){._text-left-xl{text-align:left!important}._text-right-xl{text-align:right!important}._text-center-xl{text-align:center!important}._text-wrap-xl{white-space:normal!important}._text-nowrap-xl{white-space:nowrap!important}._text-truncate-xl{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}._text-wrap{white-space:normal!important}._text-nowrap{white-space:nowrap!important}._text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._text-lowercase{text-transform:lowercase!important}._text-uppercase{text-transform:uppercase!important}._text-capitalize{text-transform:capitalize!important}._font-weight-extralight{font-weight:200!important}._font-weight-light{font-weight:300!important}._font-weight-lighter{font-weight:lighter!important}._font-weight-normal{font-weight:400!important}._font-weight-semibold{font-weight:600!important}._font-weight-bold{font-weight:700!important}._font-weight-bolder{font-weight:bolder!important}._font-weight-black{font-weight:900!important}._font-italic{font-style:italic!important}._text-muted{color:#868e96!important}._text-hide{text-indent:-10000px}._text-break{word-break:break-word!important;overflow-wrap:break-word!important}._text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}._text-reset{color:inherit!important}._text-decoration-none{text-decoration:none!important}._font-size-sm{font-size:.88rem}._font-size-md{font-size:1.1rem}._font-size-lg{font-size:1.32rem}@media screen and (max-width:575px){._hidden-xs-only{display:none!important}._visible-xs-only{display:block}}._visible-xs-and-down,._visible-xs-and-up,._visible-xs-only{display:none!important}@media screen and (min-width:0){._hidden-xs-and-up{display:none!important}._visible-xs-and-up{display:block!important}}@media screen and (max-width:575px){._hidden-xs-and-down{display:none!important}._visible-xs-and-down{display:block!important}}@media screen and (min-width:576px) and (max-width:767px){._hidden-sm-only{display:none!important}._visible-sm-only{display:block}}._visible-sm-and-down,._visible-sm-and-up,._visible-sm-only{display:none!important}@media screen and (min-width:576px){._hidden-sm-and-up{display:none!important}._visible-sm-and-up{display:block!important}}@media screen and (max-width:767px){._hidden-sm-and-down{display:none!important}._visible-sm-and-down{display:block!important}}@media screen and (min-width:768px) and (max-width:991px){._hidden-md-only{display:none!important}._visible-md-only{display:block}}._visible-md-and-down,._visible-md-and-up,._visible-md-only{display:none!important}@media screen and (min-width:768px){._hidden-md-and-up{display:none!important}._visible-md-and-up{display:block!important}}@media screen and (max-width:991px){._hidden-md-and-down{display:none!important}._visible-md-and-down{display:block!important}}@media screen and (min-width:992px) and (max-width:1199px){._hidden-lg-only{display:none!important}._visible-lg-only{display:block}}._visible-lg-and-down,._visible-lg-and-up,._visible-lg-only{display:none!important}@media screen and (min-width:992px){._hidden-lg-and-up{display:none!important}._visible-lg-and-up{display:block!important}}@media screen and (max-width:1199px){._hidden-lg-and-down{display:none!important}._visible-lg-and-down{display:block!important}}@media screen and (min-width:1200px){._hidden-xl-only{display:none!important}._visible-xl-only{display:block}}._visible-xl-and-down,._visible-xl-and-up,._visible-xl-only{display:none!important}@media screen and (min-width:1200px){._hidden-xl-and-up{display:none!important}._visible-xl-and-up{display:block!important}}._hidden-xl-and-down{display:none!important}._visible-xl-and-down{display:block!important}._hidden-only{display:none!important}._visible-only{display:block}._visibility-visible{visibility:visible}._visibility-hidden{visibility:hidden}.button.-primary{color:#fff;background-color:#37598d;border-color:#37598d}.button.-primary.-disabled,.button.-primary:disabled{opacity:.75}.button.-primary:not(:disabled):not(.-disabled).-hovered,.button.-primary:not(:disabled):not(.-disabled):hover{background-color:#345586;border-color:#345586}.button.-primary:not(:disabled):not(.-disabled).-active,.button.-primary:not(:disabled):not(.-disabled):active{background-color:#304e7b}.button.-primary:not(:disabled):not(.-disabled).-focused,.button.-primary:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(55,89,141,.25)}.button.-primary.-outline{background-color:transparent;color:#37598d}.button.-primary.-outline:not(:disabled):not(.-disabled).-focused,.button.-primary.-outline:not(:disabled):not(.-disabled).-hovered,.button.-primary.-outline:not(:disabled):not(.-disabled):focus,.button.-primary.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#345586;border-color:#345586}.button.-primary.-outline:not(:disabled):not(.-disabled).-active,.button.-primary.-outline:not(:disabled):not(.-disabled):active{background-color:#304e7b}.button.-primary.-link{color:#37598d;background-color:transparent;border-color:transparent}.button.-primary.-link:not(:disabled):not(.-disabled).-focused,.button.-primary.-link:not(:disabled):not(.-disabled).-hovered,.button.-primary.-link:not(:disabled):not(.-disabled):focus,.button.-primary.-link:not(:disabled):not(.-disabled):hover{color:#345586;background-color:transparent;border-color:transparent}.button.-primary ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-primary.-disabled,.inkline.-dark .button.-primary:disabled{opacity:.66}.button.-secondary{color:#fff;background-color:#5d65b9;border-color:#5d65b9}.button.-secondary.-disabled,.button.-secondary:disabled{opacity:.75}.button.-secondary:not(:disabled):not(.-disabled).-hovered,.button.-secondary:not(:disabled):not(.-disabled):hover{background-color:#535cb5;border-color:#535cb5}.button.-secondary:not(:disabled):not(.-disabled).-active,.button.-secondary:not(:disabled):not(.-disabled):active{background-color:#4952aa}.button.-secondary:not(:disabled):not(.-disabled).-focused,.button.-secondary:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(93,101,185,.25)}.button.-secondary.-outline{background-color:transparent;color:#5d65b9}.button.-secondary.-outline:not(:disabled):not(.-disabled).-focused,.button.-secondary.-outline:not(:disabled):not(.-disabled).-hovered,.button.-secondary.-outline:not(:disabled):not(.-disabled):focus,.button.-secondary.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#535cb5;border-color:#535cb5}.button.-secondary.-outline:not(:disabled):not(.-disabled).-active,.button.-secondary.-outline:not(:disabled):not(.-disabled):active{background-color:#4952aa}.button.-secondary.-link{color:#5d65b9;background-color:transparent;border-color:transparent}.button.-secondary.-link:not(:disabled):not(.-disabled).-focused,.button.-secondary.-link:not(:disabled):not(.-disabled).-hovered,.button.-secondary.-link:not(:disabled):not(.-disabled):focus,.button.-secondary.-link:not(:disabled):not(.-disabled):hover{color:#535cb5;background-color:transparent;border-color:transparent}.button.-secondary ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-secondary.-disabled,.inkline.-dark .button.-secondary:disabled{opacity:.66}.button,.button.-light{color:#343a40;background-color:#e9ecef;border-color:#e9ecef}.-disabled.button,.button.-light.-disabled,.button.-light:disabled,.button:disabled{opacity:.75}.button.-light:not(:disabled):not(.-disabled).-hovered,.button.-light:not(:disabled):not(.-disabled):hover,.button:not(:disabled):not(.-disabled).-hovered,.button:not(:disabled):not(.-disabled):hover{background-color:#dbe0e5;border-color:#dbe0e5}.button.-light:not(:disabled):not(.-disabled).-active,.button.-light:not(:disabled):not(.-disabled):active,.button:not(:disabled):not(.-disabled).-active,.button:not(:disabled):not(.-disabled):active{background-color:#c7cfd6}.button.-light:not(:disabled):not(.-disabled).-focused,.button.-light:not(:disabled):not(.-disabled):focus,.button:not(:disabled):not(.-disabled).-focused,.button:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(233,236,239,.25)}.-outline.button,.button.-light.-outline{background-color:transparent;color:#e9ecef}.-outline.button:not(:disabled):not(.-disabled).-focused,.-outline.button:not(:disabled):not(.-disabled).-hovered,.-outline.button:not(:disabled):not(.-disabled):focus,.-outline.button:not(:disabled):not(.-disabled):hover,.button.-light.-outline:not(:disabled):not(.-disabled).-focused,.button.-light.-outline:not(:disabled):not(.-disabled).-hovered,.button.-light.-outline:not(:disabled):not(.-disabled):focus,.button.-light.-outline:not(:disabled):not(.-disabled):hover{color:#343a40;background-color:#dbe0e5;border-color:#dbe0e5}.-outline.button:not(:disabled):not(.-disabled).-active,.-outline.button:not(:disabled):not(.-disabled):active,.button.-light.-outline:not(:disabled):not(.-disabled).-active,.button.-light.-outline:not(:disabled):not(.-disabled):active{background-color:#c7cfd6}.-link.button,.button.-light.-link{color:#e9ecef;background-color:transparent;border-color:transparent}.-link.button:not(:disabled):not(.-disabled).-focused,.-link.button:not(:disabled):not(.-disabled).-hovered,.-link.button:not(:disabled):not(.-disabled):focus,.-link.button:not(:disabled):not(.-disabled):hover,.button.-light.-link:not(:disabled):not(.-disabled).-focused,.button.-light.-link:not(:disabled):not(.-disabled).-hovered,.button.-light.-link:not(:disabled):not(.-disabled):focus,.button.-light.-link:not(:disabled):not(.-disabled):hover{color:#dbe0e5;background-color:transparent;border-color:transparent}.button.-light ::v-deep .loader>.loader-item,.button ::v-deep .loader>.loader-item{background-color:#343a40!important}.inkline.-dark .-disabled.button,.inkline.-dark .button.-light.-disabled,.inkline.-dark .button.-light:disabled,.inkline.-dark .button:disabled{opacity:.66}.button.-dark{color:#fff;background-color:#343a40;border-color:#343a40}.button.-dark.-disabled,.button.-dark:disabled{opacity:.75}.button.-dark:not(:disabled):not(.-disabled).-hovered,.button.-dark:not(:disabled):not(.-disabled):hover{background-color:#31373d;border-color:#31373d}.button.-dark:not(:disabled):not(.-disabled).-active,.button.-dark:not(:disabled):not(.-disabled):active{background-color:#2e3338}.button.-dark:not(:disabled):not(.-disabled).-focused,.button.-dark:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(52,58,64,.25)}.button.-dark.-outline{background-color:transparent;color:#343a40}.button.-dark.-outline:not(:disabled):not(.-disabled).-focused,.button.-dark.-outline:not(:disabled):not(.-disabled).-hovered,.button.-dark.-outline:not(:disabled):not(.-disabled):focus,.button.-dark.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#31373d;border-color:#31373d}.button.-dark.-outline:not(:disabled):not(.-disabled).-active,.button.-dark.-outline:not(:disabled):not(.-disabled):active{background-color:#2e3338}.button.-dark.-link{color:#343a40;background-color:transparent;border-color:transparent}.button.-dark.-link:not(:disabled):not(.-disabled).-focused,.button.-dark.-link:not(:disabled):not(.-disabled).-hovered,.button.-dark.-link:not(:disabled):not(.-disabled):focus,.button.-dark.-link:not(:disabled):not(.-disabled):hover{color:#31373d;background-color:transparent;border-color:transparent}.button.-dark ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-dark.-disabled,.inkline.-dark .button.-dark:disabled{opacity:.66}.button.-success{color:#fff;background-color:#5fb072;border-color:#5fb072}.button.-success.-disabled,.button.-success:disabled{opacity:.75}.button.-success:not(:disabled):not(.-disabled).-hovered,.button.-success:not(:disabled):not(.-disabled):hover{background-color:#56ac6a;border-color:#56ac6a}.button.-success:not(:disabled):not(.-disabled).-active,.button.-success:not(:disabled):not(.-disabled):active{background-color:#4e9f61}.button.-success:not(:disabled):not(.-disabled).-focused,.button.-success:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(95,176,114,.25)}.button.-success.-outline{background-color:transparent;color:#5fb072}.button.-success.-outline:not(:disabled):not(.-disabled).-focused,.button.-success.-outline:not(:disabled):not(.-disabled).-hovered,.button.-success.-outline:not(:disabled):not(.-disabled):focus,.button.-success.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#56ac6a;border-color:#56ac6a}.button.-success.-outline:not(:disabled):not(.-disabled).-active,.button.-success.-outline:not(:disabled):not(.-disabled):active{background-color:#4e9f61}.button.-success.-link{color:#5fb072;background-color:transparent;border-color:transparent}.button.-success.-link:not(:disabled):not(.-disabled).-focused,.button.-success.-link:not(:disabled):not(.-disabled).-hovered,.button.-success.-link:not(:disabled):not(.-disabled):focus,.button.-success.-link:not(:disabled):not(.-disabled):hover{color:#56ac6a;background-color:transparent;border-color:transparent}.button.-success ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-success.-disabled,.inkline.-dark .button.-success:disabled{opacity:.66}.button.-danger{color:#fff;background-color:#f25f5c;border-color:#f25f5c}.button.-danger.-disabled,.button.-danger:disabled{opacity:.75}.button.-danger:not(:disabled):not(.-disabled).-hovered,.button.-danger:not(:disabled):not(.-disabled):hover{background-color:#f1504d;border-color:#f1504d}.button.-danger:not(:disabled):not(.-disabled).-active,.button.-danger:not(:disabled):not(.-disabled):active{background-color:#ef3935}.button.-danger:not(:disabled):not(.-disabled).-focused,.button.-danger:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(242,95,92,.25)}.button.-danger.-outline{background-color:transparent;color:#f25f5c}.button.-danger.-outline:not(:disabled):not(.-disabled).-focused,.button.-danger.-outline:not(:disabled):not(.-disabled).-hovered,.button.-danger.-outline:not(:disabled):not(.-disabled):focus,.button.-danger.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#f1504d;border-color:#f1504d}.button.-danger.-outline:not(:disabled):not(.-disabled).-active,.button.-danger.-outline:not(:disabled):not(.-disabled):active{background-color:#ef3935}.button.-danger.-link{color:#f25f5c;background-color:transparent;border-color:transparent}.button.-danger.-link:not(:disabled):not(.-disabled).-focused,.button.-danger.-link:not(:disabled):not(.-disabled).-hovered,.button.-danger.-link:not(:disabled):not(.-disabled):focus,.button.-danger.-link:not(:disabled):not(.-disabled):hover{color:#f1504d;background-color:transparent;border-color:transparent}.button.-danger ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-danger.-disabled,.inkline.-dark .button.-danger:disabled{opacity:.66}.button.-warning{color:#fff;background-color:#f1ac53;border-color:#f1ac53}.button.-warning.-disabled,.button.-warning:disabled{opacity:.75}.button.-warning:not(:disabled):not(.-disabled).-hovered,.button.-warning:not(:disabled):not(.-disabled):hover{background-color:#f0a544;border-color:#f0a544}.button.-warning:not(:disabled):not(.-disabled).-active,.button.-warning:not(:disabled):not(.-disabled):active{background-color:#ee9a2e}.button.-warning:not(:disabled):not(.-disabled).-focused,.button.-warning:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(241,172,83,.25)}.button.-warning.-outline{background-color:transparent;color:#f1ac53}.button.-warning.-outline:not(:disabled):not(.-disabled).-focused,.button.-warning.-outline:not(:disabled):not(.-disabled).-hovered,.button.-warning.-outline:not(:disabled):not(.-disabled):focus,.button.-warning.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#f0a544;border-color:#f0a544}.button.-warning.-outline:not(:disabled):not(.-disabled).-active,.button.-warning.-outline:not(:disabled):not(.-disabled):active{background-color:#ee9a2e}.button.-warning.-link{color:#f1ac53;background-color:transparent;border-color:transparent}.button.-warning.-link:not(:disabled):not(.-disabled).-focused,.button.-warning.-link:not(:disabled):not(.-disabled).-hovered,.button.-warning.-link:not(:disabled):not(.-disabled):focus,.button.-warning.-link:not(:disabled):not(.-disabled):hover{color:#f0a544;background-color:transparent;border-color:transparent}.button.-warning ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-warning.-disabled,.inkline.-dark .button.-warning:disabled{opacity:.66}.button.-info{color:#fff;background-color:#62bec1;border-color:#62bec1}.button.-info.-disabled,.button.-info:disabled{opacity:.75}.button.-info:not(:disabled):not(.-disabled).-hovered,.button.-info:not(:disabled):not(.-disabled):hover{background-color:#58babd;border-color:#58babd}.button.-info:not(:disabled):not(.-disabled).-active,.button.-info:not(:disabled):not(.-disabled):active{background-color:#48b3b7}.button.-info:not(:disabled):not(.-disabled).-focused,.button.-info:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(98,190,193,.25)}.button.-info.-outline{background-color:transparent;color:#62bec1}.button.-info.-outline:not(:disabled):not(.-disabled).-focused,.button.-info.-outline:not(:disabled):not(.-disabled).-hovered,.button.-info.-outline:not(:disabled):not(.-disabled):focus,.button.-info.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#58babd;border-color:#58babd}.button.-info.-outline:not(:disabled):not(.-disabled).-active,.button.-info.-outline:not(:disabled):not(.-disabled):active{background-color:#48b3b7}.button.-info.-link{color:#62bec1;background-color:transparent;border-color:transparent}.button.-info.-link:not(:disabled):not(.-disabled).-focused,.button.-info.-link:not(:disabled):not(.-disabled).-hovered,.button.-info.-link:not(:disabled):not(.-disabled):focus,.button.-info.-link:not(:disabled):not(.-disabled):hover{color:#58babd;background-color:transparent;border-color:transparent}.button.-info ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-info.-disabled,.inkline.-dark .button.-info:disabled{opacity:.66}.button.-facebook{color:#fff;background-color:#3b5998;border-color:#3b5998}.button.-facebook.-disabled,.button.-facebook:disabled{opacity:.75}.button.-facebook:not(:disabled):not(.-disabled).-hovered,.button.-facebook:not(:disabled):not(.-disabled):hover{background-color:#385590;border-color:#385590}.button.-facebook:not(:disabled):not(.-disabled).-active,.button.-facebook:not(:disabled):not(.-disabled):active{background-color:#344e85}.button.-facebook:not(:disabled):not(.-disabled).-focused,.button.-facebook:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(59,89,152,.25)}.button.-facebook.-outline{background-color:transparent;color:#3b5998}.button.-facebook.-outline:not(:disabled):not(.-disabled).-focused,.button.-facebook.-outline:not(:disabled):not(.-disabled).-hovered,.button.-facebook.-outline:not(:disabled):not(.-disabled):focus,.button.-facebook.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#385590;border-color:#385590}.button.-facebook.-outline:not(:disabled):not(.-disabled).-active,.button.-facebook.-outline:not(:disabled):not(.-disabled):active{background-color:#344e85}.button.-facebook.-link{color:#3b5998;background-color:transparent;border-color:transparent}.button.-facebook.-link:not(:disabled):not(.-disabled).-focused,.button.-facebook.-link:not(:disabled):not(.-disabled).-hovered,.button.-facebook.-link:not(:disabled):not(.-disabled):focus,.button.-facebook.-link:not(:disabled):not(.-disabled):hover{color:#385590;background-color:transparent;border-color:transparent}.button.-facebook ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-facebook.-disabled,.inkline.-dark .button.-facebook:disabled{opacity:.66}.button.-twitter{color:#fff;background-color:#1da1f2;border-color:#1da1f2}.button.-twitter.-disabled,.button.-twitter:disabled{opacity:.75}.button.-twitter:not(:disabled):not(.-disabled).-hovered,.button.-twitter:not(:disabled):not(.-disabled):hover{background-color:#109cf1;border-color:#109cf1}.button.-twitter:not(:disabled):not(.-disabled).-active,.button.-twitter:not(:disabled):not(.-disabled):active{background-color:#0d90e0}.button.-twitter:not(:disabled):not(.-disabled).-focused,.button.-twitter:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(29,161,242,.25)}.button.-twitter.-outline{background-color:transparent;color:#1da1f2}.button.-twitter.-outline:not(:disabled):not(.-disabled).-focused,.button.-twitter.-outline:not(:disabled):not(.-disabled).-hovered,.button.-twitter.-outline:not(:disabled):not(.-disabled):focus,.button.-twitter.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#109cf1;border-color:#109cf1}.button.-twitter.-outline:not(:disabled):not(.-disabled).-active,.button.-twitter.-outline:not(:disabled):not(.-disabled):active{background-color:#0d90e0}.button.-twitter.-link{color:#1da1f2;background-color:transparent;border-color:transparent}.button.-twitter.-link:not(:disabled):not(.-disabled).-focused,.button.-twitter.-link:not(:disabled):not(.-disabled).-hovered,.button.-twitter.-link:not(:disabled):not(.-disabled):focus,.button.-twitter.-link:not(:disabled):not(.-disabled):hover{color:#109cf1;background-color:transparent;border-color:transparent}.button.-twitter ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-twitter.-disabled,.inkline.-dark .button.-twitter:disabled{opacity:.66}.button.-google{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.button.-google.-disabled,.button.-google:disabled{opacity:.75}.button.-google:not(:disabled):not(.-disabled).-hovered,.button.-google:not(:disabled):not(.-disabled):hover{background-color:#db402d;border-color:#db402d}.button.-google:not(:disabled):not(.-disabled).-active,.button.-google:not(:disabled):not(.-disabled):active{background-color:#d03724}.button.-google:not(:disabled):not(.-disabled).-focused,.button.-google:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(221,75,57,.25)}.button.-google.-outline{background-color:transparent;color:#dd4b39}.button.-google.-outline:not(:disabled):not(.-disabled).-focused,.button.-google.-outline:not(:disabled):not(.-disabled).-hovered,.button.-google.-outline:not(:disabled):not(.-disabled):focus,.button.-google.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#db402d;border-color:#db402d}.button.-google.-outline:not(:disabled):not(.-disabled).-active,.button.-google.-outline:not(:disabled):not(.-disabled):active{background-color:#d03724}.button.-google.-link{color:#dd4b39;background-color:transparent;border-color:transparent}.button.-google.-link:not(:disabled):not(.-disabled).-focused,.button.-google.-link:not(:disabled):not(.-disabled).-hovered,.button.-google.-link:not(:disabled):not(.-disabled):focus,.button.-google.-link:not(:disabled):not(.-disabled):hover{color:#db402d;background-color:transparent;border-color:transparent}.button.-google ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-google.-disabled,.inkline.-dark .button.-google:disabled{opacity:.66}.button.-instagram{color:#fff;background-color:#fd1d1d;border-color:#fd1d1d}.button.-instagram.-disabled,.button.-instagram:disabled{opacity:.75}.button.-instagram:not(:disabled):not(.-disabled).-hovered,.button.-instagram:not(:disabled):not(.-disabled):hover{background-color:#fd0f0f;border-color:#fd0f0f}.button.-instagram:not(:disabled):not(.-disabled).-active,.button.-instagram:not(:disabled):not(.-disabled):active{background-color:#f50202}.button.-instagram:not(:disabled):not(.-disabled).-focused,.button.-instagram:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(253,29,29,.25)}.button.-instagram.-outline{background-color:transparent;color:#fd1d1d}.button.-instagram.-outline:not(:disabled):not(.-disabled).-focused,.button.-instagram.-outline:not(:disabled):not(.-disabled).-hovered,.button.-instagram.-outline:not(:disabled):not(.-disabled):focus,.button.-instagram.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#fd0f0f;border-color:#fd0f0f}.button.-instagram.-outline:not(:disabled):not(.-disabled).-active,.button.-instagram.-outline:not(:disabled):not(.-disabled):active{background-color:#f50202}.button.-instagram.-link{color:#fd1d1d;background-color:transparent;border-color:transparent}.button.-instagram.-link:not(:disabled):not(.-disabled).-focused,.button.-instagram.-link:not(:disabled):not(.-disabled).-hovered,.button.-instagram.-link:not(:disabled):not(.-disabled):focus,.button.-instagram.-link:not(:disabled):not(.-disabled):hover{color:#fd0f0f;background-color:transparent;border-color:transparent}.button.-instagram ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-instagram.-disabled,.inkline.-dark .button.-instagram:disabled{opacity:.66}.button.-dribbble{color:#fff;background-color:#ea4c89;border-color:#ea4c89}.button.-dribbble.-disabled,.button.-dribbble:disabled{opacity:.75}.button.-dribbble:not(:disabled):not(.-disabled).-hovered,.button.-dribbble:not(:disabled):not(.-disabled):hover{background-color:#e83e80;border-color:#e83e80}.button.-dribbble:not(:disabled):not(.-disabled).-active,.button.-dribbble:not(:disabled):not(.-disabled):active{background-color:#e62972}.button.-dribbble:not(:disabled):not(.-disabled).-focused,.button.-dribbble:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(234,76,137,.25)}.button.-dribbble.-outline{background-color:transparent;color:#ea4c89}.button.-dribbble.-outline:not(:disabled):not(.-disabled).-focused,.button.-dribbble.-outline:not(:disabled):not(.-disabled).-hovered,.button.-dribbble.-outline:not(:disabled):not(.-disabled):focus,.button.-dribbble.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#e83e80;border-color:#e83e80}.button.-dribbble.-outline:not(:disabled):not(.-disabled).-active,.button.-dribbble.-outline:not(:disabled):not(.-disabled):active{background-color:#e62972}.button.-dribbble.-link{color:#ea4c89;background-color:transparent;border-color:transparent}.button.-dribbble.-link:not(:disabled):not(.-disabled).-focused,.button.-dribbble.-link:not(:disabled):not(.-disabled).-hovered,.button.-dribbble.-link:not(:disabled):not(.-disabled):focus,.button.-dribbble.-link:not(:disabled):not(.-disabled):hover{color:#e83e80;background-color:transparent;border-color:transparent}.button.-dribbble ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-dribbble.-disabled,.inkline.-dark .button.-dribbble:disabled{opacity:.66}.button.-behance{color:#fff;background-color:#1769ff;border-color:#1769ff}.button.-behance.-disabled,.button.-behance:disabled{opacity:.75}.button.-behance:not(:disabled):not(.-disabled).-hovered,.button.-behance:not(:disabled):not(.-disabled):hover{background-color:#0960ff;border-color:#0960ff}.button.-behance:not(:disabled):not(.-disabled).-active,.button.-behance:not(:disabled):not(.-disabled):active{background-color:#0056f3}.button.-behance:not(:disabled):not(.-disabled).-focused,.button.-behance:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(23,105,255,.25)}.button.-behance.-outline{background-color:transparent;color:#1769ff}.button.-behance.-outline:not(:disabled):not(.-disabled).-focused,.button.-behance.-outline:not(:disabled):not(.-disabled).-hovered,.button.-behance.-outline:not(:disabled):not(.-disabled):focus,.button.-behance.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#0960ff;border-color:#0960ff}.button.-behance.-outline:not(:disabled):not(.-disabled).-active,.button.-behance.-outline:not(:disabled):not(.-disabled):active{background-color:#0056f3}.button.-behance.-link{color:#1769ff;background-color:transparent;border-color:transparent}.button.-behance.-link:not(:disabled):not(.-disabled).-focused,.button.-behance.-link:not(:disabled):not(.-disabled).-hovered,.button.-behance.-link:not(:disabled):not(.-disabled):focus,.button.-behance.-link:not(:disabled):not(.-disabled):hover{color:#0960ff;background-color:transparent;border-color:transparent}.button.-behance ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-behance.-disabled,.inkline.-dark .button.-behance:disabled{opacity:.66}.button.-flickr{color:#fff;background-color:#ff0084;border-color:#ff0084}.button.-flickr.-disabled,.button.-flickr:disabled{opacity:.75}.button.-flickr:not(:disabled):not(.-disabled).-hovered,.button.-flickr:not(:disabled):not(.-disabled):hover{background-color:#f2007d;border-color:#f2007d}.button.-flickr:not(:disabled):not(.-disabled).-active,.button.-flickr:not(:disabled):not(.-disabled):active{background-color:#df0074}.button.-flickr:not(:disabled):not(.-disabled).-focused,.button.-flickr:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(255,0,132,.25)}.button.-flickr.-outline{background-color:transparent;color:#ff0084}.button.-flickr.-outline:not(:disabled):not(.-disabled).-focused,.button.-flickr.-outline:not(:disabled):not(.-disabled).-hovered,.button.-flickr.-outline:not(:disabled):not(.-disabled):focus,.button.-flickr.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#f2007d;border-color:#f2007d}.button.-flickr.-outline:not(:disabled):not(.-disabled).-active,.button.-flickr.-outline:not(:disabled):not(.-disabled):active{background-color:#df0074}.button.-flickr.-link{color:#ff0084;background-color:transparent;border-color:transparent}.button.-flickr.-link:not(:disabled):not(.-disabled).-focused,.button.-flickr.-link:not(:disabled):not(.-disabled).-hovered,.button.-flickr.-link:not(:disabled):not(.-disabled):focus,.button.-flickr.-link:not(:disabled):not(.-disabled):hover{color:#f2007d;background-color:transparent;border-color:transparent}.button.-flickr ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-flickr.-disabled,.inkline.-dark .button.-flickr:disabled{opacity:.66}.button.-linkedin{color:#fff;background-color:#0077b5;border-color:#0077b5}.button.-linkedin.-disabled,.button.-linkedin:disabled{opacity:.75}.button.-linkedin:not(:disabled):not(.-disabled).-hovered,.button.-linkedin:not(:disabled):not(.-disabled):hover{background-color:#0071ac;border-color:#0071ac}.button.-linkedin:not(:disabled):not(.-disabled).-active,.button.-linkedin:not(:disabled):not(.-disabled):active{background-color:#00689e}.button.-linkedin:not(:disabled):not(.-disabled).-focused,.button.-linkedin:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(0,119,181,.25)}.button.-linkedin.-outline{background-color:transparent;color:#0077b5}.button.-linkedin.-outline:not(:disabled):not(.-disabled).-focused,.button.-linkedin.-outline:not(:disabled):not(.-disabled).-hovered,.button.-linkedin.-outline:not(:disabled):not(.-disabled):focus,.button.-linkedin.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#0071ac;border-color:#0071ac}.button.-linkedin.-outline:not(:disabled):not(.-disabled).-active,.button.-linkedin.-outline:not(:disabled):not(.-disabled):active{background-color:#00689e}.button.-linkedin.-link{color:#0077b5;background-color:transparent;border-color:transparent}.button.-linkedin.-link:not(:disabled):not(.-disabled).-focused,.button.-linkedin.-link:not(:disabled):not(.-disabled).-hovered,.button.-linkedin.-link:not(:disabled):not(.-disabled):focus,.button.-linkedin.-link:not(:disabled):not(.-disabled):hover{color:#0071ac;background-color:transparent;border-color:transparent}.button.-linkedin ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-linkedin.-disabled,.inkline.-dark .button.-linkedin:disabled{opacity:.66}.button.-youtube{color:#fff;background-color:#b31217;border-color:#b31217}.button.-youtube.-disabled,.button.-youtube:disabled{opacity:.75}.button.-youtube:not(:disabled):not(.-disabled).-hovered,.button.-youtube:not(:disabled):not(.-disabled):hover{background-color:#aa1116;border-color:#aa1116}.button.-youtube:not(:disabled):not(.-disabled).-active,.button.-youtube:not(:disabled):not(.-disabled):active{background-color:#9d1014}.button.-youtube:not(:disabled):not(.-disabled).-focused,.button.-youtube:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(179,18,23,.25)}.button.-youtube.-outline{background-color:transparent;color:#b31217}.button.-youtube.-outline:not(:disabled):not(.-disabled).-focused,.button.-youtube.-outline:not(:disabled):not(.-disabled).-hovered,.button.-youtube.-outline:not(:disabled):not(.-disabled):focus,.button.-youtube.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#aa1116;border-color:#aa1116}.button.-youtube.-outline:not(:disabled):not(.-disabled).-active,.button.-youtube.-outline:not(:disabled):not(.-disabled):active{background-color:#9d1014}.button.-youtube.-link{color:#b31217;background-color:transparent;border-color:transparent}.button.-youtube.-link:not(:disabled):not(.-disabled).-focused,.button.-youtube.-link:not(:disabled):not(.-disabled).-hovered,.button.-youtube.-link:not(:disabled):not(.-disabled):focus,.button.-youtube.-link:not(:disabled):not(.-disabled):hover{color:#aa1116;background-color:transparent;border-color:transparent}.button.-youtube ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-youtube.-disabled,.inkline.-dark .button.-youtube:disabled{opacity:.66}.button.-pinterest{color:#fff;background-color:#bd081c;border-color:#bd081c}.button.-pinterest.-disabled,.button.-pinterest:disabled{opacity:.75}.button.-pinterest:not(:disabled):not(.-disabled).-hovered,.button.-pinterest:not(:disabled):not(.-disabled):hover{background-color:#b4081b;border-color:#b4081b}.button.-pinterest:not(:disabled):not(.-disabled).-active,.button.-pinterest:not(:disabled):not(.-disabled):active{background-color:#a50719}.button.-pinterest:not(:disabled):not(.-disabled).-focused,.button.-pinterest:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(189,8,28,.25)}.button.-pinterest.-outline{background-color:transparent;color:#bd081c}.button.-pinterest.-outline:not(:disabled):not(.-disabled).-focused,.button.-pinterest.-outline:not(:disabled):not(.-disabled).-hovered,.button.-pinterest.-outline:not(:disabled):not(.-disabled):focus,.button.-pinterest.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#b4081b;border-color:#b4081b}.button.-pinterest.-outline:not(:disabled):not(.-disabled).-active,.button.-pinterest.-outline:not(:disabled):not(.-disabled):active{background-color:#a50719}.button.-pinterest.-link{color:#bd081c;background-color:transparent;border-color:transparent}.button.-pinterest.-link:not(:disabled):not(.-disabled).-focused,.button.-pinterest.-link:not(:disabled):not(.-disabled).-hovered,.button.-pinterest.-link:not(:disabled):not(.-disabled):focus,.button.-pinterest.-link:not(:disabled):not(.-disabled):hover{color:#b4081b;background-color:transparent;border-color:transparent}.button.-pinterest ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-pinterest.-disabled,.inkline.-dark .button.-pinterest:disabled{opacity:.66}.button.-github{color:#fff;background-color:#333;border-color:#333}.button.-github.-disabled,.button.-github:disabled{opacity:.75}.button.-github:not(:disabled):not(.-disabled).-hovered,.button.-github:not(:disabled):not(.-disabled):hover{background-color:#303030;border-color:#303030}.button.-github:not(:disabled):not(.-disabled).-active,.button.-github:not(:disabled):not(.-disabled):active{background-color:#2d2d2d}.button.-github:not(:disabled):not(.-disabled).-focused,.button.-github:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(51,51,51,.25)}.button.-github.-outline{background-color:transparent;color:#333}.button.-github.-outline:not(:disabled):not(.-disabled).-focused,.button.-github.-outline:not(:disabled):not(.-disabled).-hovered,.button.-github.-outline:not(:disabled):not(.-disabled):focus,.button.-github.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#303030;border-color:#303030}.button.-github.-outline:not(:disabled):not(.-disabled).-active,.button.-github.-outline:not(:disabled):not(.-disabled):active{background-color:#2d2d2d}.button.-github.-link{color:#333;background-color:transparent;border-color:transparent}.button.-github.-link:not(:disabled):not(.-disabled).-focused,.button.-github.-link:not(:disabled):not(.-disabled).-hovered,.button.-github.-link:not(:disabled):not(.-disabled):focus,.button.-github.-link:not(:disabled):not(.-disabled):hover{color:#303030;background-color:transparent;border-color:transparent}.button.-github ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-github.-disabled,.inkline.-dark .button.-github:disabled{opacity:.66}.button.-tumblr{color:#fff;background-color:#35465c;border-color:#35465c}.button.-tumblr.-disabled,.button.-tumblr:disabled{opacity:.75}.button.-tumblr:not(:disabled):not(.-disabled).-hovered,.button.-tumblr:not(:disabled):not(.-disabled):hover{background-color:#324357;border-color:#324357}.button.-tumblr:not(:disabled):not(.-disabled).-active,.button.-tumblr:not(:disabled):not(.-disabled):active{background-color:#2e3d51}.button.-tumblr:not(:disabled):not(.-disabled).-focused,.button.-tumblr:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(53,70,92,.25)}.button.-tumblr.-outline{background-color:transparent;color:#35465c}.button.-tumblr.-outline:not(:disabled):not(.-disabled).-focused,.button.-tumblr.-outline:not(:disabled):not(.-disabled).-hovered,.button.-tumblr.-outline:not(:disabled):not(.-disabled):focus,.button.-tumblr.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#324357;border-color:#324357}.button.-tumblr.-outline:not(:disabled):not(.-disabled).-active,.button.-tumblr.-outline:not(:disabled):not(.-disabled):active{background-color:#2e3d51}.button.-tumblr.-link{color:#35465c;background-color:transparent;border-color:transparent}.button.-tumblr.-link:not(:disabled):not(.-disabled).-focused,.button.-tumblr.-link:not(:disabled):not(.-disabled).-hovered,.button.-tumblr.-link:not(:disabled):not(.-disabled):focus,.button.-tumblr.-link:not(:disabled):not(.-disabled):hover{color:#324357;background-color:transparent;border-color:transparent}.button.-tumblr ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-tumblr.-disabled,.inkline.-dark .button.-tumblr:disabled{opacity:.66}.button.-twitch{color:#fff;background-color:#6441a5;border-color:#6441a5}.button.-twitch.-disabled,.button.-twitch:disabled{opacity:.75}.button.-twitch:not(:disabled):not(.-disabled).-hovered,.button.-twitch:not(:disabled):not(.-disabled):hover{background-color:#5f3e9d;border-color:#5f3e9d}.button.-twitch:not(:disabled):not(.-disabled).-active,.button.-twitch:not(:disabled):not(.-disabled):active{background-color:#583990}.button.-twitch:not(:disabled):not(.-disabled).-focused,.button.-twitch:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(100,65,165,.25)}.button.-twitch.-outline{background-color:transparent;color:#6441a5}.button.-twitch.-outline:not(:disabled):not(.-disabled).-focused,.button.-twitch.-outline:not(:disabled):not(.-disabled).-hovered,.button.-twitch.-outline:not(:disabled):not(.-disabled):focus,.button.-twitch.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#5f3e9d;border-color:#5f3e9d}.button.-twitch.-outline:not(:disabled):not(.-disabled).-active,.button.-twitch.-outline:not(:disabled):not(.-disabled):active{background-color:#583990}.button.-twitch.-link{color:#6441a5;background-color:transparent;border-color:transparent}.button.-twitch.-link:not(:disabled):not(.-disabled).-focused,.button.-twitch.-link:not(:disabled):not(.-disabled).-hovered,.button.-twitch.-link:not(:disabled):not(.-disabled):focus,.button.-twitch.-link:not(:disabled):not(.-disabled):hover{color:#5f3e9d;background-color:transparent;border-color:transparent}.button.-twitch ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-twitch.-disabled,.inkline.-dark .button.-twitch:disabled{opacity:.66}.button.-envato{color:#fff;background-color:#82b541;border-color:#82b541}.button.-envato.-disabled,.button.-envato:disabled{opacity:.75}.button.-envato:not(:disabled):not(.-disabled).-hovered,.button.-envato:not(:disabled):not(.-disabled):hover{background-color:#7cac3e;border-color:#7cac3e}.button.-envato:not(:disabled):not(.-disabled).-active,.button.-envato:not(:disabled):not(.-disabled):active{background-color:#729e39}.button.-envato:not(:disabled):not(.-disabled).-focused,.button.-envato:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(130,181,65,.25)}.button.-envato.-outline{background-color:transparent;color:#82b541}.button.-envato.-outline:not(:disabled):not(.-disabled).-focused,.button.-envato.-outline:not(:disabled):not(.-disabled).-hovered,.button.-envato.-outline:not(:disabled):not(.-disabled):focus,.button.-envato.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#7cac3e;border-color:#7cac3e}.button.-envato.-outline:not(:disabled):not(.-disabled).-active,.button.-envato.-outline:not(:disabled):not(.-disabled):active{background-color:#729e39}.button.-envato.-link{color:#82b541;background-color:transparent;border-color:transparent}.button.-envato.-link:not(:disabled):not(.-disabled).-focused,.button.-envato.-link:not(:disabled):not(.-disabled).-hovered,.button.-envato.-link:not(:disabled):not(.-disabled):focus,.button.-envato.-link:not(:disabled):not(.-disabled):hover{color:#7cac3e;background-color:transparent;border-color:transparent}.button.-envato ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-envato.-disabled,.inkline.-dark .button.-envato:disabled{opacity:.66}.button.-vine{color:#fff;background-color:#00bf8f;border-color:#00bf8f}.button.-vine.-disabled,.button.-vine:disabled{opacity:.75}.button.-vine:not(:disabled):not(.-disabled).-hovered,.button.-vine:not(:disabled):not(.-disabled):hover{background-color:#00b588;border-color:#00b588}.button.-vine:not(:disabled):not(.-disabled).-active,.button.-vine:not(:disabled):not(.-disabled):active{background-color:#00a77d}.button.-vine:not(:disabled):not(.-disabled).-focused,.button.-vine:not(:disabled):not(.-disabled):focus{box-shadow:0 0 0 2px rgba(0,191,143,.25)}.button.-vine.-outline{background-color:transparent;color:#00bf8f}.button.-vine.-outline:not(:disabled):not(.-disabled).-focused,.button.-vine.-outline:not(:disabled):not(.-disabled).-hovered,.button.-vine.-outline:not(:disabled):not(.-disabled):focus,.button.-vine.-outline:not(:disabled):not(.-disabled):hover{color:#fff;background-color:#00b588;border-color:#00b588}.button.-vine.-outline:not(:disabled):not(.-disabled).-active,.button.-vine.-outline:not(:disabled):not(.-disabled):active{background-color:#00a77d}.button.-vine.-link{color:#00bf8f;background-color:transparent;border-color:transparent}.button.-vine.-link:not(:disabled):not(.-disabled).-focused,.button.-vine.-link:not(:disabled):not(.-disabled).-hovered,.button.-vine.-link:not(:disabled):not(.-disabled):focus,.button.-vine.-link:not(:disabled):not(.-disabled):hover{color:#00b588;background-color:transparent;border-color:transparent}.button.-vine ::v-deep .loader>.loader-item{background-color:#fff!important}.inkline.-dark .button.-vine.-disabled,.inkline.-dark .button.-vine:disabled{opacity:.66}.button.-sm,.form-group.-sm>.button,.form.-sm>.button,.form.-sm>.form-group>.button{border-radius:.2rem;font-size:.88rem;padding:.4rem 1.6rem}.button.-sm.-circle,.form-group.-sm>.button.-circle,.form.-sm>.button.-circle,.form.-sm>.form-group>.button.-circle{border-radius:100%;width:2.16rem;height:2.16rem;padding:0}.button.-sm>.loader.-auto,.form-group.-sm>.button>.loader.-auto,.form.-sm>.button>.loader.-auto,.form.-sm>.form-group>.button>.loader.-auto{margin:.22rem 0;width:.88rem;height:.88rem}.button,.button.-md,.form-group.-md>.button,.form-group>.button,.form.-md>.button,.form.-md>.form-group>.button{border-radius:.25rem;font-size:1.1rem;padding:.5rem 2rem}.-circle.button,.button.-md.-circle,.form-group.-md>.button.-circle,.form-group>.button.-circle,.form.-md>.button.-circle,.form.-md>.form-group>.button.-circle{border-radius:100%;width:2.7rem;height:2.7rem;padding:0}.button.-md>.loader.-auto,.button>.loader.-auto,.form-group.-md>.button>.loader.-auto,.form-group>.button>.loader.-auto,.form.-md>.button>.loader.-auto,.form.-md>.form-group>.button>.loader.-auto{margin:.275rem 0;width:1.1rem;height:1.1rem}.button.-lg,.form-group.-lg>.button,.form.-lg>.button,.form.-lg>.form-group>.button{border-radius:.3rem;font-size:1.32rem;padding:.6rem 2.4rem}.button.-lg.-circle,.form-group.-lg>.button.-circle,.form.-lg>.button.-circle,.form.-lg>.form-group>.button.-circle{border-radius:100%;width:3.24rem;height:3.24rem;padding:0}.button.-lg>.loader.-auto,.form-group.-lg>.button>.loader.-auto,.form.-lg>.button>.loader.-auto,.form.-lg>.form-group>.button>.loader.-auto{margin:.33rem 0;width:1.32rem;height:1.32rem}.button{display:inline-flex;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;line-height:1.5;justify-content:center;align-items:center;transition:background-color .21s ease,border-color .21s ease,color .21s ease}.button:not(:disabled):not(.-disabled){cursor:pointer}.button:not(:disabled):not(.-disabled).-focused,.button:not(:disabled):not(.-disabled).-hovered,.button:not(:disabled):not(.-disabled):focus,.button:not(:disabled):not(.-disabled):hover{text-decoration:none;outline:0}.button.-disabled,.button:disabled{box-shadow:none}.button.-block{display:block;width:100%}.button.-block+.button.-block{margin-left:0;margin-top:1rem}.button.-link{box-shadow:none}.button.-link:not(:disabled):not(.-disabled).-focused,.button.-link:not(:disabled):not(.-disabled).-hovered,.button.-link:not(:disabled):not(.-disabled):focus,.button.-link:not(:disabled):not(.-disabled):hover{box-shadow:none;text-decoration:underline}.button.-link.-disabled,.button.-link:disabled{pointer-events:none}.button.-outline{background-color:transparent}.button.-circle{border-radius:100%}.button.-transparent{background-color:transparent}.button.-flat{background-image:none}a.button.-disabled,fieldset:disabled a.button{pointer-events:none}input[type=button].-block,input[type=reset].-block,input[type=submit].-block{width:100%}.badge.-primary{color:#fff;background-color:#37598d}a:focus .badge.-primary,a:hover .badge.-primary{background-color:#32507f}.badge.-secondary{color:#fff;background-color:#5d65b9}a:focus .badge.-secondary,a:hover .badge.-secondary{background-color:#4b54af}.badge,.badge.-light{color:#343a40;background-color:#e9ecef}a:focus .badge,a:focus .badge.-light,a:hover .badge,a:hover .badge.-light{background-color:#ced4db}.badge.-dark{color:#fff;background-color:#343a40}a:focus .badge.-dark,a:hover .badge.-dark{background-color:#2f343a}.badge.-success{color:#fff;background-color:#5fb072}a:focus .badge.-success,a:hover .badge.-success{background-color:#51a364}.badge.-danger{color:#fff;background-color:#f25f5c}a:focus .badge.-danger,a:hover .badge.-danger{background-color:#f0413d}.badge.-warning{color:#fff;background-color:#f1ac53}a:focus .badge.-warning,a:hover .badge.-warning{background-color:#ef9e35}.badge.-info{color:#fff;background-color:#62bec1}a:focus .badge.-info,a:hover .badge.-info{background-color:#4db5b9}.badge.-sm{border-radius:.2rem;font-size:65%}.badge.-sm,.badge.-sm.-pill{padding:.4rem .53333rem}.badge,.badge.-md{border-radius:.25rem;font-size:75%}.-pill.badge,.badge,.badge.-md,.badge.-md.-pill{padding:.5rem .66667rem}.badge.-lg{border-radius:.3rem;font-size:85%}.badge.-lg,.badge.-lg.-pill{padding:.6rem .8rem}.badge{display:inline-block;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline}a:focus .badge,a:hover .badge{text-decoration:none}.button .badge{position:relative;top:-1px}.badge.-pill{border-radius:10rem}.container,.container.-fluid{margin-left:auto;margin-right:auto;box-sizing:border-box;width:100%}@media screen and (min-width:0){.container,.container.-fluid{padding-left:12px;padding-right:12px}}@media screen and (min-width:576px){.container,.container.-fluid{padding-left:13px;padding-right:13px}}@media screen and (min-width:768px){.container,.container.-fluid{padding-left:14px;padding-right:14px}}@media screen and (min-width:992px){.container,.container.-fluid{padding-left:15px;padding-right:15px}}@media screen and (min-width:1200px){.container,.container.-fluid{padding-left:16px;padding-right:16px}}@media screen and (min-width:0){.container{max-width:100%}}@media screen and (min-width:576px){.container{max-width:550px}}@media screen and (min-width:768px){.container{max-width:740px}}@media screen and (min-width:992px){.container{max-width:962px}}@media screen and (min-width:1200px){.container{max-width:1168px}}.container.-fluid{max-width:100%}.row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}@media screen and (min-width:0){.row{margin-left:-12px;margin-right:-12px}}@media screen and (min-width:576px){.row{margin-left:-13px;margin-right:-13px}}@media screen and (min-width:768px){.row{margin-left:-14px;margin-right:-14px}}@media screen and (min-width:992px){.row{margin-left:-15px;margin-right:-15px}}@media screen and (min-width:1200px){.row{margin-left:-16px;margin-right:-16px}}.row.-no-gutter{margin-left:0;margin-right:0}.row.-no-gutter>.column{padding-left:0;padding-right:0}.row.-no-collapse{flex-flow:row nowrap}@media screen and (min-width:0){.row.-start-xs{justify-content:flex-start;text-align:start}.row.-center-xs{justify-content:center;text-align:center}.row.-end-xs{justify-content:flex-end;text-align:end}.row.-top-xs{align-items:flex-start}.row.-middle-xs{align-items:center}.row.-bottom-xs{align-items:flex-end}.row.-around-xs{justify-content:space-around}.row.-between-xs{justify-content:space-between}.row.-reverse-xs{flex-direction:row-reverse}}@media screen and (min-width:576px){.row.-start-sm{justify-content:flex-start;text-align:start}.row.-center-sm{justify-content:center;text-align:center}.row.-end-sm{justify-content:flex-end;text-align:end}.row.-top-sm{align-items:flex-start}.row.-middle-sm{align-items:center}.row.-bottom-sm{align-items:flex-end}.row.-around-sm{justify-content:space-around}.row.-between-sm{justify-content:space-between}.row.-reverse-sm{flex-direction:row-reverse}}@media screen and (min-width:768px){.row.-start-md{justify-content:flex-start;text-align:start}.row.-center-md{justify-content:center;text-align:center}.row.-end-md{justify-content:flex-end;text-align:end}.row.-top-md{align-items:flex-start}.row.-middle-md{align-items:center}.row.-bottom-md{align-items:flex-end}.row.-around-md{justify-content:space-around}.row.-between-md{justify-content:space-between}.row.-reverse-md{flex-direction:row-reverse}}@media screen and (min-width:992px){.row.-start-lg{justify-content:flex-start;text-align:start}.row.-center-lg{justify-content:center;text-align:center}.row.-end-lg{justify-content:flex-end;text-align:end}.row.-top-lg{align-items:flex-start}.row.-middle-lg{align-items:center}.row.-bottom-lg{align-items:flex-end}.row.-around-lg{justify-content:space-around}.row.-between-lg{justify-content:space-between}.row.-reverse-lg{flex-direction:row-reverse}}@media screen and (min-width:1200px){.row.-start-xl{justify-content:flex-start;text-align:start}.row.-center-xl{justify-content:center;text-align:center}.row.-end-xl{justify-content:flex-end;text-align:end}.row.-top-xl{align-items:flex-start}.row.-middle-xl{align-items:center}.row.-bottom-xl{align-items:flex-end}.row.-around-xl{justify-content:space-around}.row.-between-xl{justify-content:space-between}.row.-reverse-xl{flex-direction:row-reverse}}.row.-start{justify-content:flex-start;text-align:start}.row.-center{justify-content:center;text-align:center}.row.-end{justify-content:flex-end;text-align:end}.row.-top{align-items:flex-start}.row.-middle{align-items:center}.row.-bottom{align-items:flex-end}.row.-around{justify-content:space-around}.row.-between{justify-content:space-between}.row.-reverse{flex-direction:row-reverse}.col,.column{flex-grow:1;flex-basis:0;max-width:100%;box-sizing:border-box;min-height:1px;position:relative}@media screen and (min-width:0){.col,.column{padding-left:12px;padding-right:12px}}@media screen and (min-width:576px){.col,.column{padding-left:13px;padding-right:13px}}@media screen and (min-width:768px){.col,.column{padding-left:14px;padding-right:14px}}@media screen and (min-width:992px){.col,.column{padding-left:15px;padding-right:15px}}@media screen and (min-width:1200px){.col,.column{padding-left:16px;padding-right:16px}}.col.-xs,.col.-xs-auto,.column.-xs,.column.-xs-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs,.column.-xs{flex-grow:1;flex-basis:0;max-width:100%}.col.-xs-auto,.column.-xs-auto{flex:1 0 auto;max-width:auto}.col.-first-xs,.column.-first-xs{order:-1}.col.-last-xs,.column.-last-xs{order:1}}.col.-xs-1,.column.-xs-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-1,.column.-xs-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-xs-1,.column.-offset-xs-1{margin-left:8.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-1,.column.-push-xs-1{left:8.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-1,.column.-pull-xs-1{right:8.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-2,.column.-xs-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-2,.column.-xs-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-xs-2,.column.-offset-xs-2{margin-left:16.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-2,.column.-push-xs-2{left:16.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-2,.column.-pull-xs-2{right:16.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-3,.column.-xs-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-3,.column.-xs-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-xs-3,.column.-offset-xs-3{margin-left:25%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-3,.column.-push-xs-3{left:25%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-3,.column.-pull-xs-3{right:25%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-4,.column.-xs-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-4,.column.-xs-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-xs-4,.column.-offset-xs-4{margin-left:33.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-4,.column.-push-xs-4{left:33.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-4,.column.-pull-xs-4{right:33.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-5,.column.-xs-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-5,.column.-xs-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-xs-5,.column.-offset-xs-5{margin-left:41.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-5,.column.-push-xs-5{left:41.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-5,.column.-pull-xs-5{right:41.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-6,.column.-xs-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-6,.column.-xs-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-xs-6,.column.-offset-xs-6{margin-left:50%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-6,.column.-push-xs-6{left:50%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-6,.column.-pull-xs-6{right:50%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-7,.column.-xs-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-7,.column.-xs-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-xs-7,.column.-offset-xs-7{margin-left:58.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-7,.column.-push-xs-7{left:58.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-7,.column.-pull-xs-7{right:58.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-8,.column.-xs-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-8,.column.-xs-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-xs-8,.column.-offset-xs-8{margin-left:66.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-8,.column.-push-xs-8{left:66.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-8,.column.-pull-xs-8{right:66.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-9,.column.-xs-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-9,.column.-xs-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-xs-9,.column.-offset-xs-9{margin-left:75%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-9,.column.-push-xs-9{left:75%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-9,.column.-pull-xs-9{right:75%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-10,.column.-xs-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-10,.column.-xs-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-xs-10,.column.-offset-xs-10{margin-left:83.33333%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-10,.column.-push-xs-10{left:83.33333%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-10,.column.-pull-xs-10{right:83.33333%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-11,.column.-xs-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-11,.column.-xs-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-xs-11,.column.-offset-xs-11{margin-left:91.66667%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-11,.column.-push-xs-11{left:91.66667%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-11,.column.-pull-xs-11{right:91.66667%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-xs-12,.column.-xs-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:0){.col.-xs-12,.column.-xs-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-xs-12,.column.-offset-xs-12{margin-left:100%}.col.-offset-xs-0,.column.-offset-xs-0{margin-left:0}.col.-push-xs-12,.column.-push-xs-12{left:100%}.col.-push-xs-0,.column.-push-xs-0{left:0}.col.-pull-xs-12,.column.-pull-xs-12{right:100%}.col.-pull-xs-0,.column.-pull-xs-0{right:0}}.col.-sm,.col.-sm-auto,.column.-sm,.column.-sm-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm,.column.-sm{flex-grow:1;flex-basis:0;max-width:100%}.col.-sm-auto,.column.-sm-auto{flex:1 0 auto;max-width:auto}.col.-first-sm,.column.-first-sm{order:-1}.col.-last-sm,.column.-last-sm{order:1}}.col.-sm-1,.column.-sm-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-1,.column.-sm-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-sm-1,.column.-offset-sm-1{margin-left:8.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-1,.column.-push-sm-1{left:8.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-1,.column.-pull-sm-1{right:8.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-2,.column.-sm-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-2,.column.-sm-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-sm-2,.column.-offset-sm-2{margin-left:16.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-2,.column.-push-sm-2{left:16.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-2,.column.-pull-sm-2{right:16.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-3,.column.-sm-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-3,.column.-sm-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-sm-3,.column.-offset-sm-3{margin-left:25%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-3,.column.-push-sm-3{left:25%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-3,.column.-pull-sm-3{right:25%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-4,.column.-sm-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-4,.column.-sm-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-sm-4,.column.-offset-sm-4{margin-left:33.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-4,.column.-push-sm-4{left:33.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-4,.column.-pull-sm-4{right:33.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-5,.column.-sm-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-5,.column.-sm-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-sm-5,.column.-offset-sm-5{margin-left:41.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-5,.column.-push-sm-5{left:41.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-5,.column.-pull-sm-5{right:41.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-6,.column.-sm-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-6,.column.-sm-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-sm-6,.column.-offset-sm-6{margin-left:50%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-6,.column.-push-sm-6{left:50%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-6,.column.-pull-sm-6{right:50%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-7,.column.-sm-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-7,.column.-sm-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-sm-7,.column.-offset-sm-7{margin-left:58.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-7,.column.-push-sm-7{left:58.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-7,.column.-pull-sm-7{right:58.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-8,.column.-sm-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-8,.column.-sm-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-sm-8,.column.-offset-sm-8{margin-left:66.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-8,.column.-push-sm-8{left:66.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-8,.column.-pull-sm-8{right:66.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-9,.column.-sm-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-9,.column.-sm-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-sm-9,.column.-offset-sm-9{margin-left:75%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-9,.column.-push-sm-9{left:75%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-9,.column.-pull-sm-9{right:75%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-10,.column.-sm-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-10,.column.-sm-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-sm-10,.column.-offset-sm-10{margin-left:83.33333%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-10,.column.-push-sm-10{left:83.33333%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-10,.column.-pull-sm-10{right:83.33333%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-11,.column.-sm-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-11,.column.-sm-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-sm-11,.column.-offset-sm-11{margin-left:91.66667%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-11,.column.-push-sm-11{left:91.66667%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-11,.column.-pull-sm-11{right:91.66667%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-sm-12,.column.-sm-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:576px){.col.-sm-12,.column.-sm-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-sm-12,.column.-offset-sm-12{margin-left:100%}.col.-offset-sm-0,.column.-offset-sm-0{margin-left:0}.col.-push-sm-12,.column.-push-sm-12{left:100%}.col.-push-sm-0,.column.-push-sm-0{left:0}.col.-pull-sm-12,.column.-pull-sm-12{right:100%}.col.-pull-sm-0,.column.-pull-sm-0{right:0}}.col.-md,.col.-md-auto,.column.-md,.column.-md-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md,.column.-md{flex-grow:1;flex-basis:0;max-width:100%}.col.-md-auto,.column.-md-auto{flex:1 0 auto;max-width:auto}.col.-first-md,.column.-first-md{order:-1}.col.-last-md,.column.-last-md{order:1}}.col.-md-1,.column.-md-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-1,.column.-md-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-md-1,.column.-offset-md-1{margin-left:8.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-1,.column.-push-md-1{left:8.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-1,.column.-pull-md-1{right:8.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-2,.column.-md-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-2,.column.-md-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-md-2,.column.-offset-md-2{margin-left:16.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-2,.column.-push-md-2{left:16.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-2,.column.-pull-md-2{right:16.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-3,.column.-md-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-3,.column.-md-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-md-3,.column.-offset-md-3{margin-left:25%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-3,.column.-push-md-3{left:25%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-3,.column.-pull-md-3{right:25%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-4,.column.-md-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-4,.column.-md-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-md-4,.column.-offset-md-4{margin-left:33.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-4,.column.-push-md-4{left:33.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-4,.column.-pull-md-4{right:33.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-5,.column.-md-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-5,.column.-md-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-md-5,.column.-offset-md-5{margin-left:41.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-5,.column.-push-md-5{left:41.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-5,.column.-pull-md-5{right:41.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-6,.column.-md-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-6,.column.-md-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-md-6,.column.-offset-md-6{margin-left:50%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-6,.column.-push-md-6{left:50%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-6,.column.-pull-md-6{right:50%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-7,.column.-md-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-7,.column.-md-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-md-7,.column.-offset-md-7{margin-left:58.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-7,.column.-push-md-7{left:58.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-7,.column.-pull-md-7{right:58.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-8,.column.-md-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-8,.column.-md-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-md-8,.column.-offset-md-8{margin-left:66.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-8,.column.-push-md-8{left:66.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-8,.column.-pull-md-8{right:66.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-9,.column.-md-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-9,.column.-md-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-md-9,.column.-offset-md-9{margin-left:75%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-9,.column.-push-md-9{left:75%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-9,.column.-pull-md-9{right:75%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-10,.column.-md-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-10,.column.-md-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-md-10,.column.-offset-md-10{margin-left:83.33333%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-10,.column.-push-md-10{left:83.33333%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-10,.column.-pull-md-10{right:83.33333%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-11,.column.-md-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-11,.column.-md-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-md-11,.column.-offset-md-11{margin-left:91.66667%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-11,.column.-push-md-11{left:91.66667%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-11,.column.-pull-md-11{right:91.66667%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-md-12,.column.-md-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:768px){.col.-md-12,.column.-md-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-md-12,.column.-offset-md-12{margin-left:100%}.col.-offset-md-0,.column.-offset-md-0{margin-left:0}.col.-push-md-12,.column.-push-md-12{left:100%}.col.-push-md-0,.column.-push-md-0{left:0}.col.-pull-md-12,.column.-pull-md-12{right:100%}.col.-pull-md-0,.column.-pull-md-0{right:0}}.col.-lg,.col.-lg-auto,.column.-lg,.column.-lg-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg,.column.-lg{flex-grow:1;flex-basis:0;max-width:100%}.col.-lg-auto,.column.-lg-auto{flex:1 0 auto;max-width:auto}.col.-first-lg,.column.-first-lg{order:-1}.col.-last-lg,.column.-last-lg{order:1}}.col.-lg-1,.column.-lg-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-1,.column.-lg-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-lg-1,.column.-offset-lg-1{margin-left:8.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-1,.column.-push-lg-1{left:8.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-1,.column.-pull-lg-1{right:8.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-2,.column.-lg-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-2,.column.-lg-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-lg-2,.column.-offset-lg-2{margin-left:16.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-2,.column.-push-lg-2{left:16.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-2,.column.-pull-lg-2{right:16.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-3,.column.-lg-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-3,.column.-lg-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-lg-3,.column.-offset-lg-3{margin-left:25%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-3,.column.-push-lg-3{left:25%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-3,.column.-pull-lg-3{right:25%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-4,.column.-lg-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-4,.column.-lg-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-lg-4,.column.-offset-lg-4{margin-left:33.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-4,.column.-push-lg-4{left:33.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-4,.column.-pull-lg-4{right:33.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-5,.column.-lg-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-5,.column.-lg-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-lg-5,.column.-offset-lg-5{margin-left:41.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-5,.column.-push-lg-5{left:41.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-5,.column.-pull-lg-5{right:41.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-6,.column.-lg-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-6,.column.-lg-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-lg-6,.column.-offset-lg-6{margin-left:50%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-6,.column.-push-lg-6{left:50%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-6,.column.-pull-lg-6{right:50%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-7,.column.-lg-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-7,.column.-lg-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-lg-7,.column.-offset-lg-7{margin-left:58.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-7,.column.-push-lg-7{left:58.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-7,.column.-pull-lg-7{right:58.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-8,.column.-lg-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-8,.column.-lg-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-lg-8,.column.-offset-lg-8{margin-left:66.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-8,.column.-push-lg-8{left:66.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-8,.column.-pull-lg-8{right:66.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-9,.column.-lg-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-9,.column.-lg-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-lg-9,.column.-offset-lg-9{margin-left:75%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-9,.column.-push-lg-9{left:75%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-9,.column.-pull-lg-9{right:75%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-10,.column.-lg-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-10,.column.-lg-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-lg-10,.column.-offset-lg-10{margin-left:83.33333%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-10,.column.-push-lg-10{left:83.33333%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-10,.column.-pull-lg-10{right:83.33333%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-11,.column.-lg-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-11,.column.-lg-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-lg-11,.column.-offset-lg-11{margin-left:91.66667%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-11,.column.-push-lg-11{left:91.66667%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-11,.column.-pull-lg-11{right:91.66667%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-lg-12,.column.-lg-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:992px){.col.-lg-12,.column.-lg-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-lg-12,.column.-offset-lg-12{margin-left:100%}.col.-offset-lg-0,.column.-offset-lg-0{margin-left:0}.col.-push-lg-12,.column.-push-lg-12{left:100%}.col.-push-lg-0,.column.-push-lg-0{left:0}.col.-pull-lg-12,.column.-pull-lg-12{right:100%}.col.-pull-lg-0,.column.-pull-lg-0{right:0}}.col.-xl,.col.-xl-auto,.column.-xl,.column.-xl-auto{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl,.column.-xl{flex-grow:1;flex-basis:0;max-width:100%}.col.-xl-auto,.column.-xl-auto{flex:1 0 auto;max-width:auto}.col.-first-xl,.column.-first-xl{order:-1}.col.-last-xl,.column.-last-xl{order:1}}.col.-xl-1,.column.-xl-1{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-1,.column.-xl-1{flex-grow:1;flex-basis:8.33333%;max-width:8.33333%}.col.-offset-xl-1,.column.-offset-xl-1{margin-left:8.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-1,.column.-push-xl-1{left:8.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-1,.column.-pull-xl-1{right:8.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-2,.column.-xl-2{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-2,.column.-xl-2{flex-grow:1;flex-basis:16.66667%;max-width:16.66667%}.col.-offset-xl-2,.column.-offset-xl-2{margin-left:16.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-2,.column.-push-xl-2{left:16.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-2,.column.-pull-xl-2{right:16.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-3,.column.-xl-3{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-3,.column.-xl-3{flex-grow:1;flex-basis:25%;max-width:25%}.col.-offset-xl-3,.column.-offset-xl-3{margin-left:25%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-3,.column.-push-xl-3{left:25%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-3,.column.-pull-xl-3{right:25%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-4,.column.-xl-4{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-4,.column.-xl-4{flex-grow:1;flex-basis:33.33333%;max-width:33.33333%}.col.-offset-xl-4,.column.-offset-xl-4{margin-left:33.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-4,.column.-push-xl-4{left:33.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-4,.column.-pull-xl-4{right:33.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-5,.column.-xl-5{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-5,.column.-xl-5{flex-grow:1;flex-basis:41.66667%;max-width:41.66667%}.col.-offset-xl-5,.column.-offset-xl-5{margin-left:41.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-5,.column.-push-xl-5{left:41.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-5,.column.-pull-xl-5{right:41.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-6,.column.-xl-6{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-6,.column.-xl-6{flex-grow:1;flex-basis:50%;max-width:50%}.col.-offset-xl-6,.column.-offset-xl-6{margin-left:50%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-6,.column.-push-xl-6{left:50%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-6,.column.-pull-xl-6{right:50%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-7,.column.-xl-7{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-7,.column.-xl-7{flex-grow:1;flex-basis:58.33333%;max-width:58.33333%}.col.-offset-xl-7,.column.-offset-xl-7{margin-left:58.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-7,.column.-push-xl-7{left:58.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-7,.column.-pull-xl-7{right:58.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-8,.column.-xl-8{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-8,.column.-xl-8{flex-grow:1;flex-basis:66.66667%;max-width:66.66667%}.col.-offset-xl-8,.column.-offset-xl-8{margin-left:66.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-8,.column.-push-xl-8{left:66.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-8,.column.-pull-xl-8{right:66.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-9,.column.-xl-9{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-9,.column.-xl-9{flex-grow:1;flex-basis:75%;max-width:75%}.col.-offset-xl-9,.column.-offset-xl-9{margin-left:75%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-9,.column.-push-xl-9{left:75%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-9,.column.-pull-xl-9{right:75%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-10,.column.-xl-10{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-10,.column.-xl-10{flex-grow:1;flex-basis:83.33333%;max-width:83.33333%}.col.-offset-xl-10,.column.-offset-xl-10{margin-left:83.33333%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-10,.column.-push-xl-10{left:83.33333%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-10,.column.-pull-xl-10{right:83.33333%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-11,.column.-xl-11{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-11,.column.-xl-11{flex-grow:1;flex-basis:91.66667%;max-width:91.66667%}.col.-offset-xl-11,.column.-offset-xl-11{margin-left:91.66667%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-11,.column.-push-xl-11{left:91.66667%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-11,.column.-pull-xl-11{right:91.66667%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.col.-xl-12,.column.-xl-12{flex-grow:0;flex-basis:100%;width:100%}@media screen and (min-width:1200px){.col.-xl-12,.column.-xl-12{flex-grow:1;flex-basis:100%;max-width:100%}.col.-offset-xl-12,.column.-offset-xl-12{margin-left:100%}.col.-offset-xl-0,.column.-offset-xl-0{margin-left:0}.col.-push-xl-12,.column.-push-xl-12{left:100%}.col.-push-xl-0,.column.-push-xl-0{left:0}.col.-pull-xl-12,.column.-pull-xl-12{right:100%}.col.-pull-xl-0,.column.-pull-xl-0{right:0}}.card.-red{color:#fff;background-color:#f25f5c}.card.-red>.body{border-color:#f0413d}.card.-red>.footer,.card.-red>.header{background-color:rgba(0,0,0,.1);border-color:#f0413d}.card.-orange{color:#fff;background-color:#f1ac53}.card.-orange>.body{border-color:#ef9e35}.card.-orange>.footer,.card.-orange>.header{background-color:rgba(0,0,0,.1);border-color:#ef9e35}.card.-yellow{color:#343a40;background-color:#ffe066}.card.-yellow>.body{border-color:#ffd942}.card.-yellow>.footer,.card.-yellow>.header{background-color:rgba(0,0,0,.1);border-color:#ffd942}.card.-green{color:#fff;background-color:#5fb072}.card.-green>.body{border-color:#51a364}.card.-green>.footer,.card.-green>.header{background-color:rgba(0,0,0,.1);border-color:#51a364}.card.-teal{color:#fff;background-color:#62bec1}.card.-teal>.body{border-color:#4db5b9}.card.-teal>.footer,.card.-teal>.header{background-color:rgba(0,0,0,.1);border-color:#4db5b9}.card.-blue{color:#fff;background-color:#178bb2}.card.-blue>.body{border-color:#157da0}.card.-blue>.footer,.card.-blue>.header{background-color:rgba(0,0,0,.1);border-color:#157da0}.card.-purple{color:#fff;background-color:#5d65b9}.card.-purple>.body{border-color:#4b54af}.card.-purple>.footer,.card.-purple>.header{background-color:rgba(0,0,0,.1);border-color:#4b54af}.card.-pink{color:#fff;background-color:#ff6f80}.card.-pink>.body{border-color:#ff4a60}.card.-pink>.footer,.card.-pink>.header{background-color:rgba(0,0,0,.1);border-color:#ff4a60}.card.-primary{color:#fff;background-color:#37598d}.card.-primary>.body{border-color:#32507f}.card.-primary>.footer,.card.-primary>.header{background-color:rgba(0,0,0,.1);border-color:#32507f}.card.-secondary{color:#fff;background-color:#5d65b9}.card.-secondary>.body{border-color:#4b54af}.card.-secondary>.footer,.card.-secondary>.header{background-color:rgba(0,0,0,.1);border-color:#4b54af}.card,.card.-light{color:#343a40;background-color:#fff}.card.-light>.body,.card>.body{border-color:#e6e6e6}.card.-light>.footer,.card.-light>.header,.card>.footer,.card>.header{background-color:rgba(0,0,0,.1);border-color:#e6e6e6}.card.-dark{color:#fff;background-color:#343a40}.card.-dark>.body{border-color:#2f343a}.card.-dark>.footer,.card.-dark>.header{background-color:rgba(0,0,0,.1);border-color:#2f343a}.card.-transparent{color:#fff;background-color:transparent}.card.-transparent>.body{border-color:transparent}.card.-transparent>.footer,.card.-transparent>.header{background-color:rgba(0,0,0,.1);border-color:transparent}.card.-white{color:#343a40;background-color:#fff}.card.-white>.body{border-color:#e6e6e6}.card.-white>.footer,.card.-white>.header{background-color:rgba(0,0,0,.1);border-color:#e6e6e6}.card.-gray-10{color:#343a40;background-color:#f8f9fa}.card.-gray-10>.body{border-color:#dbe0e5}.card.-gray-10>.footer,.card.-gray-10>.header{background-color:rgba(0,0,0,.1);border-color:#dbe0e5}.card.-gray-20{color:#343a40;background-color:#e9ecef}.card.-gray-20>.body{border-color:#ced4db}.card.-gray-20>.footer,.card.-gray-20>.header{background-color:rgba(0,0,0,.1);border-color:#ced4db}.card.-gray-30{color:#343a40;background-color:#dee2e6}.card.-gray-30>.body{border-color:#c4cbd3}.card.-gray-30>.footer,.card.-gray-30>.header{background-color:rgba(0,0,0,.1);border-color:#c4cbd3}.card.-gray-40{color:#343a40;background-color:#ced4da}.card.-gray-40>.body{border-color:#b6bfc8}.card.-gray-40>.footer,.card.-gray-40>.header{background-color:rgba(0,0,0,.1);border-color:#b6bfc8}.card.-gray-50{color:#fff;background-color:#adb5bd}.card.-gray-50>.body{border-color:#99a3ad}.card.-gray-50>.footer,.card.-gray-50>.header{background-color:rgba(0,0,0,.1);border-color:#99a3ad}.card.-gray-60{color:#fff;background-color:#868e96}.card.-gray-60>.body{border-color:#778089}.card.-gray-60>.footer,.card.-gray-60>.header{background-color:rgba(0,0,0,.1);border-color:#778089}.card.-gray-70{color:#fff;background-color:#495057}.card.-gray-70>.body{border-color:#42484e}.card.-gray-70>.footer,.card.-gray-70>.header{background-color:rgba(0,0,0,.1);border-color:#42484e}.card.-gray-80{color:#fff;background-color:#343a40}.card.-gray-80>.body{border-color:#2f343a}.card.-gray-80>.footer,.card.-gray-80>.header{background-color:rgba(0,0,0,.1);border-color:#2f343a}.card.-gray-90{color:#fff;background-color:#202229}.card.-gray-90>.body{border-color:#1d1f25}.card.-gray-90>.footer,.card.-gray-90>.header{background-color:rgba(0,0,0,.1);border-color:#1d1f25}.card.-black{color:#fff;background-color:#000}.card.-black>.body{border-color:#000}.card.-black>.footer,.card.-black>.header{background-color:rgba(0,0,0,.1);border-color:#000}.card.-success{color:#fff;background-color:#5fb072}.card.-success>.body{border-color:#51a364}.card.-success>.footer,.card.-success>.header{background-color:rgba(0,0,0,.1);border-color:#51a364}.card.-danger{color:#fff;background-color:#f25f5c}.card.-danger>.body{border-color:#f0413d}.card.-danger>.footer,.card.-danger>.header{background-color:rgba(0,0,0,.1);border-color:#f0413d}.card.-warning{color:#fff;background-color:#f1ac53}.card.-warning>.body{border-color:#ef9e35}.card.-warning>.footer,.card.-warning>.header{background-color:rgba(0,0,0,.1);border-color:#ef9e35}.card.-info{color:#fff;background-color:#62bec1}.card.-info>.body{border-color:#4db5b9}.card.-info>.footer,.card.-info>.header{background-color:rgba(0,0,0,.1);border-color:#4db5b9}.card.-sm{border-radius:.2rem;font-size:.88rem}.card.-sm>.header{padding:.8rem}.card.-sm>.header:first-child{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.card.-sm>.body{padding:.8rem;border-radius:.2rem}.card.-sm>.body>.title{margin-bottom:.8rem}.card.-sm>.body>.subtitle{margin-top:.4rem}.card.-sm>.body>.link+.link{margin-left:.8rem}.card.-sm>.footer{padding:.8rem}.card.-sm>.footer:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.card.-sm>img{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.card.-sm:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.card.-sm .item:first-child,.card.-sm>.list-group:first-child{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.card.-sm .item:last-child,.card.-sm>.list-group:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.card,.card.-md{border-radius:.25rem;font-size:1.1rem}.card.-md>.header,.card>.header{padding:1rem}.card.-md>.header:first-child,.card>.header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card.-md>.body,.card>.body{padding:1rem;border-radius:.25rem}.card.-md>.body>.title,.card>.body>.title{margin-bottom:1rem}.card.-md>.body>.subtitle,.card>.body>.subtitle{margin-top:.5rem}.card.-md>.body>.link+.link,.card>.body>.link+.link{margin-left:1rem}.card.-md>.footer,.card>.footer{padding:1rem}.card.-md>.footer:last-child,.card>.footer:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card.-md>img,.card>img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card.-md:last-child,.card:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card.-md .item:first-child,.card.-md>.list-group:first-child,.card .item:first-child,.card>.list-group:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card.-md .item:last-child,.card.-md>.list-group:last-child,.card .item:last-child,.card>.list-group:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card.-lg{border-radius:.3rem;font-size:1.32rem}.card.-lg>.header{padding:1.2rem}.card.-lg>.header:first-child{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.card.-lg>.body{padding:1.2rem;border-radius:.3rem}.card.-lg>.body>.title{margin-bottom:1.2rem}.card.-lg>.body>.subtitle{margin-top:.6rem}.card.-lg>.body>.link+.link{margin-left:1.2rem}.card.-lg>.footer{padding:1.2rem}.card.-lg>.footer:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.card.-lg>img{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.card.-lg:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.card.-lg .item:first-child,.card.-lg>.list-group:first-child{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.card.-lg .item:last-child,.card.-lg>.list-group:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-clip:border-box}.card>hr{margin-right:0;margin-left:0}.card>.header{margin-bottom:0;border-style:solid;border-width:1px 1px 0}.card>.header>.h1,.card>.header>.h2,.card>.header>.h3,.card>.header>.h4,.card>.header>.h5,.card>.header>.h6,.card>.header>.p,.card>.header>h1,.card>.header>h2,.card>.header>h3,.card>.header>h4,.card>.header>h5,.card>.header>h6,.card>.header>p{margin-bottom:0;margin-top:0}.card>.header+.body,.card>.header+img{border-top-left-radius:0;border-top-right-radius:0}.card>.header+.list-group .list-group-item:first-child{border-top:0}.card>.body{flex:1 1 auto;border-width:1px;border-style:solid}.card>.body:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.card>.body:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.card>.body>.title{margin-top:0}.card>.body>.subtitle{margin-bottom:0}.card>.body>.link{text-decoration:none}.card>.footer{border-style:solid;border-width:0 1px 1px}.card>img{width:100%}.list-group.-sm{border-radius:.2rem}.list-group,.list-group.-md{border-radius:.25rem}.list-group.-lg{border-radius:.3rem}.list-group,.list-group.-light{background-color:#fff}.-bordered.list-group,.list-group.-light.-bordered{border-color:#e9ecef}.list-group.-light>.item,.list-group>.item{border-bottom-color:#e9ecef}.list-group.-dark{background-color:#202229}.list-group.-dark.-bordered{border-color:#495057}.list-group.-dark>.item{border-bottom-color:#495057}.list-group{display:flex;flex-wrap:wrap;flex-direction:column;transition:background-color .21s ease,border-color .21s ease}.list-group.-bordered{border-width:1px;border-style:solid}.list-group.-sm>.item{padding:.8rem}.list-group.-sm>.item:first-child{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.list-group.-sm>.item:last-child{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.list-group.-md>.item,.list-group>.item{padding:1rem}.list-group.-md>.item:first-child,.list-group>.item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group.-md>.item:last-child,.list-group>.item:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.list-group.-lg>.item{padding:1.2rem}.list-group.-lg>.item:first-child{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.list-group.-lg>.item:last-child{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.list-group>.item{display:block;margin-bottom:0;border-bottom-width:1px;border-bottom-style:solid;transition:border-color .21s ease;padding:1rem}.list-group>.item:last-child{border-bottom-width:0}.list-group>.item:focus,.list-group>.item:hover{text-decoration:none}.list-group>.item>:first-child{margin-top:0}.list-group>.item>:last-child{margin-bottom:0}.list-group>.item.-disabled{color:#868e96;pointer-events:none;cursor:default}.list-group>.item.-active{background:#37598d;color:#fff;border-bottom-color:#345485}.list-group>.item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group>.item:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.tabs,.tabs.-light{border-color:#e9ecef}.tabs.-dark{border-color:#495057}.tabs{position:relative;display:block}.tabs:not(.-custom)>.header>.button-group .button:first-child{border-bottom-left-radius:0}.tabs:not(.-custom)>.header>.button-group .button:last-child{border-bottom-right-radius:0}.tabs:not(.-custom)>.tab{border-top-left-radius:0}.tabs:not(.-custom).-stretch>.tab{border-top-right-radius:0}.tabs.-stretch>.header{width:100%}.tabs.-stretch>.header>.button-group{display:flex;flex-basis:100%}.tabs.-stretch>.header>.button-group>.button{flex-grow:1}.tabs.-light>.tab,.tabs>.tab{border-color:#e9ecef;color:#343a40;background-color:#fff}.tabs.-dark>.tab{border-color:#495057;color:#fff;background-color:#343a40}.tabs>.tab{border-width:1px;border-style:solid;border-radius:.25rem;transition-property:background-color,border-color,color;transition-duration:.21s;transition-timing-function:ease}.tabs>.tab,.tabs>.tab>.body{position:relative;display:block}.tabs>.tab>.body{padding:1rem}.modal.-sm{max-width:384px;border-radius:.2rem}.modal.-sm>.body,.modal.-sm>.footer,.modal.-sm>.header{padding:.8rem}.modal.-sm>.header{border-top-left-radius:.2rem;border-top-right-radius:.2rem}.modal.-sm>.footer{border-bottom-left-radius:.2rem;border-bottom-right-radius:.2rem}.modal,.modal.-md{max-width:480px;border-radius:.25rem}.modal.-md>.body,.modal.-md>.footer,.modal.-md>.header,.modal>.body,.modal>.footer,.modal>.header{padding:1rem}.modal.-md>.header,.modal>.header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.modal.-md>.footer,.modal>.footer{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.modal.-lg{max-width:576px;border-radius:.3rem}.modal.-lg>.body,.modal.-lg>.footer,.modal.-lg>.header{padding:1.2rem}.modal.-lg>.header{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal.-lg>.footer{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.modal.-primary>.header{border-color:#e9ecef;background-color:#32507f;color:#fff}.modal.-primary>.header>.close{color:#fff}.modal.-primary>.body,.modal.-primary>.footer{border-color:#e9ecef;background-color:#fff}.modal.-primary.-fill{color:#fff}.modal.-primary.-fill>.body,.modal.-primary.-fill>.footer,.modal.-primary.-fill>.header{border-color:#2f4c78}.modal.-primary.-fill>.header{background-color:#32507f}.modal.-primary.-fill>.body,.modal.-primary.-fill>.footer{background-color:#37598d}.modal.-primary[x-placement^=top]>.arrow{border-top-color:#32507f}.modal.-primary[x-placement^=top]>.arrow:after{border-top-color:#37598d}.modal.-primary[x-placement^=bottom]>.arrow{border-bottom-color:#32507f}.modal.-primary[x-placement^=bottom]>.arrow:after{border-bottom-color:#37598d}.modal.-primary[x-placement^=right]>.arrow{border-right-color:#32507f}.modal.-primary[x-placement^=right]>.arrow:after{border-right-color:#37598d}.modal.-primary[x-placement^=left]>.arrow{border-left-color:#32507f}.modal.-primary[x-placement^=left]>.arrow:after{border-left-color:#37598d}.inkline.-dark .modal.-primary>.header{border-color:#495057}.inkline.-dark .modal.-primary>.body,.inkline.-dark .modal.-primary>.footer{border-color:#495057;background-color:#343a40}.modal.-secondary>.header{border-color:#e9ecef;background-color:#4b54af;color:#fff}.modal.-secondary>.header>.close{color:#fff}.modal.-secondary>.body,.modal.-secondary>.footer{border-color:#e9ecef;background-color:#fff}.modal.-secondary.-fill{color:#fff}.modal.-secondary.-fill>.body,.modal.-secondary.-fill>.footer,.modal.-secondary.-fill>.header{border-color:#474fa5}.modal.-secondary.-fill>.header{background-color:#4b54af}.modal.-secondary.-fill>.body,.modal.-secondary.-fill>.footer{background-color:#5d65b9}.modal.-secondary[x-placement^=top]>.arrow{border-top-color:#4b54af}.modal.-secondary[x-placement^=top]>.arrow:after{border-top-color:#5d65b9}.modal.-secondary[x-placement^=bottom]>.arrow{border-bottom-color:#4b54af}.modal.-secondary[x-placement^=bottom]>.arrow:after{border-bottom-color:#5d65b9}.modal.-secondary[x-placement^=right]>.arrow{border-right-color:#4b54af}.modal.-secondary[x-placement^=right]>.arrow:after{border-right-color:#5d65b9}.modal.-secondary[x-placement^=left]>.arrow{border-left-color:#4b54af}.modal.-secondary[x-placement^=left]>.arrow:after{border-left-color:#5d65b9}.inkline.-dark .modal.-secondary>.header{border-color:#495057}.inkline.-dark .modal.-secondary>.body,.inkline.-dark .modal.-secondary>.footer{border-color:#495057;background-color:#343a40}.modal.-light>.header,.modal>.header{border-color:#e9ecef;background-color:#dbe0e5;color:#343a40}.modal.-light>.header>.close,.modal>.header>.close{color:#343a40}.modal.-light>.body,.modal.-light>.footer,.modal>.body,.modal>.footer{border-color:#e9ecef;background-color:#fff}.-fill.modal,.modal.-light.-fill{color:#343a40}.-fill.modal>.body,.-fill.modal>.footer,.-fill.modal>.header,.modal.-light.-fill>.body,.modal.-light.-fill>.footer,.modal.-light.-fill>.header{border-color:#ced4db}.-fill.modal>.header,.modal.-light.-fill>.header{background-color:#dbe0e5}.-fill.modal>.body,.-fill.modal>.footer,.modal.-light.-fill>.body,.modal.-light.-fill>.footer{background-color:#e9ecef}.modal.-light[x-placement^=top]>.arrow,.modal[x-placement^=top]>.arrow{border-top-color:#ced4db}.modal.-light[x-placement^=top]>.arrow:after,.modal[x-placement^=top]>.arrow:after{border-top-color:#e9ecef}.modal.-light[x-placement^=bottom]>.arrow,.modal[x-placement^=bottom]>.arrow{border-bottom-color:#ced4db}.modal.-light[x-placement^=bottom]>.arrow:after,.modal[x-placement^=bottom]>.arrow:after{border-bottom-color:#e9ecef}.modal.-light[x-placement^=right]>.arrow,.modal[x-placement^=right]>.arrow{border-right-color:#ced4db}.modal.-light[x-placement^=right]>.arrow:after,.modal[x-placement^=right]>.arrow:after{border-right-color:#e9ecef}.modal.-light[x-placement^=left]>.arrow,.modal[x-placement^=left]>.arrow{border-left-color:#ced4db}.modal.-light[x-placement^=left]>.arrow:after,.modal[x-placement^=left]>.arrow:after{border-left-color:#e9ecef}.inkline.-dark .modal.-light>.header,.inkline.-dark .modal>.header{border-color:#495057}.inkline.-dark .modal.-light>.body,.inkline.-dark .modal.-light>.footer,.inkline.-dark .modal>.body,.inkline.-dark .modal>.footer{border-color:#495057;background-color:#343a40}.modal.-dark>.header{border-color:#e9ecef;background-color:#2f343a;color:#fff}.modal.-dark>.header>.close{color:#fff}.modal.-dark>.body,.modal.-dark>.footer{border-color:#e9ecef;background-color:#fff}.modal.-dark.-fill{color:#fff}.modal.-dark.-fill>.body,.modal.-dark.-fill>.footer,.modal.-dark.-fill>.header{border-color:#2c3136}.modal.-dark.-fill>.header{background-color:#2f343a}.modal.-dark.-fill>.body,.modal.-dark.-fill>.footer{background-color:#343a40}.modal.-dark[x-placement^=top]>.arrow{border-top-color:#2f343a}.modal.-dark[x-placement^=top]>.arrow:after{border-top-color:#343a40}.modal.-dark[x-placement^=bottom]>.arrow{border-bottom-color:#2f343a}.modal.-dark[x-placement^=bottom]>.arrow:after{border-bottom-color:#343a40}.modal.-dark[x-placement^=right]>.arrow{border-right-color:#2f343a}.modal.-dark[x-placement^=right]>.arrow:after{border-right-color:#343a40}.modal.-dark[x-placement^=left]>.arrow{border-left-color:#2f343a}.modal.-dark[x-placement^=left]>.arrow:after{border-left-color:#343a40}.inkline.-dark .modal.-dark>.header{border-color:#495057}.inkline.-dark .modal.-dark>.body,.inkline.-dark .modal.-dark>.footer{border-color:#495057;background-color:#343a40}.modal.-success>.header{border-color:#e9ecef;background-color:#51a364;color:#fff}.modal.-success>.header>.close{color:#fff}.modal.-success>.body,.modal.-success>.footer{border-color:#e9ecef;background-color:#fff}.modal.-success.-fill{color:#fff}.modal.-success.-fill>.body,.modal.-success.-fill>.footer,.modal.-success.-fill>.header{border-color:#4c9a5e}.modal.-success.-fill>.header{background-color:#51a364}.modal.-success.-fill>.body,.modal.-success.-fill>.footer{background-color:#5fb072}.modal.-success[x-placement^=top]>.arrow{border-top-color:#51a364}.modal.-success[x-placement^=top]>.arrow:after{border-top-color:#5fb072}.modal.-success[x-placement^=bottom]>.arrow{border-bottom-color:#51a364}.modal.-success[x-placement^=bottom]>.arrow:after{border-bottom-color:#5fb072}.modal.-success[x-placement^=right]>.arrow{border-right-color:#51a364}.modal.-success[x-placement^=right]>.arrow:after{border-right-color:#5fb072}.modal.-success[x-placement^=left]>.arrow{border-left-color:#51a364}.modal.-success[x-placement^=left]>.arrow:after{border-left-color:#5fb072}.inkline.-dark .modal.-success>.header{border-color:#495057}.inkline.-dark .modal.-success>.body,.inkline.-dark .modal.-success>.footer{border-color:#495057;background-color:#343a40}.modal.-danger>.header{border-color:#e9ecef;background-color:#f0413d;color:#fff}.modal.-danger>.header>.close{color:#fff}.modal.-danger>.body,.modal.-danger>.footer{border-color:#e9ecef;background-color:#fff}.modal.-danger.-fill{color:#fff}.modal.-danger.-fill>.body,.modal.-danger.-fill>.footer,.modal.-danger.-fill>.header{border-color:#ee312e}.modal.-danger.-fill>.header{background-color:#f0413d}.modal.-danger.-fill>.body,.modal.-danger.-fill>.footer{background-color:#f25f5c}.modal.-danger[x-placement^=top]>.arrow{border-top-color:#f0413d}.modal.-danger[x-placement^=top]>.arrow:after{border-top-color:#f25f5c}.modal.-danger[x-placement^=bottom]>.arrow{border-bottom-color:#f0413d}.modal.-danger[x-placement^=bottom]>.arrow:after{border-bottom-color:#f25f5c}.modal.-danger[x-placement^=right]>.arrow{border-right-color:#f0413d}.modal.-danger[x-placement^=right]>.arrow:after{border-right-color:#f25f5c}.modal.-danger[x-placement^=left]>.arrow{border-left-color:#f0413d}.modal.-danger[x-placement^=left]>.arrow:after{border-left-color:#f25f5c}.inkline.-dark .modal.-danger>.header{border-color:#495057}.inkline.-dark .modal.-danger>.body,.inkline.-dark .modal.-danger>.footer{border-color:#495057;background-color:#343a40}.modal.-warning>.header{border-color:#e9ecef;background-color:#ef9e35;color:#fff}.modal.-warning>.header>.close{color:#fff}.modal.-warning>.body,.modal.-warning>.footer{border-color:#e9ecef;background-color:#fff}.modal.-warning.-fill{color:#fff}.modal.-warning.-fill>.body,.modal.-warning.-fill>.footer,.modal.-warning.-fill>.header{border-color:#ed9626}.modal.-warning.-fill>.header{background-color:#ef9e35}.modal.-warning.-fill>.body,.modal.-warning.-fill>.footer{background-color:#f1ac53}.modal.-warning[x-placement^=top]>.arrow{border-top-color:#ef9e35}.modal.-warning[x-placement^=top]>.arrow:after{border-top-color:#f1ac53}.modal.-warning[x-placement^=bottom]>.arrow{border-bottom-color:#ef9e35}.modal.-warning[x-placement^=bottom]>.arrow:after{border-bottom-color:#f1ac53}.modal.-warning[x-placement^=right]>.arrow{border-right-color:#ef9e35}.modal.-warning[x-placement^=right]>.arrow:after{border-right-color:#f1ac53}.modal.-warning[x-placement^=left]>.arrow{border-left-color:#ef9e35}.modal.-warning[x-placement^=left]>.arrow:after{border-left-color:#f1ac53}.inkline.-dark .modal.-warning>.header{border-color:#495057}.inkline.-dark .modal.-warning>.body,.inkline.-dark .modal.-warning>.footer{border-color:#495057;background-color:#343a40}.modal.-info>.header{border-color:#e9ecef;background-color:#4db5b9;color:#fff}.modal.-info>.header>.close{color:#fff}.modal.-info>.body,.modal.-info>.footer{border-color:#e9ecef;background-color:#fff}.modal.-info.-fill{color:#fff}.modal.-info.-fill>.body,.modal.-info.-fill>.footer,.modal.-info.-fill>.header{border-color:#46aeb1}.modal.-info.-fill>.header{background-color:#4db5b9}.modal.-info.-fill>.body,.modal.-info.-fill>.footer{background-color:#62bec1}.modal.-info[x-placement^=top]>.arrow{border-top-color:#4db5b9}.modal.-info[x-placement^=top]>.arrow:after{border-top-color:#62bec1}.modal.-info[x-placement^=bottom]>.arrow{border-bottom-color:#4db5b9}.modal.-info[x-placement^=bottom]>.arrow:after{border-bottom-color:#62bec1}.modal.-info[x-placement^=right]>.arrow{border-right-color:#4db5b9}.modal.-info[x-placement^=right]>.arrow:after{border-right-color:#62bec1}.modal.-info[x-placement^=left]>.arrow{border-left-color:#4db5b9}.modal.-info[x-placement^=left]>.arrow:after{border-left-color:#62bec1}.inkline.-dark .modal.-info>.header{border-color:#495057}.inkline.-dark .modal.-info>.body,.inkline.-dark .modal.-info>.footer{border-color:#495057;background-color:#343a40}.modal-wrapper{display:block;position:relative}.modal-overlay{background:rgba(0,0,0,.75);position:fixed;top:0;left:0;z-index:2000;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.modal{text-align:left;list-style:none;line-height:1.5;display:block;width:calc(100% - 2rem)}.modal>.body,.modal>.footer,.modal>.header{border-width:1px;border-style:solid}.modal>.header{display:flex;justify-content:space-between}.modal>.header>.close{display:flex;justify-content:center;align-items:center;height:1.5rem;width:1.5rem;line-height:1.5rem;font-size:.5rem;cursor:pointer;border-radius:.25rem;padding:0;border:0;transition:background-color .3s ease;background-color:transparent}.modal>.header>.close>.icon:before{content:""}.modal>.header>.close:focus,.modal>.header>.close:hover{outline:none;background-color:rgba(0,0,0,.1)}.modal>.header>.close:active{background-color:rgba(0,0,0,.15)}.modal>.body+.body,.modal>.body+.footer,.modal>.header+.body,.modal>.header+.footer{border-top-width:0}.form-group.-sm>.form-input-label{font-size:.88rem}.form-group.-sm>.form-input-label.-left{padding-right:.8rem}.form-group.-sm>.form-input-label.-right{padding-left:.8rem}.form-group.-md>.form-input-label,.form-group>.form-input-label{font-size:1.1rem}.form-group.-md>.form-input-label.-left,.form-group>.form-input-label.-left{padding-right:1rem}.form-group.-md>.form-input-label.-right,.form-group>.form-input-label.-right{padding-left:1rem}.form-group.-lg>.form-input-label{font-size:1.32rem}.form-group.-lg>.form-input-label.-left{padding-right:1.2rem}.form-group.-lg>.form-input-label.-right{padding-left:1.2rem}.form-group{display:block;vertical-align:middle;position:relative}.form-group.-checkbox,.form-group.-radio{font-size:0}.form-group+.form-group{margin-top:1rem}.form-group.-inline{display:flex}.form-group.-inline>.form-input-group{flex-basis:100%}.form-group.-inline>.form-label{display:flex;flex:0 0 auto;align-self:center;margin-bottom:0}.form-group.-inline>.form-label.-right{margin-right:0}.form-group-error{position:relative;margin:.25rem 0 0;padding:0;list-style:none;color:#f25f5c;font-size:.88rem}.form-group-error li{margin:0}.inkline-icon.-circle:before{content:""}.inkline-icon.-chevron-down:before{content:""}.inkline-icon.-caret-down:before{content:""}.inkline-icon.-home:before{content:""}.inkline-icon.-calendar:before{content:""}.inkline-icon.-warning:before{content:""}.inkline-icon.-danger:before{content:""}.inkline-icon.-plus:before{content:""}.inkline-icon.-minus:before{content:""}.inkline-icon.-info:before{content:""}.inkline-icon.-times:before{content:""}.inkline-icon.-check:before{content:""}.inkline-icon.-sort-asc:before{content:""}.inkline-icon.-sort-desc:before{content:""}.inkline-icon.-sort:before{content:""}.inkline-icon.-search:before{content:""}.inkline-icon.-book:before{content:""}.inkline-icon.-file:before{content:""}.inkline-icon.-stack:before{content:""}.inkline-icon.-folder:before{content:""}.inkline-icon.-cart:before{content:""}.inkline-icon.-phone:before{content:""}.inkline-icon.-envelope:before{content:""}.inkline-icon.-location:before{content:""}.inkline-icon.-clock:before{content:""}.inkline-icon.-user:before{content:""}.inkline-icon.-key:before{content:""}.inkline-icon.-lock:before{content:""}.inkline-icon.-settings:before{content:""}.inkline-icon.-magic:before{content:""}.inkline-icon.-dashboard:before{content:""}.inkline-icon.-earth:before{content:""}.inkline-icon.-link:before{content:""}.inkline-icon.-attachment:before{content:""}.inkline-icon.-light:before{content:""}.inkline-icon.-dark:before{content:""}.inkline-icon.-star-empty:before{content:""}.inkline-icon.-star-half:before{content:""}.inkline-icon.-star-full:before{content:""}.inkline-icon.-heart:before{content:""}.inkline-icon.-code:before{content:""}.inkline-icon.-chevron-up:before{content:"";transform:rotate(180deg)}.inkline-icon.-chevron-left:before{content:"";transform:rotate(90deg)}.inkline-icon.-chevron-right:before{content:"";transform:rotate(-90deg)}.inkline-icon.-caret-up:before{content:"";transform:rotate(180deg)}.inkline-icon.-caret-left:before{content:"";transform:rotate(90deg)}.inkline-icon.-caret-right:before{content:"";transform:rotate(-90deg)}.inkline-icon.-sm{font-size:.88rem}.inkline-icon.-md{font-size:1.1rem}.inkline-icon.-lg{font-size:1.32rem}.form-input .clear-input:before,.inkline-icon,.modal>.header>.close>.icon:before{font-family:inkline!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.form-input .clear-input:before,.inkline-icon:before,.modal>.header>.close>.icon:before{display:inline-block}.form-group.-sm .form-input-group>.form-input>input,.form-group.-sm .form-input-group>.form-input>select,.form-group.-sm .form-input-group>.form-input>textarea,.form-group.-sm .select>.form-input-group>.form-input>input,.form-group.-sm .select>.form-input-group>.form-input>select,.form-group.-sm .select>.form-input-group>.form-input>textarea,.form-input-group.-sm>.form-input>input,.form-input-group.-sm>.form-input>select,.form-input-group.-sm>.form-input>textarea,.form.-sm .form-input-group>.form-input>input,.form.-sm .form-input-group>.form-input>select,.form.-sm .form-input-group>.form-input>textarea,.form.-sm .select>.form-input-group>.form-input>input,.form.-sm .select>.form-input-group>.form-input>select,.form.-sm .select>.form-input-group>.form-input>textarea,.select.-sm>.form-input-group>.form-input>input,.select.-sm>.form-input-group>.form-input>select,.select.-sm>.form-input-group>.form-input>textarea{padding:.4rem .8rem;font-size:.88rem;border-radius:.2rem}.form-group.-sm .form-input-group>.form-input.-prefixed>input,.form-group.-sm .form-input-group>.form-input.-prefixed>select,.form-group.-sm .form-input-group>.form-input.-prefixed>textarea,.form-group.-sm .select>.form-input-group>.form-input.-prefixed>input,.form-group.-sm .select>.form-input-group>.form-input.-prefixed>select,.form-group.-sm .select>.form-input-group>.form-input.-prefixed>textarea,.form-input-group.-sm>.form-input.-prefixed>input,.form-input-group.-sm>.form-input.-prefixed>select,.form-input-group.-sm>.form-input.-prefixed>textarea,.form.-sm .form-input-group>.form-input.-prefixed>input,.form.-sm .form-input-group>.form-input.-prefixed>select,.form.-sm .form-input-group>.form-input.-prefixed>textarea,.form.-sm .select>.form-input-group>.form-input.-prefixed>input,.form.-sm .select>.form-input-group>.form-input.-prefixed>select,.form.-sm .select>.form-input-group>.form-input.-prefixed>textarea,.select.-sm>.form-input-group>.form-input.-prefixed>input,.select.-sm>.form-input-group>.form-input.-prefixed>select,.select.-sm>.form-input-group>.form-input.-prefixed>textarea{padding-left:3.2rem}.form-group.-sm .form-input-group>.form-input.-suffixed>input,.form-group.-sm .form-input-group>.form-input.-suffixed>select,.form-group.-sm .form-input-group>.form-input.-suffixed>textarea,.form-group.-sm .select>.form-input-group>.form-input.-suffixed>input,.form-group.-sm .select>.form-input-group>.form-input.-suffixed>select,.form-group.-sm .select>.form-input-group>.form-input.-suffixed>textarea,.form-input-group.-sm>.form-input.-suffixed>input,.form-input-group.-sm>.form-input.-suffixed>select,.form-input-group.-sm>.form-input.-suffixed>textarea,.form.-sm .form-input-group>.form-input.-suffixed>input,.form.-sm .form-input-group>.form-input.-suffixed>select,.form.-sm .form-input-group>.form-input.-suffixed>textarea,.form.-sm .select>.form-input-group>.form-input.-suffixed>input,.form.-sm .select>.form-input-group>.form-input.-suffixed>select,.form.-sm .select>.form-input-group>.form-input.-suffixed>textarea,.select.-sm>.form-input-group>.form-input.-suffixed>input,.select.-sm>.form-input-group>.form-input.-suffixed>select,.select.-sm>.form-input-group>.form-input.-suffixed>textarea{padding-right:3.2rem}.form-input-group.-sm>.form-input-append,.form-input-group.-sm>.form-input-prepend{font-size:.88rem}.form-input-group.-sm>.form-input-append>span,.form-input-group.-sm>.form-input-prepend>span{padding:.4rem .8rem}.form-input-group.-sm>.form-input-prepend,.form-input-group.-sm>.form-input-prepend>:first-child{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.form-input-group.-sm>.form-input-append,.form-input-group.-sm>.form-input-append>:last-child{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.form-group.-md .form-input-group>.form-input>input,.form-group.-md .form-input-group>.form-input>select,.form-group.-md .form-input-group>.form-input>textarea,.form-group.-md .select>.form-input-group>.form-input>input,.form-group.-md .select>.form-input-group>.form-input>select,.form-group.-md .select>.form-input-group>.form-input>textarea,.form-group .form-input-group>.form-input>input,.form-group .form-input-group>.form-input>select,.form-group .form-input-group>.form-input>textarea,.form-group .select>.form-input-group>.form-input>input,.form-group .select>.form-input-group>.form-input>select,.form-group .select>.form-input-group>.form-input>textarea,.form-input-group.-md>.form-input>input,.form-input-group.-md>.form-input>select,.form-input-group.-md>.form-input>textarea,.form-input-group>.form-input>input,.form-input-group>.form-input>select,.form-input-group>.form-input>textarea,.form.-md .form-input-group>.form-input>input,.form.-md .form-input-group>.form-input>select,.form.-md .form-input-group>.form-input>textarea,.form.-md .select>.form-input-group>.form-input>input,.form.-md .select>.form-input-group>.form-input>select,.form.-md .select>.form-input-group>.form-input>textarea,.select.-md>.form-input-group>.form-input>input,.select.-md>.form-input-group>.form-input>select,.select.-md>.form-input-group>.form-input>textarea{padding:.5rem 1rem;font-size:1.1rem;border-radius:.25rem}.form-group.-md .form-input-group>.form-input.-prefixed>input,.form-group.-md .form-input-group>.form-input.-prefixed>select,.form-group.-md .form-input-group>.form-input.-prefixed>textarea,.form-group.-md .select>.form-input-group>.form-input.-prefixed>input,.form-group.-md .select>.form-input-group>.form-input.-prefixed>select,.form-group.-md .select>.form-input-group>.form-input.-prefixed>textarea,.form-group .form-input-group>.form-input.-prefixed>input,.form-group .form-input-group>.form-input.-prefixed>select,.form-group .form-input-group>.form-input.-prefixed>textarea,.form-group .select>.form-input-group>.form-input.-prefixed>input,.form-group .select>.form-input-group>.form-input.-prefixed>select,.form-group .select>.form-input-group>.form-input.-prefixed>textarea,.form-input-group.-md>.form-input.-prefixed>input,.form-input-group.-md>.form-input.-prefixed>select,.form-input-group.-md>.form-input.-prefixed>textarea,.form-input-group>.form-input.-prefixed>input,.form-input-group>.form-input.-prefixed>select,.form-input-group>.form-input.-prefixed>textarea,.form.-md .form-input-group>.form-input.-prefixed>input,.form.-md .form-input-group>.form-input.-prefixed>select,.form.-md .form-input-group>.form-input.-prefixed>textarea,.form.-md .select>.form-input-group>.form-input.-prefixed>input,.form.-md .select>.form-input-group>.form-input.-prefixed>select,.form.-md .select>.form-input-group>.form-input.-prefixed>textarea,.select.-md>.form-input-group>.form-input.-prefixed>input,.select.-md>.form-input-group>.form-input.-prefixed>select,.select.-md>.form-input-group>.form-input.-prefixed>textarea{padding-left:4rem}.form-group.-md .form-input-group>.form-input.-suffixed>input,.form-group.-md .form-input-group>.form-input.-suffixed>select,.form-group.-md .form-input-group>.form-input.-suffixed>textarea,.form-group.-md .select>.form-input-group>.form-input.-suffixed>input,.form-group.-md .select>.form-input-group>.form-input.-suffixed>select,.form-group.-md .select>.form-input-group>.form-input.-suffixed>textarea,.form-group .form-input-group>.form-input.-suffixed>input,.form-group .form-input-group>.form-input.-suffixed>select,.form-group .form-input-group>.form-input.-suffixed>textarea,.form-group .select>.form-input-group>.form-input.-suffixed>input,.form-group .select>.form-input-group>.form-input.-suffixed>select,.form-group .select>.form-input-group>.form-input.-suffixed>textarea,.form-input-group.-md>.form-input.-suffixed>input,.form-input-group.-md>.form-input.-suffixed>select,.form-input-group.-md>.form-input.-suffixed>textarea,.form-input-group>.form-input.-suffixed>input,.form-input-group>.form-input.-suffixed>select,.form-input-group>.form-input.-suffixed>textarea,.form.-md .form-input-group>.form-input.-suffixed>input,.form.-md .form-input-group>.form-input.-suffixed>select,.form.-md .form-input-group>.form-input.-suffixed>textarea,.form.-md .select>.form-input-group>.form-input.-suffixed>input,.form.-md .select>.form-input-group>.form-input.-suffixed>select,.form.-md .select>.form-input-group>.form-input.-suffixed>textarea,.select.-md>.form-input-group>.form-input.-suffixed>input,.select.-md>.form-input-group>.form-input.-suffixed>select,.select.-md>.form-input-group>.form-input.-suffixed>textarea{padding-right:4rem}.form-input-group.-md>.form-input-append,.form-input-group.-md>.form-input-prepend,.form-input-group>.form-input-append,.form-input-group>.form-input-prepend{font-size:1.1rem}.form-input-group.-md>.form-input-append>span,.form-input-group.-md>.form-input-prepend>span,.form-input-group>.form-input-append>span,.form-input-group>.form-input-prepend>span{padding:.5rem 1rem}.form-input-group.-md>.form-input-prepend,.form-input-group.-md>.form-input-prepend>:first-child,.form-input-group>.form-input-prepend,.form-input-group>.form-input-prepend>:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.form-input-group.-md>.form-input-append,.form-input-group.-md>.form-input-append>:last-child,.form-input-group>.form-input-append,.form-input-group>.form-input-append>:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-group.-lg .form-input-group>.form-input>input,.form-group.-lg .form-input-group>.form-input>select,.form-group.-lg .form-input-group>.form-input>textarea,.form-group.-lg .select>.form-input-group>.form-input>input,.form-group.-lg .select>.form-input-group>.form-input>select,.form-group.-lg .select>.form-input-group>.form-input>textarea,.form-input-group.-lg>.form-input>input,.form-input-group.-lg>.form-input>select,.form-input-group.-lg>.form-input>textarea,.form.-lg .form-input-group>.form-input>input,.form.-lg .form-input-group>.form-input>select,.form.-lg .form-input-group>.form-input>textarea,.form.-lg .select>.form-input-group>.form-input>input,.form.-lg .select>.form-input-group>.form-input>select,.form.-lg .select>.form-input-group>.form-input>textarea,.select.-lg>.form-input-group>.form-input>input,.select.-lg>.form-input-group>.form-input>select,.select.-lg>.form-input-group>.form-input>textarea{padding:.6rem 1.2rem;font-size:1.32rem;border-radius:.3rem}.form-group.-lg .form-input-group>.form-input.-prefixed>input,.form-group.-lg .form-input-group>.form-input.-prefixed>select,.form-group.-lg .form-input-group>.form-input.-prefixed>textarea,.form-group.-lg .select>.form-input-group>.form-input.-prefixed>input,.form-group.-lg .select>.form-input-group>.form-input.-prefixed>select,.form-group.-lg .select>.form-input-group>.form-input.-prefixed>textarea,.form-input-group.-lg>.form-input.-prefixed>input,.form-input-group.-lg>.form-input.-prefixed>select,.form-input-group.-lg>.form-input.-prefixed>textarea,.form.-lg .form-input-group>.form-input.-prefixed>input,.form.-lg .form-input-group>.form-input.-prefixed>select,.form.-lg .form-input-group>.form-input.-prefixed>textarea,.form.-lg .select>.form-input-group>.form-input.-prefixed>input,.form.-lg .select>.form-input-group>.form-input.-prefixed>select,.form.-lg .select>.form-input-group>.form-input.-prefixed>textarea,.select.-lg>.form-input-group>.form-input.-prefixed>input,.select.-lg>.form-input-group>.form-input.-prefixed>select,.select.-lg>.form-input-group>.form-input.-prefixed>textarea{padding-left:4.8rem}.form-group.-lg .form-input-group>.form-input.-suffixed>input,.form-group.-lg .form-input-group>.form-input.-suffixed>select,.form-group.-lg .form-input-group>.form-input.-suffixed>textarea,.form-group.-lg .select>.form-input-group>.form-input.-suffixed>input,.form-group.-lg .select>.form-input-group>.form-input.-suffixed>select,.form-group.-lg .select>.form-input-group>.form-input.-suffixed>textarea,.form-input-group.-lg>.form-input.-suffixed>input,.form-input-group.-lg>.form-input.-suffixed>select,.form-input-group.-lg>.form-input.-suffixed>textarea,.form.-lg .form-input-group>.form-input.-suffixed>input,.form.-lg .form-input-group>.form-input.-suffixed>select,.form.-lg .form-input-group>.form-input.-suffixed>textarea,.form.-lg .select>.form-input-group>.form-input.-suffixed>input,.form.-lg .select>.form-input-group>.form-input.-suffixed>select,.form.-lg .select>.form-input-group>.form-input.-suffixed>textarea,.select.-lg>.form-input-group>.form-input.-suffixed>input,.select.-lg>.form-input-group>.form-input.-suffixed>select,.select.-lg>.form-input-group>.form-input.-suffixed>textarea{padding-right:4.8rem}.form-input-group.-lg>.form-input-append,.form-input-group.-lg>.form-input-prepend{font-size:1.32rem}.form-input-group.-lg>.form-input-append>span,.form-input-group.-lg>.form-input-prepend>span{padding:.6rem 1.2rem}.form-input-group.-lg>.form-input-prepend,.form-input-group.-lg>.form-input-prepend>:first-child{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.form-input-group.-lg>.form-input-append,.form-input-group.-lg>.form-input-append>:last-child{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.form-input-group.-light .form-input>input,.form-input-group.-light .form-input>select,.form-input-group.-light .form-input>textarea,.form-input-group .form-input>input,.form-input-group .form-input>select,.form-input-group .form-input>textarea{color:#2c3e50;background-color:#fff;border-color:#e9ecef}.form-input-group.-light .form-input>input:hover,.form-input-group.-light .form-input>select:hover,.form-input-group.-light .form-input>textarea:hover,.form-input-group .form-input>input:hover,.form-input-group .form-input>select:hover,.form-input-group .form-input>textarea:hover{border-color:#ced4db}.form-input-group.-light .form-input>input:focus,.form-input-group.-light .form-input>select:focus,.form-input-group.-light .form-input>textarea:focus,.form-input-group .form-input>input:focus,.form-input-group .form-input>select:focus,.form-input-group .form-input>textarea:focus{color:#2c3e50;border-color:#37598d}.form-input-group.-light .form-input>input::-moz-placeholder,.form-input-group.-light .form-input>select::-moz-placeholder,.form-input-group.-light .form-input>textarea::-moz-placeholder,.form-input-group .form-input>input::-moz-placeholder,.form-input-group .form-input>select::-moz-placeholder,.form-input-group .form-input>textarea::-moz-placeholder{color:#868e96}.form-input-group.-light .form-input>input:-ms-input-placeholder,.form-input-group.-light .form-input>select:-ms-input-placeholder,.form-input-group.-light .form-input>textarea:-ms-input-placeholder,.form-input-group .form-input>input:-ms-input-placeholder,.form-input-group .form-input>select:-ms-input-placeholder,.form-input-group .form-input>textarea:-ms-input-placeholder{color:#868e96}.form-input-group.-light .form-input>input::-ms-input-placeholder,.form-input-group.-light .form-input>select::-ms-input-placeholder,.form-input-group.-light .form-input>textarea::-ms-input-placeholder,.form-input-group .form-input>input::-ms-input-placeholder,.form-input-group .form-input>select::-ms-input-placeholder,.form-input-group .form-input>textarea::-ms-input-placeholder{color:#868e96}.form-input-group.-light .form-input>input::placeholder,.form-input-group.-light .form-input>select::placeholder,.form-input-group.-light .form-input>textarea::placeholder,.form-input-group .form-input>input::placeholder,.form-input-group .form-input>select::placeholder,.form-input-group .form-input>textarea::placeholder{color:#868e96}.form-input-group.-light .form-input>input:disabled,.form-input-group.-light .form-input>input[readonly],.form-input-group.-light .form-input>select:disabled,.form-input-group.-light .form-input>select[readonly],.form-input-group.-light .form-input>textarea:disabled,.form-input-group.-light .form-input>textarea[readonly],.form-input-group .form-input>input:disabled,.form-input-group .form-input>input[readonly],.form-input-group .form-input>select:disabled,.form-input-group .form-input>select[readonly],.form-input-group .form-input>textarea:disabled,.form-input-group .form-input>textarea[readonly]{color:#2c3e50;background-color:#e9ecef}.form-input-group.-light .form-input>input:disabled:hover,.form-input-group.-light .form-input>input[readonly]:hover,.form-input-group.-light .form-input>select:disabled:hover,.form-input-group.-light .form-input>select[readonly]:hover,.form-input-group.-light .form-input>textarea:disabled:hover,.form-input-group.-light .form-input>textarea[readonly]:hover,.form-input-group .form-input>input:disabled:hover,.form-input-group .form-input>input[readonly]:hover,.form-input-group .form-input>select:disabled:hover,.form-input-group .form-input>select[readonly]:hover,.form-input-group .form-input>textarea:disabled:hover,.form-input-group .form-input>textarea[readonly]:hover{border-color:#e9ecef}.form-input-group.-light .form-input>input[readonly]:focus,.form-input-group.-light .form-input>select[readonly]:focus,.form-input-group.-light .form-input>textarea[readonly]:focus,.form-input-group .form-input>input[readonly]:focus,.form-input-group .form-input>select[readonly]:focus,.form-input-group .form-input>textarea[readonly]:focus{outline:0;border-color:#ced4db}.form-input-group.-light .form-input .form-input-prefix,.form-input-group .form-input .form-input-prefix{border-right-color:#e9ecef}.form-input-group.-light .form-input .form-input-suffix,.form-input-group .form-input .form-input-suffix{border-left-color:#e9ecef}.form-input-group.-light .form-input .clear-input,.form-input-group .form-input .clear-input{background-color:#e9ecef;color:#343a40}.form-input-group.-light .form-input .clear-input:hover,.form-input-group .form-input .clear-input:hover{color:#343a40;background-color:#37598d}.form-input-group.-light .form-input-append,.form-input-group.-light .form-input-prepend,.form-input-group .form-input-append,.form-input-group .form-input-prepend{background-color:#e9ecef}.select.-light:not([readonly])>.form-input-group>.form-input>input[readonly]:not([disabled]){background-color:#fff}.select.-light[readonly]>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#ced4db}.select.-light>.form-input-group>.form-input>input{color:#2c3e50}.select.-light>.form-input-group>.form-input>input[readonly]{cursor:pointer}.select.-light>.form-input-group>.form-input>input[readonly]:disabled{cursor:default}.select.-light>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#37598d}.form-input-group.-dark .form-input>input,.form-input-group.-dark .form-input>select,.form-input-group.-dark .form-input>textarea{color:#f8f9fa;background-color:#2d3238;border-color:#495057}.form-input-group.-dark .form-input>input:hover,.form-input-group.-dark .form-input>select:hover,.form-input-group.-dark .form-input>textarea:hover{border-color:#59626a}.form-input-group.-dark .form-input>input:focus,.form-input-group.-dark .form-input>select:focus,.form-input-group.-dark .form-input>textarea:focus{color:#f8f9fa;border-color:#37598d}.form-input-group.-dark .form-input>input::-moz-placeholder,.form-input-group.-dark .form-input>select::-moz-placeholder,.form-input-group.-dark .form-input>textarea::-moz-placeholder{color:#ced4da}.form-input-group.-dark .form-input>input:-ms-input-placeholder,.form-input-group.-dark .form-input>select:-ms-input-placeholder,.form-input-group.-dark .form-input>textarea:-ms-input-placeholder{color:#ced4da}.form-input-group.-dark .form-input>input::-ms-input-placeholder,.form-input-group.-dark .form-input>select::-ms-input-placeholder,.form-input-group.-dark .form-input>textarea::-ms-input-placeholder{color:#ced4da}.form-input-group.-dark .form-input>input::placeholder,.form-input-group.-dark .form-input>select::placeholder,.form-input-group.-dark .form-input>textarea::placeholder{color:#ced4da}.form-input-group.-dark .form-input>input:disabled,.form-input-group.-dark .form-input>input[readonly],.form-input-group.-dark .form-input>select:disabled,.form-input-group.-dark .form-input>select[readonly],.form-input-group.-dark .form-input>textarea:disabled,.form-input-group.-dark .form-input>textarea[readonly]{color:#f8f9fa;background-color:#495057}.form-input-group.-dark .form-input>input:disabled:hover,.form-input-group.-dark .form-input>input[readonly]:hover,.form-input-group.-dark .form-input>select:disabled:hover,.form-input-group.-dark .form-input>select[readonly]:hover,.form-input-group.-dark .form-input>textarea:disabled:hover,.form-input-group.-dark .form-input>textarea[readonly]:hover{border-color:#495057}.form-input-group.-dark .form-input>input[readonly]:focus,.form-input-group.-dark .form-input>select[readonly]:focus,.form-input-group.-dark .form-input>textarea[readonly]:focus{outline:0;border-color:#59626a}.form-input-group.-dark .form-input .form-input-prefix{border-right-color:#495057}.form-input-group.-dark .form-input .form-input-suffix{border-left-color:#495057}.form-input-group.-dark .form-input .clear-input{background-color:#343a40;color:#fff}.form-input-group.-dark .form-input .clear-input:hover{color:#fff;background-color:#37598d}.form-input-group.-dark .form-input-append,.form-input-group.-dark .form-input-prepend{background-color:#343a40}.select.-dark:not([readonly])>.form-input-group>.form-input>input[readonly]:not([disabled]){background-color:#2d3238}.select.-dark[readonly]>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#59626a}.select.-dark>.form-input-group>.form-input>input{color:#f8f9fa}.select.-dark>.form-input-group>.form-input>input[readonly]{cursor:pointer}.select.-dark>.form-input-group>.form-input>input[readonly]:disabled{cursor:default}.select.-dark>.form-input-group>.form-input>input[readonly]:not(:disabled):focus{border-color:#37598d}.form-input{position:relative;display:flex;flex:1 0 auto;flex-direction:row}.form-input>input,.form-input>select,.form-input>textarea{position:relative;flex:1 0 auto;width:1%;line-height:1.5;background-clip:padding-box;border-width:1px;border-style:solid;box-shadow:inset 0 1px 1px rgba(0,0,0,.05);transition:background-color .21s ease,color .21s ease,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-input>input::-ms-expand,.form-input>select::-ms-expand,.form-input>textarea::-ms-expand{background-color:transparent;border:0}.form-input>input:focus,.form-input>select:focus,.form-input>textarea:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.form-input>input::-moz-placeholder,.form-input>select::-moz-placeholder,.form-input>textarea::-moz-placeholder{opacity:1}.form-input>input:-ms-input-placeholder,.form-input>select:-ms-input-placeholder,.form-input>textarea:-ms-input-placeholder{opacity:1}.form-input>input::-ms-input-placeholder,.form-input>select::-ms-input-placeholder,.form-input>textarea::-ms-input-placeholder{opacity:1}.form-input>input::placeholder,.form-input>select::placeholder,.form-input>textarea::placeholder{opacity:1}.form-input>input:disabled,.form-input>input[readonly],.form-input>select:disabled,.form-input>select[readonly],.form-input>textarea:disabled,.form-input>textarea[readonly]{opacity:1;cursor:default}.form-input>input[readonly]:focus,.form-input>select[readonly]:focus,.form-input>textarea[readonly]:focus{outline:0}.form-input .form-input-prefix,.form-input .form-input-suffix{z-index:1;top:50%;position:absolute;transform:translateY(-50%);font-style:normal;color:#868e96;transition:border-color .21s ease}.form-input .form-input-prefix>button,.form-input .form-input-suffix>button{background:transparent;border:0;color:#343a40}.form-input .form-input-prefix{left:1rem;padding-right:1rem;border-right-width:1px;border-right-style:solid}.form-input .form-input-suffix{right:1rem;padding-left:1rem;border-left-width:1px;border-left-style:solid}.form-input .clear-input{transition:background-color .21s ease;display:flex;justify-content:center;align-items:center;cursor:pointer;width:1.2rem;height:1.2rem;border-radius:100%}.form-input .clear-input:before{font-size:8px;content:""}.form-input>input,.form-input>select,.form-input>textarea{padding:.5rem 1rem;font-size:1.1rem;border-radius:.25rem}.form-input.-prefixed>input,.form-input.-prefixed>select,.form-input.-prefixed>textarea{padding-left:4rem}.form-input.-suffixed>input,.form-input.-suffixed>select,.form-input.-suffixed>textarea{padding-right:4rem}.form-group.-error .form-input-group>.form-input>input,.form-group.-error .form-input-group>.form-input>select,.form-group.-error .form-input-group>.form-input>textarea{border-color:#f25f5c}.form-input-group{display:block;vertical-align:middle;position:relative}.form-input-group.-appended,.form-input-group.-prepended{display:flex;flex-wrap:nowrap}.form-input-group.-appended .form-input,.form-input-group.-prepended .form-input{flex-shrink:1}.form-input-group.-prepended .form-input>input,.form-input-group.-prepended .form-input>select,.form-input-group.-prepended .form-input>textarea{border-top-left-radius:0;border-bottom-left-radius:0}.form-input-group.-appended .form-input>input,.form-input-group.-appended .form-input>select,.form-input-group.-appended .form-input>textarea{border-top-right-radius:0;border-bottom-right-radius:0}.form-input-group>.form-input-append,.form-input-group>.form-input-prepend{display:flex;flex-flow:row nowrap;align-items:stretch}.form-input-group>.form-input-append>*,.form-input-group>.form-input-prepend>*{flex:auto 1 0;border-radius:0}.form-input-append,.form-input-prepend{align-items:center;display:flex;padding:0;line-height:1.5;transition:background-color .21s ease}._clearfix:after{content:"";display:table;clear:both}.alert,.alert.-primary{border-color:#6680a9;background-color:#879bbb;color:#0c141f}.alert.-primary a,.alert a{color:#05080d}.alert.-primary>.icon,.alert>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-primary code,.alert code{background-color:#9eaec8;color:#000}.inkline.-dark .alert,.inkline.-dark .alert.-primary{border-color:#3e5a88;background-color:#2e4365;color:#8ba7d2}.inkline.-dark .alert.-primary a,.inkline.-dark .alert a{color:#9eb5d9}.inkline.-dark .alert.-primary code,.inkline.-dark .alert code{background-color:#23334c;color:#b0c3e0}.alert.-secondary{border-color:#7a81c6;background-color:#9ea3d5;color:#262a57}.alert.-secondary a{color:#1e2145}.alert.-secondary>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-secondary code{background-color:#b7bbe0;color:#161934}.inkline.-dark .alert.-secondary{border-color:#575da0;background-color:#454a7f;color:#c8cbe7}.inkline.-dark .alert.-secondary a{color:#dadbef}.inkline.-dark .alert.-secondary code{background-color:#383d68;color:#ebecf7}.alert.-success{border-color:#7dbf8c;background-color:#9fd0aa;color:#274f30}.alert.-success a{color:#1f3e26}.alert.-success>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-success code{background-color:#b7dcbf;color:#162d1b}.inkline.-dark .alert.-success{border-color:#59976c;background-color:#467755;color:#c5e3cc}.inkline.-dark .alert.-success a{color:#d6ebdb}.inkline.-dark .alert.-success code{background-color:#396145;color:#e8f3ea}.alert.-danger{border-color:#f3716e;background-color:#f79f9d;color:#a8100d}.alert.-danger a{color:#900e0b}.alert.-danger>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-danger code{background-color:#fabfbe;color:#780c0a}.inkline.-dark .alert.-danger{border-color:#b86061;background-color:#9e4748;color:#fdeaea}.inkline.-dark .alert.-danger a{color:#fff}.inkline.-dark .alert.-danger code{background-color:#853c3d;color:#fff}.alert.-warning{border-color:#f3b669;background-color:#f7cd98;color:#9e5f0d}.alert.-warning a{color:#87510b}.alert.-warning>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-warning code{background-color:#faddb9;color:#6f4209}.inkline.-dark .alert.-warning{border-color:#b98f59;background-color:#9d7542;color:#fdf0e0}.inkline.-dark .alert.-warning a{color:#fefcf8}.inkline.-dark .alert.-warning code{background-color:#846237;color:#fff}.alert.-info{border-color:#7cc9cc;background-color:#a1d8da;color:#276163}.alert.-info a{color:#204f51}.alert.-info>.icon{border-color:hsla(0,0%,100%,.33)}.alert.-info code{background-color:#bbe3e4;color:#193d3e}.inkline.-dark .alert.-info{border-color:#5aa0a5;background-color:#488084;color:#d0ebec}.inkline.-dark .alert.-info a{color:#e2f3f4}.inkline.-dark .alert.-info code{background-color:#3b6a6d;color:#f4fbfb}.alert.-sm{border-radius:.2rem;font-size:.88rem}.alert.-sm>.content{padding:.8rem}.alert.-sm>.title{margin-bottom:.8rem}.alert.-sm>.link+.link{margin-left:.8rem}.alert.-sm>.dismiss{padding:.4rem;margin-right:.4rem;margin-left:.4rem}.alert.-sm>.icon{padding-left:.8rem;padding-right:.8rem}.alert,.alert.-md{border-radius:.25rem;font-size:1.1rem}.alert.-md>.content,.alert>.content{padding:1rem}.alert.-md>.title,.alert>.title{margin-bottom:1rem}.alert.-md>.link+.link,.alert>.link+.link{margin-left:1rem}.alert.-md>.dismiss,.alert>.dismiss{padding:.5rem;margin-right:.5rem;margin-left:.5rem}.alert.-md>.icon,.alert>.icon{padding-left:1rem;padding-right:1rem}.alert.-lg{border-radius:.3rem;font-size:1.32rem}.alert.-lg>.content{padding:1.2rem}.alert.-lg>.title{margin-bottom:1.2rem}.alert.-lg>.link+.link{margin-left:1.2rem}.alert.-lg>.dismiss{padding:.6rem;margin-right:.6rem;margin-left:.6rem}.alert.-lg>.icon{padding-left:1.2rem;padding-right:1.2rem}.alert{position:relative;display:flex;flex-direction:row;flex:1 1 auto;min-width:0;word-wrap:break-word;background-clip:border-box;border-width:1px;border-style:solid;transition:background-color .21s ease,color .21s ease,border-color .21s ease;align-items:center}.alert a{font-weight:600;transition:color .21s ease}.alert>.icon{flex:1}.alert.-dismissible>.content{padding-right:0}.alert.-with-icon>.content{padding-left:0}.alert>.dismiss{flex:0 0 auto;cursor:pointer;display:inline-block;text-align:center}.alert,.alert>.content{flex:0 1 100%}.alert>.content>hr,.alert>hr{margin-right:0;margin-left:0}.alert>.content>:first-child,.alert>:first-child{margin-top:0}.alert>.content>:last-child,.alert>:last-child{margin-bottom:0}.tabs.-code{display:flex;flex-direction:row}.tabs.-code .header{flex:25%;margin-right:1rem}.tabs.-code .tab{flex:100%;max-width:75%}@media screen and (max-width:979px){.tabs.-code{flex-direction:column}.tabs.-code .tab{max-width:100%}}.info-alert{border:1px solid #37598d;border-left-width:5px;padding:1rem;margin:2rem 0 1rem}.info-alert p{margin:0}.link-card .icon{position:absolute;right:2rem;top:50%;margin-top:-8px;transition:right .3s ease}.link-card:hover .icon{right:1rem}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#37598d}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}.theme-default-content:not(.custom) ol,.theme-default-content:not(.custom) p,.theme-default-content:not(.custom) ul{line-height:1.7}.theme-default-content:not(.custom) a{font-weight:500;color:#37598d;text-decoration:none}.theme-default-content:not(.custom) p a code{font-weight:400;color:#37598d}.theme-default-content:not(.custom) kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}.theme-default-content:not(.custom) blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}.theme-default-content:not(.custom) blockquote>p{margin:0}.theme-default-content:not(.custom) ol,.theme-default-content:not(.custom) ul{padding-left:1.2em}.theme-default-content:not(.custom) strong{font-weight:600}.theme-default-content:not(.custom) h1,.theme-default-content:not(.custom) h2,.theme-default-content:not(.custom) h3,.theme-default-content:not(.custom) h4,.theme-default-content:not(.custom) h5,.theme-default-content:not(.custom) h6{font-weight:600;line-height:1.25;margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom) h1:first-child,.theme-default-content:not(.custom) h2:first-child,.theme-default-content:not(.custom) h3:first-child,.theme-default-content:not(.custom) h4:first-child,.theme-default-content:not(.custom) h5:first-child,.theme-default-content:not(.custom) h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom) h1:first-child+.custom-block,.theme-default-content:not(.custom) h1:first-child+p,.theme-default-content:not(.custom) h1:first-child+pre,.theme-default-content:not(.custom) h2:first-child+.custom-block,.theme-default-content:not(.custom) h2:first-child+p,.theme-default-content:not(.custom) h2:first-child+pre,.theme-default-content:not(.custom) h3:first-child+.custom-block,.theme-default-content:not(.custom) h3:first-child+p,.theme-default-content:not(.custom) h3:first-child+pre,.theme-default-content:not(.custom) h4:first-child+.custom-block,.theme-default-content:not(.custom) h4:first-child+p,.theme-default-content:not(.custom) h4:first-child+pre,.theme-default-content:not(.custom) h5:first-child+.custom-block,.theme-default-content:not(.custom) h5:first-child+p,.theme-default-content:not(.custom) h5:first-child+pre,.theme-default-content:not(.custom) h6:first-child+.custom-block,.theme-default-content:not(.custom) h6:first-child+p,.theme-default-content:not(.custom) h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom) h1:hover .header-anchor,.theme-default-content:not(.custom) h2:hover .header-anchor,.theme-default-content:not(.custom) h3:hover .header-anchor,.theme-default-content:not(.custom) h4:hover .header-anchor,.theme-default-content:not(.custom) h5:hover .header-anchor,.theme-default-content:not(.custom) h6:hover .header-anchor{opacity:1}.theme-default-content:not(.custom) h1{font-size:2.2rem}.theme-default-content:not(.custom) h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #dfdfdf}.theme-default-content:not(.custom) h3{font-size:1.35rem}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #dfdfdf}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #dfdfdf;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-container.blank .page{padding-bottom:0}.theme-container.blank .theme-default-content{max-width:unset;padding:2rem 0 0}.theme-container.blank .page-edit{display:none}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#blog-post{margin-top:6rem;margin-bottom:4rem;max-width:740px;font-size:1.2rem}#blog-post .blog-post-excerpt,#blog-post .blog-post-title{text-align:center;margin-bottom:2rem}#blog-post .blog-post-excerpt{color:#4f6478}#blog-post .blog-post-meta{color:#4f6478;margin-bottom:6rem;text-align:center;font-size:14px;font-weight:600}#blog-post .blog-post-image{position:relative;width:75vw;min-width:100%;margin:4vw calc(50% - 50vw);transform:translateX(calc(50vw - 50%))}#blog-post h2{border-bottom:0}#blog-posts{margin-bottom:4rem}#blog .theme-default-content{padding:0}@media screen and (min-width:720px){#blog .sidebar{display:none}}.blog-entry{margin-bottom:2rem}.blog-entry .body{border:0}.blog-entry .blog-entry-image{overflow:hidden;position:relative}.blog-entry .blog-entry-image .foreground{z-index:1;position:absolute;top:50%;transform:translateY(-50%)}.blog-entry .blog-entry-title{text-decoration:none}.blog-entry .blog-entry-title h2{margin:0;font-size:1.6rem}.blog-entry .blog-entry-meta{margin:.5rem 0;font-size:.8rem;color:#4f6478}.blog-entry .blog-entry-description{margin:0;color:#4f6478;font-size:1rem}.hero{text-align:center;display:block;background-image:url(/header3.jpg);background-attachment:static;background-repeat:no-repeat;background-size:cover;background-position:50%;padding:3.6rem 0 0}.hero .hero-content{max-width:1170px;padding:2rem .5rem 10rem;display:block;margin:0 auto}.hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.hero h1{font-size:3rem}.hero .description,.hero h1{margin:2rem auto}.hero .action{margin:2rem auto 1rem}.hero .description{max-width:35rem;font-size:1.2rem;line-height:1.5;color:#6a8bad}@media (max-width:419px){.hero img{max-height:210px;margin:2rem auto 1.2rem}.hero h1{font-size:2rem}.hero .action,.hero .description,.hero h1{margin:1.2rem auto}.hero .description{font-size:1.2rem}.hero .action-button{font-size:1rem;padding:.6rem 1.2rem}}.section{padding-top:8rem;padding-bottom:8rem}.section .section-center{text-align:center;max-width:800px;margin:0 auto}.section h1,.section h2,.section h3,.section h4,.section h5,.section h6{margin-top:0}.navbar .home-link span{text-indent:-10000px}.navbar a:active,.navbar a:focus,.navbar a:hover{text-decoration:none}.sidebar ul li{margin-bottom:0}div[class*=language-]>pre{margin:0}pre code{font-size:.9rem}#homepage .header-anchor{display:none}#features{margin-top:-40px}@media (max-width:980px){#features{flex-direction:column;text-align:center}}#easy-setup-section{margin-top:-2rem;text-align:center}#easy-setup-section .container{max-width:980px}#easy-setup-section div.language-bash{margin-top:2rem;width:auto;display:inline-block;max-width:100%}#video-section{color:#fff;background-color:#37598d;text-align:center;background-image:url(/corner-left-right-asymmetric-gray.png);background-size:100% auto;background-repeat:no-repeat;background-position:top}#video-section h2{margin-top:0;border-bottom:0;color:#fff}#video-section p{color:hsla(0,0%,100%,.8)}#video-section .video-features{display:flex;width:100%;margin-top:4rem}#video-section .video-features ul{width:33%;text-align:left;margin-left:2rem}#video-section .video-features ul li{display:flex;align-items:center;margin-bottom:.5rem}#video-section .video-features ul svg{margin-right:1rem}#video-section .video-features .video{padding:1rem;background:#fff;display:block;width:67%;box-sizing:border-box}@media screen and (max-width:979px){#video-section .video-features{flex-direction:column}#video-section .video-features .video,#video-section .video-features ul{width:100%;margin-left:0}#video-section .video-features ul{margin-top:2rem}}#code-tabs{background:#f8f9fa!important}#code-examples svg{width:3rem;height:3rem;color:#37598d}#code-examples img{width:4rem}#code-examples h2{margin-top:1rem}#code-examples .row{align-items:center}@media screen and (max-width:979px){#code-examples{text-align:center}#code-examples .inverse{flex-direction:column-reverse}#code-examples p,#code-examples ul{text-align:left}#code-examples .terminal-wrapper{margin-bottom:1rem}}@media screen and (max-width:767px){#comingsoon ul li._text-muted{display:none}}#usedby{padding-top:4rem;padding-bottom:2rem;justify-content:space-between;text-align:center}#usedby .column{display:flex;flex-wrap:wrap;justify-content:center}#usedby .column a{margin:1rem}#usedby img{margin:0 auto 2rem;display:block;opacity:.5;transition:opacity .3s ease;height:45px;width:auto}#usedby img:hover{opacity:.6}#performance img{margin:1rem auto 0}#qldb-comparison{padding-bottom:5rem}#qldb-comparison .fa-bolt{font-size:64px;margin-bottom:1rem}#get-started-end .button{margin-top:2rem}#get-started-end .section-center{margin-bottom:0}.jobs ul{border:1px solid #dfdfdf;list-style:none;padding-left:0!important}.jobs ul li{border-bottom:1px solid #dfdfdf;margin:0}.jobs ul li:last-child{border-bottom:0}.jobs ul li a{display:block;padding:1rem;text-decoration:none!important}.jobs ul li a:focus,.jobs ul li a:hover{background:#f9f9f9}#nprogress{pointer-events:none}#nprogress .bar{background:#37598d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #37598d,0 0 5px #37598d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#37598d transparent transparent #37598d;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-tabs__header{padding:0;position:relative;margin:15px 0}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#3eaf7c;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-tabs__new-tab .el-icon-plus{transform:scale(.8)}.el-tabs__new-tab:hover{color:#3eaf7c}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399;width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:inset 0 0 2px 2px #3eaf7c;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#3eaf7c}.el-tabs__item:hover{color:#3eaf7c;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);margin-top:15px}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#3eaf7c;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#3eaf7c}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border:1px solid #e4e7ed;border-bottom:none;border-left:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:none;border-top:1px solid #e4e7ed;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:none;border-top:1px solid #e4e7ed;border-left:1px solid #fff}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.footer{padding:2.5rem;border-top:1px solid #dfdfdf;color:#4e6e8e}.footer .column{display:flex;justify-content:space-between}@media screen and (max-width:767px){.footer .column{flex-direction:column-reverse;align-items:center}.footer .column .nav{margin-bottom:1rem}}.subscribe-modal .close .icon{display:none}.subscribe-modal .close:before{font-family:Helvetica,monospace;content:"x";font-size:12px;display:inline-block}.home{padding:3.6rem 2rem 0;max-width:1170px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#37598d;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #32507f}.home .hero .action-button:hover{background-color:#4067a4}.home .features{border-top:1px solid #dfdfdf;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #dfdfdf;text-align:center;color:#4e6e8e}#github-button{height:28px}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}#research-paper-button:focus,#research-paper-button:hover{text-decoration:none!important}#research-paper-button:focus span,#research-paper-button:hover span{text-decoration:underline!important}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #dfdfdf}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#dfdfdf;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#37598d;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#2c3e50}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#dfdfdf;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#dfdfdf}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#2c3e50}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #c9c9c9;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#37598d}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #c9c9c9;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#37598d}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#37598d}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #37598d;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#37598d}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#37598d}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #3e649f}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #dfdfdf;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#37598d;border-left-color:#37598d}.sidebar-heading.clickable:hover{color:#37598d}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#37598d}a.sidebar-link.active{font-weight:600;color:#37598d;border-left-color:#37598d}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #dfdfdf;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.feature{padding:1.2rem;box-sizing:border-box;background:#fff;margin-bottom:2rem;border-radius:4px;border:1px solid #dfdfdf;border-bottom:4px solid #37598d}.feature img{max-width:100px;margin:0 auto;display:block}.feature h2{font-size:1.4rem;font-weight:500;margin-top:1.5rem;border-bottom:none;padding-bottom:0;color:#37598d;text-align:center}@media (max-width:980px){.feature{width:100%;max-width:100%}}.terminal-wrapper{display:block;box-sizing:border-box}.terminal-wrapper .title{text-align:center}.terminal-wrapper .red{background:#ec6a5f;border-color:#d04e42}.terminal-wrapper .green{background:#64cc57;border-color:#4ea73b}.terminal-wrapper .yellow{background:#f5c04f;border-color:#d6a13d}.terminal-wrapper .clear{clear:both}.terminal{border-radius:5px;position:relative}.terminal .bar{background:#e8e6e8;color:#000;padding:5px;border-radius:5px 5px 0 0}.terminal .buttons{position:absolute;top:7px;left:5px}.terminal .circle{width:12px;height:12px;display:inline-block;border-radius:15px;margin-left:2px;border-width:1px;border-style:solid}.terminal .body{background:#282c34;border-radius:0 0 5px 5px;overflow:hidden}.terminal div[class*=language-]{border-radius:0}.terminal div[class*=language-] pre{padding:2rem;display:block;box-sizing:border-box;overflow:auto;margin:0;min-height:350px}.badge[data-v-0d148f50]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-0d148f50],.badge.tip[data-v-0d148f50],.badge[data-v-0d148f50]{background-color:#42b983}.badge.error[data-v-0d148f50]{background-color:#da5961}.badge.warn[data-v-0d148f50],.badge.warning[data-v-0d148f50],.badge.yellow[data-v-0d148f50]{background-color:#e7c000}.badge+.badge[data-v-0d148f50]{margin-left:5px}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input:-ms-input-placeholder{color:#aaa}.searchbox__input::-ms-input-placeholder{color:#aaa}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:sbx-reset-in;animation-name:sbx-reset-in;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block} \ No newline at end of file diff --git a/docs/assets/js/1.b6474e8c.js b/docs/assets/js/1.b6474e8c.js deleted file mode 100644 index ff56712b99..0000000000 --- a/docs/assets/js/1.b6474e8c.js +++ /dev/null @@ -1,7 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{311:function(e,t,r){"use strict";var n=r(342),o=Object.prototype.toString;function i(e){return"[object Array]"===o.call(e)}function a(e){return void 0===e}function s(e){return null!==e&&"object"==typeof e}function u(e){return"[object Function]"===o.call(e)}function c(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var r=0,n=e.length;r1||"".split(/.?/).length?function(e,r){var n=String(a(this)),i=void 0===r?4294967295:r>>>0;if(0===i)return[];if(void 0===e)return[n];if(!o(e))return t.call(n,e,i);for(var s,u,c,l=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),d=0,g=new RegExp(e.source,h+"g");(s=f.call(g,n))&&!((u=g.lastIndex)>d&&(l.push(n.slice(d,s.index)),s.length>1&&s.index=i));)g.lastIndex===s.index&&g.lastIndex++;return d===n.length?!c&&g.test("")||l.push(""):l.push(n.slice(d)),l.length>i?l.slice(0,i):l}:"0".split(void 0,0).length?function(e,r){return void 0===e&&0===r?[]:t.call(this,e,r)}:t,[function(t,r){var o=a(this),i=null==t?void 0:t[e];return void 0!==i?i.call(t,o,r):n.call(String(o),t,r)},function(e,o){var a=r(n,e,this,o,n!==t);if(a.done)return a.value;var f=i(e),h=String(this),p=s(f,RegExp),v=f.unicode,m=(f.ignoreCase?"i":"")+(f.multiline?"m":"")+(f.unicode?"u":"")+(g?"y":"g"),b=new p(g?f:"^(?:"+f.source+")",m),y=void 0===o?4294967295:o>>>0;if(0===y)return[];if(0===h.length)return null===l(b,h)?[h]:[];for(var w=0,x=0,k=[];x=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},n.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){u.headers[e]=n.merge(i)})),e.exports=u},346:function(e,t,r){"use strict";var n=r(311),o=r(372),i=r(343),a=r(374),s=r(377),u=r(378),c=r(347);e.exports=function(e){return new Promise((function(t,l){var f=e.data,h=e.headers;n.isFormData(f)&&delete h["Content-Type"];var p=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",g=e.auth.password||"";h.Authorization="Basic "+btoa(d+":"+g)}var v=a(e.baseURL,e.url);if(p.open(e.method.toUpperCase(),i(v,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p.onreadystatechange=function(){if(p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in p?s(p.getAllResponseHeaders()):null,n={data:e.responseType&&"text"!==e.responseType?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:r,config:e,request:p};o(t,l,n),p=null}},p.onabort=function(){p&&(l(c("Request aborted",e,"ECONNABORTED",p)),p=null)},p.onerror=function(){l(c("Network Error",e,null,p)),p=null},p.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),l(c(t,e,"ECONNABORTED",p)),p=null},n.isStandardBrowserEnv()){var m=r(379),b=(e.withCredentials||u(v))&&e.xsrfCookieName?m.read(e.xsrfCookieName):void 0;b&&(h[e.xsrfHeaderName]=b)}if("setRequestHeader"in p&&n.forEach(h,(function(e,t){void 0===f&&"content-type"===t.toLowerCase()?delete h[t]:p.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(p.withCredentials=!!e.withCredentials),e.responseType)try{p.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&p.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){p&&(p.abort(),l(e),p=null)})),void 0===f&&(f=null),p.send(f)}))}},347:function(e,t,r){"use strict";var n=r(373);e.exports=function(e,t,r,o,i){var a=new Error(e);return n(a,t,r,o,i)}},348:function(e,t,r){"use strict";var n=r(311);e.exports=function(e,t){t=t||{};var r={},o=["url","method","params","data"],i=["headers","auth","proxy"],a=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];n.forEach(o,(function(e){void 0!==t[e]&&(r[e]=t[e])})),n.forEach(i,(function(o){n.isObject(t[o])?r[o]=n.deepMerge(e[o],t[o]):void 0!==t[o]?r[o]=t[o]:n.isObject(e[o])?r[o]=n.deepMerge(e[o]):void 0!==e[o]&&(r[o]=e[o])})),n.forEach(a,(function(n){void 0!==t[n]?r[n]=t[n]:void 0!==e[n]&&(r[n]=e[n])}));var s=o.concat(i).concat(a),u=Object.keys(t).filter((function(e){return-1===s.indexOf(e)}));return n.forEach(u,(function(n){void 0!==t[n]?r[n]=t[n]:void 0!==e[n]&&(r[n]=e[n])})),r}},349:function(e,t,r){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},350:function(e,t,r){var n=r(25),o="["+r(324)+"]",i=RegExp("^"+o+o+"*"),a=RegExp(o+o+"*$"),s=function(e){return function(t){var r=String(n(t));return 1&e&&(r=r.replace(i,"")),2&e&&(r=r.replace(a,"")),r}};e.exports={start:s(1),end:s(2),trim:s(3)}},351:function(e,t,r){var n=r(2),o=r(3),i=r(23),a=o("iterator");e.exports=!n((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,r="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),r+=n+e})),i&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},352:function(e,t,r){"use strict";var n=r(1),o=r(350).trim;n({target:"String",proto:!0,forced:r(392)("trim")},{trim:function(){return o(this)}})},353:function(e,t,r){var n=r(7),o=r(4),i=r(103),a=r(393),s=r(9).f,u=r(72).f,c=r(175),l=r(112),f=r(188),h=r(12),p=r(2),d=r(31).set,g=r(186),v=r(3)("match"),m=o.RegExp,b=m.prototype,y=/a/g,w=/a/g,x=new m(y)!==y,k=f.UNSUPPORTED_Y;if(n&&i("RegExp",!x||k||p((function(){return w[v]=!1,m(y)!=y||m(w)==w||"/a/i"!=m(y,"i")})))){for(var S=function(e,t){var r,n=this instanceof S,o=c(e),i=void 0===t;if(!n&&o&&e.constructor===S&&i)return e;x?o&&!i&&(e=e.source):e instanceof S&&(i&&(t=l.call(e)),e=e.source),k&&(r=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,""));var s=a(x?new m(e,t):m(e,t),n?this:b,S);return k&&r&&d(s,{sticky:r}),s},R=function(e){e in S||s(S,e,{configurable:!0,get:function(){return m[e]},set:function(t){m[e]=t}})},C=u(m),L=0;C.length>L;)R(C[L++]);b.constructor=S,S.prototype=b,h(o,"RegExp",S)}g("RegExp")},354:function(e,t){e.exports=function(e){return null==e}},358:function(e,t,r){"use strict";var n=r(1),o=r(359);n({target:"String",proto:!0,forced:r(360)("link")},{link:function(e){return o(this,"a","href",e)}})},359:function(e,t,r){var n=r(25),o=/"/g;e.exports=function(e,t,r,i){var a=String(n(e)),s="<"+t;return""!==r&&(s+=" "+r+'="'+String(i).replace(o,""")+'"'),s+">"+a+""}},360:function(e,t,r){var n=r(2);e.exports=function(e){return n((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},362:function(e,t,r){"use strict";t.a={name:"github-button",props:["href","ariaLabel","title","dataIcon","dataColorScheme","dataSize","dataShowCount","dataText"],render:function(e){return e("span",[e("a",{attrs:{href:this.href,"aria-label":this.ariaLabel,title:this.title,"data-icon":this.dataIcon,"data-color-scheme":this.dataColorScheme,"data-size":this.dataSize,"data-show-count":this.dataShowCount,"data-text":this.dataText},ref:"_"},this.$slots.default)])},mounted:function(){this.paint()},beforeUpdate:function(){this.reset()},updated:function(){this.paint()},beforeDestroy:function(){this.reset()},methods:{paint:function(){const e=this.$el.appendChild(document.createElement("span")),t=this;Promise.resolve().then(r.bind(null,363)).then((function(r){r.render(e.appendChild(t.$refs._),(function(t){try{e.parentNode.replaceChild(t,e)}catch(e){}}))}))},reset:function(){this.$el.replaceChild(this.$refs._,this.$el.lastChild)}}}},363:function(e,t,r){"use strict";r.r(t),r.d(t,"render",(function(){return L})); -/*! - * github-buttons v2.11.0 - * (c) 2020 なつき - * @license BSD-2-Clause - */ -var n=window.document,o=window.Math,i=window.HTMLElement,a=window.XMLHttpRequest,s=function(e){return function(t,r,n){var o=e.createElement(t);if(null!=r)for(var i in r){var a=r[i];null!=a&&(null!=o[i]?o[i]=a:o.setAttribute(i,a))}if(null!=n)for(var s=0,u=n.length;s'}}},heart:{heights:{16:{width:16,path:''}}},eye:{heights:{16:{width:16,path:''}}},star:{heights:{16:{width:16,path:''}}},"repo-forked":{heights:{16:{width:16,path:''}}},"repo-template":{heights:{16:{width:16,path:''}}},"issue-opened":{heights:{16:{width:16,path:''}}},download:{heights:{16:{width:16,path:''}}}},y=function(e,t){e=(""+e).toLowerCase().replace(/^octicon-/,""),c(b,e)||(e="mark-github");var r=t>=24&&24 in b[e].heights?24:16,n=b[e].heights[r];return'"},w={},x=function(e,t){var r=w[e]||(w[e]=[]);if(!(r.push(t)>1)){var n=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete w[e];t=r.shift();)t.apply(null,arguments)}));if(f){var o=new a;p(o,"abort",n),p(o,"error",n),p(o,"load",(function(){var e;try{e=JSON.parse(o.responseText)}catch(e){return void n(e)}n(200!==o.status,e)})),o.open("GET",e),o.send()}else{var i=this||window;i._=function(e){i._=null,n(200!==e.meta.status,e.data)};var u=s(i.document)("script",{async:!0,src:e+(/\?/.test(e)?"&":"?")+"callback=_"}),c=function(){i._&&i._({meta:{}})};p(u,"load",c),p(u,"error",c),u.readyState&&function(e,t,r){var n=function(o){if(t.test(e.readyState))return d(e,"readystatechange",n),r(o)};p(e,"readystatechange",n)}(u,/de|m/,c),i.document.getElementsByTagName("head")[0].appendChild(u)}}},k=function(e,t,r){var n=s(e.ownerDocument),o=e.appendChild(n("style",{type:"text/css"})),i="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+m(t["data-color-scheme"]);o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.ownerDocument.createTextNode(i));var a=n("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:y(t["data-icon"],/^large$/i.test(t["data-size"])?16:14)},[" ",n("span",{},[t["data-text"]||""])]),u=e.appendChild(n("div",{className:"widget"+(/^large$/i.test(t["data-size"])?" widget-lg":"")},[a])),c=a.hostname.replace(/\.$/,"");if(c.length1?o.ceil(o.round(e*S)/S*2)/2:o.ceil(e))||0},C=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},L=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},r=["icon","color-scheme","text","size","show-count"],n=0,o=r.length;n2,o=n?a.call(arguments,2):void 0;return e(n?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,r)}};n({global:!0,bind:!0,forced:/MSIE .\./.test(i)},{setTimeout:s(o.setTimeout),setInterval:s(o.setInterval)})},365:function(e,t,r){e.exports=r(366)},366:function(e,t,r){"use strict";var n=r(311),o=r(342),i=r(367),a=r(348);function s(e){var t=new i(e),r=o(i.prototype.request,t);return n.extend(r,i.prototype,t),n.extend(r,t),r}var u=s(r(345));u.Axios=i,u.create=function(e){return s(a(u.defaults,e))},u.Cancel=r(349),u.CancelToken=r(380),u.isCancel=r(344),u.all=function(e){return Promise.all(e)},u.spread=r(381),e.exports=u,e.exports.default=u},367:function(e,t,r){"use strict";var n=r(311),o=r(343),i=r(368),a=r(369),s=r(348);function u(e){this.defaults=e,this.interceptors={request:new i,response:new i}}u.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[a,void 0],r=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));t.length;)r=r.then(t.shift(),t.shift());return r},u.prototype.getUri=function(e){return e=s(this.defaults,e),o(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},n.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(t,r){return this.request(n.merge(r||{},{method:e,url:t}))}})),n.forEach(["post","put","patch"],(function(e){u.prototype[e]=function(t,r,o){return this.request(n.merge(o||{},{method:e,url:t,data:r}))}})),e.exports=u},368:function(e,t,r){"use strict";var n=r(311);function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},369:function(e,t,r){"use strict";var n=r(311),o=r(370),i=r(344),a=r(345);function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||a.adapter)(e).then((function(t){return s(e),t.data=o(t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(s(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},370:function(e,t,r){"use strict";var n=r(311);e.exports=function(e,t,r){return n.forEach(r,(function(r){e=r(e,t)})),e}},371:function(e,t,r){"use strict";var n=r(311);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},372:function(e,t,r){"use strict";var n=r(347);e.exports=function(e,t,r){var o=r.config.validateStatus;!o||o(r.status)?e(r):t(n("Request failed with status code "+r.status,r.config,null,r.request,r))}},373:function(e,t,r){"use strict";e.exports=function(e,t,r,n,o){return e.config=t,r&&(e.code=r),e.request=n,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},374:function(e,t,r){"use strict";var n=r(375),o=r(376);e.exports=function(e,t){return e&&!n(t)?o(e,t):t}},375:function(e,t,r){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},376:function(e,t,r){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},377:function(e,t,r){"use strict";var n=r(311),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,i,a={};return e?(n.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=n.trim(e.substr(0,i)).toLowerCase(),r=n.trim(e.substr(i+1)),t){if(a[t]&&o.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([r]):a[t]?a[t]+", "+r:r}})),a):a}},378:function(e,t,r){"use strict";var n=r(311);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function o(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=o(window.location.href),function(t){var r=n.isString(t)?o(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},379:function(e,t,r){"use strict";var n=r(311);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,o,i,a){var s=[];s.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),n.isString(o)&&s.push("path="+o),n.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},380:function(e,t,r){"use strict";var n=r(349);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;e((function(e){r.reason||(r.reason=new n(e),t(r.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},381:function(e,t,r){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},382:function(e,t,r){"use strict";function n(){return(n=Object.assign||function(e){for(var t=1;t>>0||(s.test(r)?16:10))}:a},387:function(e,t,r){"use strict";r(26);var n,o=r(1),i=r(7),a=r(351),s=r(4),u=r(183),c=r(12),l=r(174),f=r(8),h=r(187),p=r(189),d=r(108).codeAt,g=r(388),v=r(49),m=r(389),b=r(31),y=s.URL,w=m.URLSearchParams,x=m.getState,k=b.set,S=b.getterFor("URL"),R=Math.floor,C=Math.pow,L=/[A-Za-z]/,A=/[\d+-.A-Za-z]/,E=/\d/,U=/^(0x|0X)/,I=/^[0-7]+$/,j=/^\d+$/,B=/^[\dA-Fa-f]+$/,P=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,z=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,q=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,T=/[\u0009\u000A\u000D]/g,F=function(e,t){var r,n,o;if("["==t.charAt(0)){if("]"!=t.charAt(t.length-1))return"Invalid host";if(!(r=_(t.slice(1,-1))))return"Invalid host";e.host=r}else if(V(e)){if(t=g(t),P.test(t))return"Invalid host";if(null===(r=O(t)))return"Invalid host";e.host=r}else{if(z.test(t))return"Invalid host";for(r="",n=p(t),o=0;o4)return e;for(r=[],n=0;n1&&"0"==o.charAt(0)&&(i=U.test(o)?16:8,o=o.slice(8==i?1:2)),""===o)a=0;else{if(!(10==i?j:8==i?I:B).test(o))return e;a=parseInt(o,i)}r.push(a)}for(n=0;n=C(256,5-t))return null}else if(a>255)return null;for(s=r.pop(),n=0;n6)return;for(n=0;h();){if(o=null,n>0){if(!("."==h()&&n<4))return;f++}if(!E.test(h()))return;for(;E.test(h());){if(i=parseInt(h(),10),null===o)o=i;else{if(0==o)return;o=10*o+i}if(o>255)return;f++}u[c]=256*u[c]+o,2!=++n&&4!=n||c++}if(4!=n)return;break}if(":"==h()){if(f++,!h())return}else if(h())return;u[c++]=t}else{if(null!==l)return;f++,l=++c}}if(null!==l)for(a=c-l,c=7;0!=c&&a>0;)s=u[c],u[c--]=u[l+a-1],u[l+--a]=s;else if(8!=c)return;return u},N=function(e){var t,r,n,o;if("number"==typeof e){for(t=[],r=0;r<4;r++)t.unshift(e%256),e=R(e/256);return t.join(".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,r=1,n=null,o=0,i=0;i<8;i++)0!==e[i]?(o>r&&(t=n,r=o),n=null,o=0):(null===n&&(n=i),++o);return o>r&&(t=n,r=o),t}(e),r=0;r<8;r++)o&&0===e[r]||(o&&(o=!1),n===r?(t+=r?":":"::",o=!0):(t+=e[r].toString(16),r<7&&(t+=":")));return"["+t+"]"}return e},$={},M=h({},$,{" ":1,'"':1,"<":1,">":1,"`":1}),D=h({},M,{"#":1,"?":1,"{":1,"}":1}),H=h({},D,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),G=function(e,t){var r=d(e,0);return r>32&&r<127&&!f(t,e)?e:encodeURIComponent(e)},X={ftp:21,file:null,http:80,https:443,ws:80,wss:443},V=function(e){return f(X,e.scheme)},J=function(e){return""!=e.username||""!=e.password},W=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},K=function(e,t){var r;return 2==e.length&&L.test(e.charAt(0))&&(":"==(r=e.charAt(1))||!t&&"|"==r)},Z=function(e){var t;return e.length>1&&K(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},Y=function(e){var t=e.path,r=t.length;!r||"file"==e.scheme&&1==r&&K(t[0],!0)||t.pop()},Q=function(e){return"."===e||"%2e"===e.toLowerCase()},ee={},te={},re={},ne={},oe={},ie={},ae={},se={},ue={},ce={},le={},fe={},he={},pe={},de={},ge={},ve={},me={},be={},ye={},we={},xe=function(e,t,r,o){var i,a,s,u,c,l=r||ee,h=0,d="",g=!1,v=!1,m=!1;for(r||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(q,"")),t=t.replace(T,""),i=p(t);h<=i.length;){switch(a=i[h],l){case ee:if(!a||!L.test(a)){if(r)return"Invalid scheme";l=re;continue}d+=a.toLowerCase(),l=te;break;case te:if(a&&(A.test(a)||"+"==a||"-"==a||"."==a))d+=a.toLowerCase();else{if(":"!=a){if(r)return"Invalid scheme";d="",l=re,h=0;continue}if(r&&(V(e)!=f(X,d)||"file"==d&&(J(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=d,r)return void(V(e)&&X[e.scheme]==e.port&&(e.port=null));d="","file"==e.scheme?l=pe:V(e)&&o&&o.scheme==e.scheme?l=ne:V(e)?l=se:"/"==i[h+1]?(l=oe,h++):(e.cannotBeABaseURL=!0,e.path.push(""),l=be)}break;case re:if(!o||o.cannotBeABaseURL&&"#"!=a)return"Invalid scheme";if(o.cannotBeABaseURL&&"#"==a){e.scheme=o.scheme,e.path=o.path.slice(),e.query=o.query,e.fragment="",e.cannotBeABaseURL=!0,l=we;break}l="file"==o.scheme?pe:ie;continue;case ne:if("/"!=a||"/"!=i[h+1]){l=ie;continue}l=ue,h++;break;case oe:if("/"==a){l=ce;break}l=me;continue;case ie:if(e.scheme=o.scheme,a==n)e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=o.query;else if("/"==a||"\\"==a&&V(e))l=ae;else if("?"==a)e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query="",l=ye;else{if("#"!=a){e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.path.pop(),l=me;continue}e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=o.query,e.fragment="",l=we}break;case ae:if(!V(e)||"/"!=a&&"\\"!=a){if("/"!=a){e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,l=me;continue}l=ce}else l=ue;break;case se:if(l=ue,"/"!=a||"/"!=d.charAt(h+1))continue;h++;break;case ue:if("/"!=a&&"\\"!=a){l=ce;continue}break;case ce:if("@"==a){g&&(d="%40"+d),g=!0,s=p(d);for(var b=0;b65535)return"Invalid port";e.port=V(e)&&x===X[e.scheme]?null:x,d=""}if(r)return;l=ve;continue}return"Invalid port"}d+=a;break;case pe:if(e.scheme="file","/"==a||"\\"==a)l=de;else{if(!o||"file"!=o.scheme){l=me;continue}if(a==n)e.host=o.host,e.path=o.path.slice(),e.query=o.query;else if("?"==a)e.host=o.host,e.path=o.path.slice(),e.query="",l=ye;else{if("#"!=a){Z(i.slice(h).join(""))||(e.host=o.host,e.path=o.path.slice(),Y(e)),l=me;continue}e.host=o.host,e.path=o.path.slice(),e.query=o.query,e.fragment="",l=we}}break;case de:if("/"==a||"\\"==a){l=ge;break}o&&"file"==o.scheme&&!Z(i.slice(h).join(""))&&(K(o.path[0],!0)?e.path.push(o.path[0]):e.host=o.host),l=me;continue;case ge:if(a==n||"/"==a||"\\"==a||"?"==a||"#"==a){if(!r&&K(d))l=me;else if(""==d){if(e.host="",r)return;l=ve}else{if(u=F(e,d))return u;if("localhost"==e.host&&(e.host=""),r)return;d="",l=ve}continue}d+=a;break;case ve:if(V(e)){if(l=me,"/"!=a&&"\\"!=a)continue}else if(r||"?"!=a)if(r||"#"!=a){if(a!=n&&(l=me,"/"!=a))continue}else e.fragment="",l=we;else e.query="",l=ye;break;case me:if(a==n||"/"==a||"\\"==a&&V(e)||!r&&("?"==a||"#"==a)){if(".."===(c=(c=d).toLowerCase())||"%2e."===c||".%2e"===c||"%2e%2e"===c?(Y(e),"/"==a||"\\"==a&&V(e)||e.path.push("")):Q(d)?"/"==a||"\\"==a&&V(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&K(d)&&(e.host&&(e.host=""),d=d.charAt(0)+":"),e.path.push(d)),d="","file"==e.scheme&&(a==n||"?"==a||"#"==a))for(;e.path.length>1&&""===e.path[0];)e.path.shift();"?"==a?(e.query="",l=ye):"#"==a&&(e.fragment="",l=we)}else d+=G(a,D);break;case be:"?"==a?(e.query="",l=ye):"#"==a?(e.fragment="",l=we):a!=n&&(e.path[0]+=G(a,$));break;case ye:r||"#"!=a?a!=n&&("'"==a&&V(e)?e.query+="%27":e.query+="#"==a?"%23":G(a,$)):(e.fragment="",l=we);break;case we:a!=n&&(e.fragment+=G(a,M))}h++}},ke=function(e){var t,r,n=l(this,ke,"URL"),o=arguments.length>1?arguments[1]:void 0,a=String(e),s=k(n,{type:"URL"});if(void 0!==o)if(o instanceof ke)t=S(o);else if(r=xe(t={},String(o)))throw TypeError(r);if(r=xe(s,a,null,t))throw TypeError(r);var u=s.searchParams=new w,c=x(u);c.updateSearchParams(s.query),c.updateURL=function(){s.query=String(u)||null},i||(n.href=Re.call(n),n.origin=Ce.call(n),n.protocol=Le.call(n),n.username=Ae.call(n),n.password=Ee.call(n),n.host=Ue.call(n),n.hostname=Ie.call(n),n.port=je.call(n),n.pathname=Be.call(n),n.search=Pe.call(n),n.searchParams=ze.call(n),n.hash=qe.call(n))},Se=ke.prototype,Re=function(){var e=S(this),t=e.scheme,r=e.username,n=e.password,o=e.host,i=e.port,a=e.path,s=e.query,u=e.fragment,c=t+":";return null!==o?(c+="//",J(e)&&(c+=r+(n?":"+n:"")+"@"),c+=N(o),null!==i&&(c+=":"+i)):"file"==t&&(c+="//"),c+=e.cannotBeABaseURL?a[0]:a.length?"/"+a.join("/"):"",null!==s&&(c+="?"+s),null!==u&&(c+="#"+u),c},Ce=function(){var e=S(this),t=e.scheme,r=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(e){return"null"}return"file"!=t&&V(e)?t+"://"+N(e.host)+(null!==r?":"+r:""):"null"},Le=function(){return S(this).scheme+":"},Ae=function(){return S(this).username},Ee=function(){return S(this).password},Ue=function(){var e=S(this),t=e.host,r=e.port;return null===t?"":null===r?N(t):N(t)+":"+r},Ie=function(){var e=S(this).host;return null===e?"":N(e)},je=function(){var e=S(this).port;return null===e?"":String(e)},Be=function(){var e=S(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},Pe=function(){var e=S(this).query;return e?"?"+e:""},ze=function(){return S(this).searchParams},qe=function(){var e=S(this).fragment;return e?"#"+e:""},Te=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(i&&u(Se,{href:Te(Re,(function(e){var t=S(this),r=String(e),n=xe(t,r);if(n)throw TypeError(n);x(t.searchParams).updateSearchParams(t.query)})),origin:Te(Ce),protocol:Te(Le,(function(e){var t=S(this);xe(t,String(e)+":",ee)})),username:Te(Ae,(function(e){var t=S(this),r=p(String(e));if(!W(t)){t.username="";for(var n=0;n>1,e+=a(e/t);e>455;n+=36)e=a(e/35);return a(n+36*e/(e+38))},l=function(e){var t,r,n=[],o=(e=function(e){for(var t=[],r=0,n=e.length;r=55296&&o<=56319&&r=l&&ra((2147483647-f)/v))throw RangeError(i);for(f+=(g-l)*v,l=g,t=0;t2147483647)throw RangeError(i);if(r==l){for(var m=f,b=36;;b+=36){var y=b<=h?1:b>=h+26?26:b-h;if(m0?arguments[0]:void 0,l=this,p=[];if(C(l,{type:"URLSearchParams",entries:p,updateURL:function(){},updateSearchParams:O}),void 0!==c)if(v(c))if("function"==typeof(e=w(c)))for(r=(t=e.call(c)).next;!(n=r.call(t)).done;){if((a=(i=(o=y(g(n.value))).next).call(o)).done||(s=i.call(o)).done||!i.call(o).done)throw TypeError("Expected sequence with length 2");p.push({key:a.value+"",value:s.value+""})}else for(u in c)h(c,u)&&p.push({key:u,value:c[u]+""});else F(p,"string"==typeof c?"?"===c.charAt(0)?c.slice(1):c:c+"")},M=$.prototype;s(M,{append:function(e,t){_(arguments.length,2);var r=L(this);r.entries.push({key:e+"",value:t+""}),r.updateURL()},delete:function(e){_(arguments.length,1);for(var t=L(this),r=t.entries,n=e+"",o=0;oe.key){o.splice(t,0,e);break}t===r&&o.push(e)}n.updateURL()},forEach:function(e){for(var t,r=L(this).entries,n=p(e,arguments.length>1?arguments[1]:void 0,3),o=0;o1&&(v(t=arguments[1])&&(r=t.body,"URLSearchParams"===d(r)&&((n=t.headers?new S(t.headers):new S).has("content-type")||n.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=m(t,{body:b(0,String(r)),headers:b(0,n)}))),o.push(t)),k.apply(this,o)}}),e.exports={URLSearchParams:$,getState:L}},390:function(e,t,r){var n=r(6),o=r(99);e.exports=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return n(t.call(e))}},392:function(e,t,r){var n=r(2),o=r(324);e.exports=function(e){return n((function(){return!!o[e]()||"​…᠎"!="​…᠎"[e]()||o[e].name!==e}))}},393:function(e,t,r){var n=r(5),o=r(104);e.exports=function(e,t,r){var i,a;return o&&"function"==typeof(i=t.constructor)&&i!==r&&n(a=i.prototype)&&a!==r.prototype&&o(e,a),e}},394:function(e,t,r){"use strict";var n,o=r(1),i=r(27).f,a=r(14),s=r(110),u=r(25),c=r(111),l=r(23),f="".endsWith,h=Math.min,p=c("endsWith");o({target:"String",proto:!0,forced:!!(l||p||(n=i(String.prototype,"endsWith"),!n||n.writable))&&!p},{endsWith:function(e){var t=String(u(this));s(e);var r=arguments.length>1?arguments[1]:void 0,n=a(t.length),o=void 0===r?n:h(a(r),n),i=String(e);return f?f.call(t,i,o):t.slice(o-i.length,o)===i}})},395:function(e,t,r){"use strict";var n=r(326);r.n(n).a},402:function(e,t,r){var n=r(37),o=r(15),i=r(28);e.exports=function(e){return"string"==typeof e||!o(e)&&i(e)&&"[object String]"==n(e)}},406:function(e,t,r){"use strict";var n=r(1),o=r(35).find,i=r(102),a=r(19),s=!0,u=a("find");"find"in[]&&Array(1).find((function(){s=!1})),n({target:"Array",proto:!0,forced:s||!u},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i("find")},414:function(e,t,r){"use strict";r(22),r(176),r(173),r(100),r(47),r(177),r(320),r(352),r(182),r(48),r(172),r(353),r(101),r(394),r(69),r(341);var n=r(190),o=r.n(n),i=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=o()(t,"title","");return o()(t,"frontmatter.tags")&&(n+=" ".concat(t.frontmatter.tags.join(" "))),r&&(n+=" ".concat(r)),a(e,n)},a=function(e,t){var r=function(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},n=new RegExp("[^\0-]"),o=e.split(/\s+/g).map((function(e){return e.trim()})).filter((function(e){return!!e}));if(n.test(e))return o.some((function(e){return t.toLowerCase().indexOf(e)>-1}));var i=e.endsWith(" ");return new RegExp(o.map((function(e,t){return o.length!==t+1||i?"(?=.*\\b".concat(r(e),"\\b)"):"(?=.*\\b".concat(r(e),")")})).join("")+".+","gi").test(t)},s={name:"SearchBox",data:function(){return{query:"",focused:!1,focusIndex:0,placeholder:void 0}},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var e=this.query.trim().toLowerCase();if(e){for(var t=this.$site.pages,r=this.$site.themeConfig.searchMaxSuggestions||5,n=this.$localePath,o=[],a=0;a=r);a++){var s=t[a];if(this.getPageLocalePath(s)===n&&this.isSearchable(s))if(i(e,s))o.push(s);else if(s.headers)for(var u=0;u=r);u++){var c=s.headers[u];c.title&&i(e,s,c.title)&&o.push(Object.assign({},s,{path:s.path+"#"+c.slug,header:c}))}}return o}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted:function(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy:function(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath:function(e){for(var t in this.$site.locales||{})if("/"!==t&&0===e.path.indexOf(t))return t;return"/"},isSearchable:function(e){var t=null;return null===t||(t=Array.isArray(t)?t:new Array(t)).filter((function(t){return e.path.match(t)})).length>0},onHotkey:function(e){e.srcElement===document.body&&["s","/"].includes(e.key)&&(this.$refs.input.focus(),e.preventDefault())},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+e._s(t.header.title))]):e._e()])])})),0):e._e()])}),[],!1,null,null,null);t.a=c.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/1.c2c1ae44.js b/docs/assets/js/1.c2c1ae44.js new file mode 100644 index 0000000000..e48d2b5630 --- /dev/null +++ b/docs/assets/js/1.c2c1ae44.js @@ -0,0 +1,7 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{322:function(e,t,r){"use strict";var n=r(351),o=Object.prototype.toString;function a(e){return"[object Array]"===o.call(e)}function i(e){return void 0===e}function s(e){return null!==e&&"object"==typeof e}function c(e){return"[object Function]"===o.call(e)}function u(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var r=0,n=e.length;r=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},n.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){c.headers[e]=n.merge(a)})),e.exports=c},355:function(e,t,r){"use strict";var n=r(322),o=r(379),a=r(352),i=r(381),s=r(384),c=r(385),u=r(356);e.exports=function(e){return new Promise((function(t,f){var l=e.data,h=e.headers;n.isFormData(l)&&delete h["Content-Type"];var d=new XMLHttpRequest;if(e.auth){var p=e.auth.username||"",g=e.auth.password||"";h.Authorization="Basic "+btoa(p+":"+g)}var m=i(e.baseURL,e.url);if(d.open(e.method.toUpperCase(),a(m,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in d?s(d.getAllResponseHeaders()):null,n={data:e.responseType&&"text"!==e.responseType?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:r,config:e,request:d};o(t,f,n),d=null}},d.onabort=function(){d&&(f(u("Request aborted",e,"ECONNABORTED",d)),d=null)},d.onerror=function(){f(u("Network Error",e,null,d)),d=null},d.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),f(u(t,e,"ECONNABORTED",d)),d=null},n.isStandardBrowserEnv()){var v=r(386),b=(e.withCredentials||c(m))&&e.xsrfCookieName?v.read(e.xsrfCookieName):void 0;b&&(h[e.xsrfHeaderName]=b)}if("setRequestHeader"in d&&n.forEach(h,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete h[t]:d.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),e.responseType)try{d.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){d&&(d.abort(),f(e),d=null)})),void 0===l&&(l=null),d.send(l)}))}},356:function(e,t,r){"use strict";var n=r(380);e.exports=function(e,t,r,o,a){var i=new Error(e);return n(i,t,r,o,a)}},357:function(e,t,r){"use strict";var n=r(322);e.exports=function(e,t){t=t||{};var r={},o=["url","method","params","data"],a=["headers","auth","proxy"],i=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];n.forEach(o,(function(e){void 0!==t[e]&&(r[e]=t[e])})),n.forEach(a,(function(o){n.isObject(t[o])?r[o]=n.deepMerge(e[o],t[o]):void 0!==t[o]?r[o]=t[o]:n.isObject(e[o])?r[o]=n.deepMerge(e[o]):void 0!==e[o]&&(r[o]=e[o])})),n.forEach(i,(function(n){void 0!==t[n]?r[n]=t[n]:void 0!==e[n]&&(r[n]=e[n])}));var s=o.concat(a).concat(i),c=Object.keys(t).filter((function(e){return-1===s.indexOf(e)}));return n.forEach(c,(function(n){void 0!==t[n]?r[n]=t[n]:void 0!==e[n]&&(r[n]=e[n])})),r}},358:function(e,t,r){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},359:function(e,t,r){var n=r(2),o=r(3),a=r(26),i=o("iterator");e.exports=!n((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,r="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),r+=n+e})),a&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[i]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},360:function(e,t,r){"use strict";var n=r(1),o=r(186).trim;n({target:"String",proto:!0,forced:r(399)("trim")},{trim:function(){return o(this)}})},361:function(e,t,r){var n=r(7),o=r(4),a=r(81),i=r(199),s=r(9).f,c=r(62).f,u=r(115),f=r(117),l=r(194),h=r(13),d=r(2),p=r(41).set,g=r(192),m=r(3)("match"),v=o.RegExp,b=v.prototype,y=/a/g,w=/a/g,x=new v(y)!==y,k=l.UNSUPPORTED_Y;if(n&&a("RegExp",!x||k||d((function(){return w[m]=!1,v(y)!=y||v(w)==w||"/a/i"!=v(y,"i")})))){for(var S=function(e,t){var r,n=this instanceof S,o=u(e),a=void 0===t;if(!n&&o&&e.constructor===S&&a)return e;x?o&&!a&&(e=e.source):e instanceof S&&(a&&(t=f.call(e)),e=e.source),k&&(r=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,""));var s=i(x?new v(e,t):v(e,t),n?this:b,S);return k&&r&&p(s,{sticky:r}),s},C=function(e){e in S||s(S,e,{configurable:!0,get:function(){return v[e]},set:function(t){v[e]=t}})},R=c(v),L=0;R.length>L;)C(R[L++]);b.constructor=S,S.prototype=b,h(o,"RegExp",S)}g("RegExp")},362:function(e,t){e.exports=function(e){return null==e}},366:function(e,t,r){"use strict";var n=r(1),o=r(367);n({target:"String",proto:!0,forced:r(368)("link")},{link:function(e){return o(this,"a","href",e)}})},367:function(e,t,r){var n=r(21),o=/"/g;e.exports=function(e,t,r,a){var i=String(n(e)),s="<"+t;return""!==r&&(s+=" "+r+'="'+String(a).replace(o,""")+'"'),s+">"+i+""}},368:function(e,t,r){var n=r(2);e.exports=function(e){return n((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},370:function(e,t,r){"use strict";t.a={name:"github-button",props:["href","ariaLabel","title","dataIcon","dataColorScheme","dataSize","dataShowCount","dataText"],render:function(e){return e("span",[e("a",{attrs:{href:this.href,"aria-label":this.ariaLabel,title:this.title,"data-icon":this.dataIcon,"data-color-scheme":this.dataColorScheme,"data-size":this.dataSize,"data-show-count":this.dataShowCount,"data-text":this.dataText},ref:"_"},this.$slots.default)])},mounted:function(){this.paint()},beforeUpdate:function(){this.reset()},updated:function(){this.paint()},beforeDestroy:function(){this.reset()},methods:{paint:function(){const e=this.$el.appendChild(document.createElement("span")),t=this;Promise.resolve().then(r.bind(null,371)).then((function(r){r.render(e.appendChild(t.$refs._),(function(t){try{e.parentNode.replaceChild(t,e)}catch(e){}}))}))},reset:function(){this.$el.replaceChild(this.$refs._,this.$el.lastChild)}}}},371:function(e,t,r){"use strict";r.r(t),r.d(t,"render",(function(){return L})); +/*! + * github-buttons v2.11.0 + * (c) 2020 なつき + * @license BSD-2-Clause + */ +var n=window.document,o=window.Math,a=window.HTMLElement,i=window.XMLHttpRequest,s=function(e){return function(t,r,n){var o=e.createElement(t);if(null!=r)for(var a in r){var i=r[a];null!=i&&(null!=o[a]?o[a]=i:o.setAttribute(a,i))}if(null!=n)for(var s=0,c=n.length;s'}}},heart:{heights:{16:{width:16,path:''}}},eye:{heights:{16:{width:16,path:''}}},star:{heights:{16:{width:16,path:''}}},"repo-forked":{heights:{16:{width:16,path:''}}},"repo-template":{heights:{16:{width:16,path:''}}},"issue-opened":{heights:{16:{width:16,path:''}}},download:{heights:{16:{width:16,path:''}}}},y=function(e,t){e=(""+e).toLowerCase().replace(/^octicon-/,""),u(b,e)||(e="mark-github");var r=t>=24&&24 in b[e].heights?24:16,n=b[e].heights[r];return'"},w={},x=function(e,t){var r=w[e]||(w[e]=[]);if(!(r.push(t)>1)){var n=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete w[e];t=r.shift();)t.apply(null,arguments)}));if(l){var o=new i;d(o,"abort",n),d(o,"error",n),d(o,"load",(function(){var e;try{e=JSON.parse(o.responseText)}catch(e){return void n(e)}n(200!==o.status,e)})),o.open("GET",e),o.send()}else{var a=this||window;a._=function(e){a._=null,n(200!==e.meta.status,e.data)};var c=s(a.document)("script",{async:!0,src:e+(/\?/.test(e)?"&":"?")+"callback=_"}),u=function(){a._&&a._({meta:{}})};d(c,"load",u),d(c,"error",u),c.readyState&&function(e,t,r){var n=function(o){if(t.test(e.readyState))return p(e,"readystatechange",n),r(o)};d(e,"readystatechange",n)}(c,/de|m/,u),a.document.getElementsByTagName("head")[0].appendChild(c)}}},k=function(e,t,r){var n=s(e.ownerDocument),o=e.appendChild(n("style",{type:"text/css"})),a="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+v(t["data-color-scheme"]);o.styleSheet?o.styleSheet.cssText=a:o.appendChild(e.ownerDocument.createTextNode(a));var i=n("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:y(t["data-icon"],/^large$/i.test(t["data-size"])?16:14)},[" ",n("span",{},[t["data-text"]||""])]),c=e.appendChild(n("div",{className:"widget"+(/^large$/i.test(t["data-size"])?" widget-lg":"")},[i])),u=i.hostname.replace(/\.$/,"");if(u.length1?o.ceil(o.round(e*S)/S*2)/2:o.ceil(e))||0},R=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},L=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},r=["icon","color-scheme","text","size","show-count"],n=0,o=r.length;n=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([r]):i[t]?i[t]+", "+r:r}})),i):i}},385:function(e,t,r){"use strict";var n=r(322);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function o(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=o(window.location.href),function(t){var r=n.isString(t)?o(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},386:function(e,t,r){"use strict";var n=r(322);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,o,a,i){var s=[];s.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),n.isString(o)&&s.push("path="+o),n.isString(a)&&s.push("domain="+a),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},387:function(e,t,r){"use strict";var n=r(358);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;e((function(e){r.reason||(r.reason=new n(e),t(r.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},388:function(e,t,r){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},389:function(e,t,r){"use strict";function n(){return(n=Object.assign||function(e){for(var t=1;t>>0||(s.test(r)?16:10))}:i},394:function(e,t,r){"use strict";r(27);var n,o=r(1),a=r(7),i=r(359),s=r(4),c=r(189),u=r(13),f=r(182),l=r(8),h=r(193),d=r(195),p=r(112).codeAt,g=r(395),m=r(60),v=r(396),b=r(41),y=s.URL,w=v.URLSearchParams,x=v.getState,k=b.set,S=b.getterFor("URL"),C=Math.floor,R=Math.pow,L=/[A-Za-z]/,A=/[\d+-.A-Za-z]/,E=/\d/,U=/^(0x|0X)/,I=/^[0-7]+$/,j=/^\d+$/,B=/^[\dA-Fa-f]+$/,P=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,z=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,q=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,T=/[\u0009\u000A\u000D]/g,F=function(e,t){var r,n,o;if("["==t.charAt(0)){if("]"!=t.charAt(t.length-1))return"Invalid host";if(!(r=_(t.slice(1,-1))))return"Invalid host";e.host=r}else if(V(e)){if(t=g(t),P.test(t))return"Invalid host";if(null===(r=O(t)))return"Invalid host";e.host=r}else{if(z.test(t))return"Invalid host";for(r="",n=d(t),o=0;o4)return e;for(r=[],n=0;n1&&"0"==o.charAt(0)&&(a=U.test(o)?16:8,o=o.slice(8==a?1:2)),""===o)i=0;else{if(!(10==a?j:8==a?I:B).test(o))return e;i=parseInt(o,a)}r.push(i)}for(n=0;n=R(256,5-t))return null}else if(i>255)return null;for(s=r.pop(),n=0;n6)return;for(n=0;h();){if(o=null,n>0){if(!("."==h()&&n<4))return;l++}if(!E.test(h()))return;for(;E.test(h());){if(a=parseInt(h(),10),null===o)o=a;else{if(0==o)return;o=10*o+a}if(o>255)return;l++}c[u]=256*c[u]+o,2!=++n&&4!=n||u++}if(4!=n)return;break}if(":"==h()){if(l++,!h())return}else if(h())return;c[u++]=t}else{if(null!==f)return;l++,f=++u}}if(null!==f)for(i=u-f,u=7;0!=u&&i>0;)s=c[u],c[u--]=c[f+i-1],c[f+--i]=s;else if(8!=u)return;return c},N=function(e){var t,r,n,o;if("number"==typeof e){for(t=[],r=0;r<4;r++)t.unshift(e%256),e=C(e/256);return t.join(".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,r=1,n=null,o=0,a=0;a<8;a++)0!==e[a]?(o>r&&(t=n,r=o),n=null,o=0):(null===n&&(n=a),++o);return o>r&&(t=n,r=o),t}(e),r=0;r<8;r++)o&&0===e[r]||(o&&(o=!1),n===r?(t+=r?":":"::",o=!0):(t+=e[r].toString(16),r<7&&(t+=":")));return"["+t+"]"}return e},$={},M=h({},$,{" ":1,'"':1,"<":1,">":1,"`":1}),D=h({},M,{"#":1,"?":1,"{":1,"}":1}),H=h({},D,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),G=function(e,t){var r=p(e,0);return r>32&&r<127&&!l(t,e)?e:encodeURIComponent(e)},X={ftp:21,file:null,http:80,https:443,ws:80,wss:443},V=function(e){return l(X,e.scheme)},J=function(e){return""!=e.username||""!=e.password},W=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},K=function(e,t){var r;return 2==e.length&&L.test(e.charAt(0))&&(":"==(r=e.charAt(1))||!t&&"|"==r)},Z=function(e){var t;return e.length>1&&K(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},Y=function(e){var t=e.path,r=t.length;!r||"file"==e.scheme&&1==r&&K(t[0],!0)||t.pop()},Q=function(e){return"."===e||"%2e"===e.toLowerCase()},ee={},te={},re={},ne={},oe={},ae={},ie={},se={},ce={},ue={},fe={},le={},he={},de={},pe={},ge={},me={},ve={},be={},ye={},we={},xe=function(e,t,r,o){var a,i,s,c,u,f=r||ee,h=0,p="",g=!1,m=!1,v=!1;for(r||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(q,"")),t=t.replace(T,""),a=d(t);h<=a.length;){switch(i=a[h],f){case ee:if(!i||!L.test(i)){if(r)return"Invalid scheme";f=re;continue}p+=i.toLowerCase(),f=te;break;case te:if(i&&(A.test(i)||"+"==i||"-"==i||"."==i))p+=i.toLowerCase();else{if(":"!=i){if(r)return"Invalid scheme";p="",f=re,h=0;continue}if(r&&(V(e)!=l(X,p)||"file"==p&&(J(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=p,r)return void(V(e)&&X[e.scheme]==e.port&&(e.port=null));p="","file"==e.scheme?f=de:V(e)&&o&&o.scheme==e.scheme?f=ne:V(e)?f=se:"/"==a[h+1]?(f=oe,h++):(e.cannotBeABaseURL=!0,e.path.push(""),f=be)}break;case re:if(!o||o.cannotBeABaseURL&&"#"!=i)return"Invalid scheme";if(o.cannotBeABaseURL&&"#"==i){e.scheme=o.scheme,e.path=o.path.slice(),e.query=o.query,e.fragment="",e.cannotBeABaseURL=!0,f=we;break}f="file"==o.scheme?de:ae;continue;case ne:if("/"!=i||"/"!=a[h+1]){f=ae;continue}f=ce,h++;break;case oe:if("/"==i){f=ue;break}f=ve;continue;case ae:if(e.scheme=o.scheme,i==n)e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=o.query;else if("/"==i||"\\"==i&&V(e))f=ie;else if("?"==i)e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query="",f=ye;else{if("#"!=i){e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.path.pop(),f=ve;continue}e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=o.query,e.fragment="",f=we}break;case ie:if(!V(e)||"/"!=i&&"\\"!=i){if("/"!=i){e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,f=ve;continue}f=ue}else f=ce;break;case se:if(f=ce,"/"!=i||"/"!=p.charAt(h+1))continue;h++;break;case ce:if("/"!=i&&"\\"!=i){f=ue;continue}break;case ue:if("@"==i){g&&(p="%40"+p),g=!0,s=d(p);for(var b=0;b65535)return"Invalid port";e.port=V(e)&&x===X[e.scheme]?null:x,p=""}if(r)return;f=me;continue}return"Invalid port"}p+=i;break;case de:if(e.scheme="file","/"==i||"\\"==i)f=pe;else{if(!o||"file"!=o.scheme){f=ve;continue}if(i==n)e.host=o.host,e.path=o.path.slice(),e.query=o.query;else if("?"==i)e.host=o.host,e.path=o.path.slice(),e.query="",f=ye;else{if("#"!=i){Z(a.slice(h).join(""))||(e.host=o.host,e.path=o.path.slice(),Y(e)),f=ve;continue}e.host=o.host,e.path=o.path.slice(),e.query=o.query,e.fragment="",f=we}}break;case pe:if("/"==i||"\\"==i){f=ge;break}o&&"file"==o.scheme&&!Z(a.slice(h).join(""))&&(K(o.path[0],!0)?e.path.push(o.path[0]):e.host=o.host),f=ve;continue;case ge:if(i==n||"/"==i||"\\"==i||"?"==i||"#"==i){if(!r&&K(p))f=ve;else if(""==p){if(e.host="",r)return;f=me}else{if(c=F(e,p))return c;if("localhost"==e.host&&(e.host=""),r)return;p="",f=me}continue}p+=i;break;case me:if(V(e)){if(f=ve,"/"!=i&&"\\"!=i)continue}else if(r||"?"!=i)if(r||"#"!=i){if(i!=n&&(f=ve,"/"!=i))continue}else e.fragment="",f=we;else e.query="",f=ye;break;case ve:if(i==n||"/"==i||"\\"==i&&V(e)||!r&&("?"==i||"#"==i)){if(".."===(u=(u=p).toLowerCase())||"%2e."===u||".%2e"===u||"%2e%2e"===u?(Y(e),"/"==i||"\\"==i&&V(e)||e.path.push("")):Q(p)?"/"==i||"\\"==i&&V(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&K(p)&&(e.host&&(e.host=""),p=p.charAt(0)+":"),e.path.push(p)),p="","file"==e.scheme&&(i==n||"?"==i||"#"==i))for(;e.path.length>1&&""===e.path[0];)e.path.shift();"?"==i?(e.query="",f=ye):"#"==i&&(e.fragment="",f=we)}else p+=G(i,D);break;case be:"?"==i?(e.query="",f=ye):"#"==i?(e.fragment="",f=we):i!=n&&(e.path[0]+=G(i,$));break;case ye:r||"#"!=i?i!=n&&("'"==i&&V(e)?e.query+="%27":e.query+="#"==i?"%23":G(i,$)):(e.fragment="",f=we);break;case we:i!=n&&(e.fragment+=G(i,M))}h++}},ke=function(e){var t,r,n=f(this,ke,"URL"),o=arguments.length>1?arguments[1]:void 0,i=String(e),s=k(n,{type:"URL"});if(void 0!==o)if(o instanceof ke)t=S(o);else if(r=xe(t={},String(o)))throw TypeError(r);if(r=xe(s,i,null,t))throw TypeError(r);var c=s.searchParams=new w,u=x(c);u.updateSearchParams(s.query),u.updateURL=function(){s.query=String(c)||null},a||(n.href=Ce.call(n),n.origin=Re.call(n),n.protocol=Le.call(n),n.username=Ae.call(n),n.password=Ee.call(n),n.host=Ue.call(n),n.hostname=Ie.call(n),n.port=je.call(n),n.pathname=Be.call(n),n.search=Pe.call(n),n.searchParams=ze.call(n),n.hash=qe.call(n))},Se=ke.prototype,Ce=function(){var e=S(this),t=e.scheme,r=e.username,n=e.password,o=e.host,a=e.port,i=e.path,s=e.query,c=e.fragment,u=t+":";return null!==o?(u+="//",J(e)&&(u+=r+(n?":"+n:"")+"@"),u+=N(o),null!==a&&(u+=":"+a)):"file"==t&&(u+="//"),u+=e.cannotBeABaseURL?i[0]:i.length?"/"+i.join("/"):"",null!==s&&(u+="?"+s),null!==c&&(u+="#"+c),u},Re=function(){var e=S(this),t=e.scheme,r=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(e){return"null"}return"file"!=t&&V(e)?t+"://"+N(e.host)+(null!==r?":"+r:""):"null"},Le=function(){return S(this).scheme+":"},Ae=function(){return S(this).username},Ee=function(){return S(this).password},Ue=function(){var e=S(this),t=e.host,r=e.port;return null===t?"":null===r?N(t):N(t)+":"+r},Ie=function(){var e=S(this).host;return null===e?"":N(e)},je=function(){var e=S(this).port;return null===e?"":String(e)},Be=function(){var e=S(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},Pe=function(){var e=S(this).query;return e?"?"+e:""},ze=function(){return S(this).searchParams},qe=function(){var e=S(this).fragment;return e?"#"+e:""},Te=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(a&&c(Se,{href:Te(Ce,(function(e){var t=S(this),r=String(e),n=xe(t,r);if(n)throw TypeError(n);x(t.searchParams).updateSearchParams(t.query)})),origin:Te(Re),protocol:Te(Le,(function(e){var t=S(this);xe(t,String(e)+":",ee)})),username:Te(Ae,(function(e){var t=S(this),r=d(String(e));if(!W(t)){t.username="";for(var n=0;n>1,e+=i(e/t);e>455;n+=36)e=i(e/35);return i(n+36*e/(e+38))},f=function(e){var t,r,n=[],o=(e=function(e){for(var t=[],r=0,n=e.length;r=55296&&o<=56319&&r=f&&ri((2147483647-l)/m))throw RangeError(a);for(l+=(g-f)*m,f=g,t=0;t2147483647)throw RangeError(a);if(r==f){for(var v=l,b=36;;b+=36){var y=b<=h?1:b>=h+26?26:b-h;if(v0?arguments[0]:void 0,f=this,d=[];if(R(f,{type:"URLSearchParams",entries:d,updateURL:function(){},updateSearchParams:O}),void 0!==u)if(m(u))if("function"==typeof(e=w(u)))for(r=(t=e.call(u)).next;!(n=r.call(t)).done;){if((i=(a=(o=y(g(n.value))).next).call(o)).done||(s=a.call(o)).done||!a.call(o).done)throw TypeError("Expected sequence with length 2");d.push({key:i.value+"",value:s.value+""})}else for(c in u)h(u,c)&&d.push({key:c,value:u[c]+""});else F(d,"string"==typeof u?"?"===u.charAt(0)?u.slice(1):u:u+"")},M=$.prototype;s(M,{append:function(e,t){_(arguments.length,2);var r=L(this);r.entries.push({key:e+"",value:t+""}),r.updateURL()},delete:function(e){_(arguments.length,1);for(var t=L(this),r=t.entries,n=e+"",o=0;oe.key){o.splice(t,0,e);break}t===r&&o.push(e)}n.updateURL()},forEach:function(e){for(var t,r=L(this).entries,n=d(e,arguments.length>1?arguments[1]:void 0,3),o=0;o1&&(m(t=arguments[1])&&(r=t.body,"URLSearchParams"===p(r)&&((n=t.headers?new S(t.headers):new S).has("content-type")||n.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=v(t,{body:b(0,String(r)),headers:b(0,n)}))),o.push(t)),k.apply(this,o)}}),e.exports={URLSearchParams:$,getState:L}},397:function(e,t,r){var n=r(6),o=r(108);e.exports=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return n(t.call(e))}},399:function(e,t,r){var n=r(2),o=r(187);e.exports=function(e){return n((function(){return!!o[e]()||"​…᠎"!="​…᠎"[e]()||o[e].name!==e}))}},400:function(e,t,r){"use strict";var n,o=r(1),a=r(28).f,i=r(14),s=r(114),c=r(21),u=r(116),f=r(26),l="".endsWith,h=Math.min,d=u("endsWith");o({target:"String",proto:!0,forced:!!(f||d||(n=a(String.prototype,"endsWith"),!n||n.writable))&&!d},{endsWith:function(e){var t=String(c(this));s(e);var r=arguments.length>1?arguments[1]:void 0,n=i(t.length),o=void 0===r?n:h(i(r),n),a=String(e);return l?l.call(t,a,o):t.slice(o-a.length,o)===a}})},401:function(e,t,r){"use strict";var n=r(336);r.n(n).a},408:function(e,t,r){var n=r(45),o=r(17),a=r(36);e.exports=function(e){return"string"==typeof e||!o(e)&&a(e)&&"[object String]"==n(e)}},412:function(e,t,r){"use strict";var n=r(1),o=r(34).find,a=r(110),i=r(15),s=!0,c=i("find");"find"in[]&&Array(1).find((function(){s=!1})),n({target:"Array",proto:!0,forced:s||!c},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a("find")},420:function(e,t,r){"use strict";r(22),r(183),r(42),r(61),r(25),r(184),r(331),r(360),r(185),r(40),r(181),r(361),r(109),r(400),r(31),r(188);var n=r(196),o=r.n(n),a=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=o()(t,"title","");return o()(t,"frontmatter.tags")&&(n+=" ".concat(t.frontmatter.tags.join(" "))),r&&(n+=" ".concat(r)),i(e,n)},i=function(e,t){var r=function(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},n=new RegExp("[^\0-]"),o=e.split(/\s+/g).map((function(e){return e.trim()})).filter((function(e){return!!e}));if(n.test(e))return o.some((function(e){return t.toLowerCase().indexOf(e)>-1}));var a=e.endsWith(" ");return new RegExp(o.map((function(e,t){return o.length!==t+1||a?"(?=.*\\b".concat(r(e),"\\b)"):"(?=.*\\b".concat(r(e),")")})).join("")+".+","gi").test(t)},s={name:"SearchBox",data:function(){return{query:"",focused:!1,focusIndex:0,placeholder:void 0}},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var e=this.query.trim().toLowerCase();if(e){for(var t=this.$site.pages,r=this.$site.themeConfig.searchMaxSuggestions||5,n=this.$localePath,o=[],i=0;i=r);i++){var s=t[i];if(this.getPageLocalePath(s)===n&&this.isSearchable(s))if(a(e,s))o.push(s);else if(s.headers)for(var c=0;c=r);c++){var u=s.headers[c];u.title&&a(e,s,u.title)&&o.push(Object.assign({},s,{path:s.path+"#"+u.slug,header:u}))}}return o}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted:function(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy:function(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath:function(e){for(var t in this.$site.locales||{})if("/"!==t&&0===e.path.indexOf(t))return t;return"/"},isSearchable:function(e){var t=null;return null===t||(t=Array.isArray(t)?t:new Array(t)).filter((function(t){return e.path.match(t)})).length>0},onHotkey:function(e){e.srcElement===document.body&&["s","/"].includes(e.key)&&(this.$refs.input.focus(),e.preventDefault())},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+e._s(t.header.title))]):e._e()])])})),0):e._e()])}),[],!1,null,null,null);t.a=u.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/10.967cee24.js b/docs/assets/js/10.dc577787.js similarity index 53% rename from docs/assets/js/10.967cee24.js rename to docs/assets/js/10.dc577787.js index 6010abc9a2..08be3ab756 100644 --- a/docs/assets/js/10.967cee24.js +++ b/docs/assets/js/10.dc577787.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{422:function(n,t,e){"use strict";e.r(t);e(10);var o={data:function(){return{dynamicComponent:null}},mounted:function(){var n=this;e.e(43).then(e.t.bind(null,417,7)).then((function(t){n.dynamicComponent=t.default}))}},i=e(46),a=Object(i.a)(o,(function(){var n=this.$createElement,t=this._self._c||n;return this.dynamicComponent?t(this.dynamicComponent,this._b({tag:"component"},"component",this.$attrs,!1),[this._t("default")],2):this._e()}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{428:function(n,t,e){"use strict";e.r(t);e(11);var o={data:function(){return{dynamicComponent:null}},mounted:function(){var n=this;e.e(46).then(e.t.bind(null,423,7)).then((function(t){n.dynamicComponent=t.default}))}},i=e(10),a=Object(i.a)(o,(function(){var n=this.$createElement,t=this._self._c||n;return this.dynamicComponent?t(this.dynamicComponent,this._b({tag:"component"},"component",this.$attrs,!1),[this._t("default")],2):this._e()}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/11.cfe2389c.js b/docs/assets/js/11.7a7f26d0.js similarity index 81% rename from docs/assets/js/11.cfe2389c.js rename to docs/assets/js/11.7a7f26d0.js index 4b2defa68c..1d88b9b59c 100644 --- a/docs/assets/js/11.cfe2389c.js +++ b/docs/assets/js/11.7a7f26d0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{418:function(t,e,s){"use strict";s.r(e);var n=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],o={methods:{getMsg:function(){return n[Math.floor(Math.random()*n.length)]}}},i=s(46),h=Object(i.a)(o,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"theme-container"},[e("div",{staticClass:"theme-default-content"},[e("h1",[this._v("404")]),this._v(" "),e("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),e("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=h.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{424:function(t,e,s){"use strict";s.r(e);var n=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],o={methods:{getMsg:function(){return n[Math.floor(Math.random()*n.length)]}}},i=s(10),h=Object(i.a)(o,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"theme-container"},[e("div",{staticClass:"theme-default-content"},[e("h1",[this._v("404")]),this._v(" "),e("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),e("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=h.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/12.b126d314.js b/docs/assets/js/12.28abafc0.js similarity index 89% rename from docs/assets/js/12.b126d314.js rename to docs/assets/js/12.28abafc0.js index 2adb3ed322..93192e3285 100644 --- a/docs/assets/js/12.b126d314.js +++ b/docs/assets/js/12.28abafc0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{419:function(t,e,a){"use strict";a.r(e);var o=a(315),n=a(314),i=a(313),s=a(318),r=a(317),h=a(312),u={name:"Layout",components:{Home:o.a,Page:i.a,Sidebar:s.a,Navbar:n.a,Footer:r.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(h.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},c=a(46),d=Object(c.a)(u,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container blank",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("Footer")],1)}),[],!1,null,null,null);e.default=d.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{425:function(t,e,a){"use strict";a.r(e);var o=a(326),n=a(325),i=a(324),s=a(329),r=a(328),h=a(323),u={name:"Layout",components:{Home:o.a,Page:i.a,Sidebar:s.a,Navbar:n.a,Footer:r.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(h.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},c=a(10),d=Object(c.a)(u,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container blank",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("Footer")],1)}),[],!1,null,null,null);e.default=d.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/13.e3568918.js b/docs/assets/js/13.a2f47673.js similarity index 89% rename from docs/assets/js/13.e3568918.js rename to docs/assets/js/13.a2f47673.js index 8989407dc3..b382cb5a65 100644 --- a/docs/assets/js/13.e3568918.js +++ b/docs/assets/js/13.a2f47673.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{316:function(t,e,a){"use strict";a.r(e);var o=a(315),n=a(314),i=a(313),s=a(318),r=a(312),h={name:"Layout",components:{Home:o.a,Page:i.a,Sidebar:s.a,Navbar:n.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(r.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(46),c=Object(u.a)(h,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?a("Home"):a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=c.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{327:function(t,e,a){"use strict";a.r(e);var o=a(326),n=a(325),i=a(324),s=a(329),r=a(323),h={name:"Layout",components:{Home:o.a,Page:i.a,Sidebar:s.a,Navbar:n.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(r.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(10),c=Object(u.a)(h,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?a("Home"):a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=c.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/14.1feb4a56.js b/docs/assets/js/14.88cc7de1.js similarity index 89% rename from docs/assets/js/14.1feb4a56.js rename to docs/assets/js/14.88cc7de1.js index 11931c9517..e826a01c39 100644 --- a/docs/assets/js/14.1feb4a56.js +++ b/docs/assets/js/14.88cc7de1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{425:function(t,e,n){"use strict";n.r(e);var a=n(46),r=Object(a.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"introduction"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),n("p",[t._v("immudb is a "),n("strong",[t._v("lightweight, high-speed immutable database")]),t._v(" for systems and applications, written in Go.\nWith immudb you can track changes in sensitive data in your transactional databases and then record those changes permanently in a\ntamperproof immudb database. This allows you to keep an indelible history of sensitive data, for example debit/credit card transactions.\n"),n("img",{attrs:{align:"right",src:"https://raw.githubusercontent.com/codenotary/immudb/master/img/immudb-mascot-small.png",width:"256px"}})]),t._v(" "),n("p",[t._v("Traditional transaction logs are hard to scale and are mutable. So there is no way to know for sure if your data has been compromised.")]),t._v(" "),n("p",[t._v("As such, immudb provides "),n("strong",[t._v("unparalleled insights")]),t._v(" "),n("strong",[t._v("retroactively")]),t._v(" of changes to your sensitive data, even\nif your perimeter has been compromised. immudb guarantees immutability by using a "),n("strong",[t._v("Merkle tree structure")]),t._v(" internally.")]),t._v(" "),n("p",[t._v("immudb gives you the same "),n("strong",[t._v("cryptographic verification")]),t._v(" of the integrity of data written with "),n("strong",[t._v("SHA-256")]),t._v(" as a classic blockchain without the cost and complexity associated with blockchains today.")]),t._v(" "),n("h2",{attrs:{id:"why-immudb"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#why-immudb"}},[t._v("#")]),t._v(" Why immudb?")]),t._v(" "),n("p",[t._v("immudb has 4 main benefits:")]),t._v(" "),n("ol",[n("li",[n("strong",[t._v("immudb is immutable")]),t._v(". You can add records, but "),n("strong",[t._v("never change or delete records")]),t._v(".")]),t._v(" "),n("li",[t._v("Data stored in immudb is "),n("strong",[t._v("cryptographically coherent and verifiable")]),t._v(", like blockchains, just without all the complexity and at high speed.")]),t._v(" "),n("li",[t._v("Anyone can get "),n("strong",[t._v("started with immudb in minutes")]),t._v(". Whether you're using node.js, Java, Python, Golang, .Net, or any other language. It's very easy to use and you can have your immutable database running in just a few minutes.")]),t._v(" "),n("li",[t._v("Finally, immudb is "),n("strong",[t._v("Open Source")]),t._v(". You can run it "),n("strong",[t._v("on premise")]),t._v(", or in the "),n("strong",[t._v("cloud")]),t._v(". It's completely free. immudb is governed by the Apache 2.0 License.")])]),t._v(" "),n("p",[t._v("immudb can be ran on "),n("strong",[t._v("Linux")]),t._v(", "),n("strong",[t._v("FreeBSD")]),t._v(", "),n("strong",[t._v("Windows")]),t._v(", and "),n("strong",[t._v("MacOS")]),t._v(", along with\nother systems derived from them, such as "),n("strong",[t._v("Kubernetes")]),t._v(" and "),n("strong",[t._v("Docker")]),t._v(".")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://twitter.com/intent/tweet?text=immudb:%20lightweight,%20high-speed%20immutable%20database!&url=https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:"https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Tweet%20about%20immudb",alt:"Tweet aboutimmudb!"}}),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"components"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#components"}},[t._v("#")]),t._v(" Components")]),t._v(" "),n("ul",[n("li",[n("strong",[t._v("immudb")]),t._v(" is the server binary that listens on port 3322 and provides a gRPC interface")]),t._v(" "),n("li",[n("strong",[t._v("immugw")]),t._v(" is the intelligent REST proxy that connects to immudb and provides a RESTful interface for applications. We recommend to run immudb and immugw on separate machines to enhance security. immugw can be found in a different "),n("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("repository"),n("OutboundLink")],1)]),t._v(" "),n("li",[n("strong",[t._v("immuadmin")]),t._v(" is the admin CLI for immudb and immugw. You can install and manage the service installation for both components and get statistics as well as runtime information.")]),t._v(" "),n("li",[n("strong",[t._v("immuclient")]),t._v(" is the CLI client for immudb. You can read, write data into immudb from the commandline using direct or interactive mode.")])]),t._v(" "),n("p",[n("img",{attrs:{src:"https://github.com/codenotary/immudb-docs/raw/master/src/immudb/component-diagram.png",alt:"immudb component overview"}})]),t._v(" "),n("p",[t._v("The latest release binaries can be found "),n("a",{attrs:{href:"https://github.com/codenotary/immudb/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"further-readings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#further-readings"}},[t._v("#")]),t._v(" Further readings")]),t._v(" "),n("ol",[n("li",[n("RouterLink",{attrs:{to:"/how-it-works.html"}},[t._v("How it works")]),t._v(" - How does immudb work internally?")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/quickstart.html"}},[t._v("Quickstart")]),t._v(" - How to try it now on your systems, get a Docker container running in seconds")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/command-reference.html"}},[t._v("Command reference")]),t._v(" - Command reference of the components")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/apis-and-interfaces.html"}},[t._v("APIs and interfaces")]),t._v(" - API reference and code examples")],1)]),t._v(" "),n("h2",{attrs:{id:"license"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),n("p",[t._v("immudb is "),n("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),n("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{431:function(t,e,n){"use strict";n.r(e);var r=n(10),a=Object(r.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"introduction"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),n("p",[t._v("immudb is a "),n("strong",[t._v("lightweight, high-speed immutable database")]),t._v(" for systems and applications, written in Go.\nWith immudb you can track changes in sensitive data in your transactional databases and then record those changes permanently in a\ntamperproof immudb database. This allows you to keep an indelible history of sensitive data, for example debit/credit card transactions.\n"),n("img",{attrs:{align:"right",src:"https://raw.githubusercontent.com/codenotary/immudb/master/img/immudb-mascot-small.png",width:"256px"}})]),t._v(" "),n("p",[t._v("Traditional transaction logs are hard to scale and are mutable. So there is no way to know for sure if your data has been compromised.")]),t._v(" "),n("p",[t._v("As such, immudb provides "),n("strong",[t._v("unparalleled insights")]),t._v(" "),n("strong",[t._v("retroactively")]),t._v(" of changes to your sensitive data, even\nif your perimeter has been compromised. immudb guarantees immutability by using a "),n("strong",[t._v("Merkle tree structure")]),t._v(" internally.")]),t._v(" "),n("p",[t._v("immudb gives you the same "),n("strong",[t._v("cryptographic verification")]),t._v(" of the integrity of data written with "),n("strong",[t._v("SHA-256")]),t._v(" as a classic blockchain without the cost and complexity associated with blockchains today.")]),t._v(" "),n("h2",{attrs:{id:"why-immudb"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#why-immudb"}},[t._v("#")]),t._v(" Why immudb?")]),t._v(" "),n("p",[t._v("immudb has 4 main benefits:")]),t._v(" "),n("ol",[n("li",[n("strong",[t._v("immudb is immutable")]),t._v(". You can add records, but "),n("strong",[t._v("never change or delete records")]),t._v(".")]),t._v(" "),n("li",[t._v("Data stored in immudb is "),n("strong",[t._v("cryptographically coherent and verifiable")]),t._v(", like blockchains, just without all the complexity and at high speed.")]),t._v(" "),n("li",[t._v("Anyone can get "),n("strong",[t._v("started with immudb in minutes")]),t._v(". Whether you're using node.js, Java, Python, Golang, .Net, or any other language. It's very easy to use and you can have your immutable database running in just a few minutes.")]),t._v(" "),n("li",[t._v("Finally, immudb is "),n("strong",[t._v("Open Source")]),t._v(". You can run it "),n("strong",[t._v("on premise")]),t._v(", or in the "),n("strong",[t._v("cloud")]),t._v(". It's completely free. immudb is governed by the Apache 2.0 License.")])]),t._v(" "),n("p",[t._v("immudb can be ran on "),n("strong",[t._v("Linux")]),t._v(", "),n("strong",[t._v("FreeBSD")]),t._v(", "),n("strong",[t._v("Windows")]),t._v(", and "),n("strong",[t._v("MacOS")]),t._v(", along with\nother systems derived from them, such as "),n("strong",[t._v("Kubernetes")]),t._v(" and "),n("strong",[t._v("Docker")]),t._v(".")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://twitter.com/intent/tweet?text=immudb:%20lightweight,%20high-speed%20immutable%20database!&url=https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:"https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Tweet%20about%20immudb",alt:"Tweet aboutimmudb!"}}),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"components"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#components"}},[t._v("#")]),t._v(" Components")]),t._v(" "),n("ul",[n("li",[n("strong",[t._v("immudb")]),t._v(" is the server binary that listens on port 3322 and provides a gRPC interface")]),t._v(" "),n("li",[n("strong",[t._v("immugw")]),t._v(" is the intelligent REST proxy that connects to immudb and provides a RESTful interface for applications. We recommend to run immudb and immugw on separate machines to enhance security. immugw can be found in a different "),n("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("repository"),n("OutboundLink")],1)]),t._v(" "),n("li",[n("strong",[t._v("immuadmin")]),t._v(" is the admin CLI for immudb and immugw. You can install and manage the service installation for both components and get statistics as well as runtime information.")]),t._v(" "),n("li",[n("strong",[t._v("immuclient")]),t._v(" is the CLI client for immudb. You can read, write data into immudb from the commandline using direct or interactive mode.")])]),t._v(" "),n("p",[n("img",{attrs:{src:"https://github.com/codenotary/immudb-docs/raw/master/src/immudb/component-diagram.png",alt:"immudb component overview"}})]),t._v(" "),n("p",[t._v("The latest release binaries can be found "),n("a",{attrs:{href:"https://github.com/codenotary/immudb/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"further-readings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#further-readings"}},[t._v("#")]),t._v(" Further readings")]),t._v(" "),n("ol",[n("li",[n("RouterLink",{attrs:{to:"/how-it-works.html"}},[t._v("How it works")]),t._v(" - How does immudb work internally?")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/quickstart.html"}},[t._v("Quickstart")]),t._v(" - How to try it now on your systems, get a Docker container running in seconds")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/command-reference.html"}},[t._v("Command reference")]),t._v(" - Command reference of the components")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/apis-references.html"}},[t._v("APIs and interfaces")]),t._v(" - API reference and code examples")],1)]),t._v(" "),n("h2",{attrs:{id:"license"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),n("p",[t._v("immudb is "),n("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),n("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/15.217dd402.js b/docs/assets/js/15.14ed6ea6.js similarity index 92% rename from docs/assets/js/15.217dd402.js rename to docs/assets/js/15.14ed6ea6.js index d8585fb8be..1e6a530969 100644 --- a/docs/assets/js/15.217dd402.js +++ b/docs/assets/js/15.14ed6ea6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{426:function(t,e,r){"use strict";r.r(e);var n=r(46),o=Object(n.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"immudb-got-1k-stars-on-github-recently"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immudb-got-1k-stars-on-github-recently"}},[t._v("#")]),t._v(" immudb got 1k stars on github recently")]),t._v(" "),r("p",[t._v("We're very proud that the community likes our immudb so much and want to use this opportunity to say THANK YOU!\nCrossing the "),r("a",{attrs:{href:"https://star-history.t9t.io/#codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("1k stars on GitHub"),r("OutboundLink")],1),t._v(" within a few weeks feels amazing!")]),t._v(" "),r("p",[t._v("Many open source community members reached out to us with feedback and already contributed to the project.")]),t._v(" "),r("p",[t._v("Of course it was thrilling to learn that immudb has been added to "),r("a",{attrs:{href:"https://formulae.brew.sh/formula/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("HomeBrew"),r("OutboundLink")],1),t._v(" - "),r("code",[t._v("brew install immudb")]),t._v(" by\nBig Thank you to "),r("a",{attrs:{href:"https://github.com/ankane",target:"_blank",rel:"noopener noreferrer"}},[t._v("ankane"),r("OutboundLink")],1),t._v(" for this contribution.")]),t._v(" "),r("p",[t._v("You can also find all binaries here, or build immudb yourself: "),r("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb GitHub repo"),r("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{432:function(t,e,r){"use strict";r.r(e);var n=r(10),o=Object(n.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"immudb-got-1k-stars-on-github-recently"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immudb-got-1k-stars-on-github-recently"}},[t._v("#")]),t._v(" immudb got 1k stars on github recently")]),t._v(" "),r("p",[t._v("We're very proud that the community likes our immudb so much and want to use this opportunity to say THANK YOU!\nCrossing the "),r("a",{attrs:{href:"https://star-history.t9t.io/#codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("1k stars on GitHub"),r("OutboundLink")],1),t._v(" within a few weeks feels amazing!")]),t._v(" "),r("p",[t._v("Many open source community members reached out to us with feedback and already contributed to the project.")]),t._v(" "),r("p",[t._v("Of course it was thrilling to learn that immudb has been added to "),r("a",{attrs:{href:"https://formulae.brew.sh/formula/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("HomeBrew"),r("OutboundLink")],1),t._v(" - "),r("code",[t._v("brew install immudb")]),t._v(" by\nBig Thank you to "),r("a",{attrs:{href:"https://github.com/ankane",target:"_blank",rel:"noopener noreferrer"}},[t._v("ankane"),r("OutboundLink")],1),t._v(" for this contribution.")]),t._v(" "),r("p",[t._v("You can also find all binaries here, or build immudb yourself: "),r("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb GitHub repo"),r("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/16.934f59c4.js b/docs/assets/js/16.4f4a573d.js similarity index 99% rename from docs/assets/js/16.934f59c4.js rename to docs/assets/js/16.4f4a573d.js index 2b39040e60..908bc9331d 100644 --- a/docs/assets/js/16.934f59c4.js +++ b/docs/assets/js/16.4f4a573d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{427:function(s,a,t){"use strict";t.r(a);var e=t(46),n=Object(e.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"a-step-by-step-guide-to-immudb-the-open-source-immutable-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-step-by-step-guide-to-immudb-the-open-source-immutable-database"}},[s._v("#")]),s._v(" A Step by Step Guide to immudb — the open source immutable database")]),s._v(" "),t("p",[t("strong",[s._v("immudb")]),s._v(" is "),t("strong",[s._v("lightweight, high-speed immutable database")]),s._v(" for systems and applications.")]),s._v(" "),t("p",[s._v("With "),t("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[s._v("immudb"),t("OutboundLink")],1),s._v(" you can track changes in sensitive data in your transactional databases and then record those changes indelibly in a the tamperproof immudb database.")]),s._v(" "),t("p",[s._v("This allows you to keep an indelible history of, say, your debit/credit transactions.")]),s._v(" "),t("p",[s._v("immudb is open source under the "),t("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[s._v("Apache v2.0 License"),t("OutboundLink")],1),s._v(", and can be found here (there is also a more comprehensive documentation):")]),s._v(" "),t("p",[s._v("Traditional transaction logs are hard to scale, and are not immutable. So there is no way to know for sure if your data has been compromised.")]),s._v(" "),t("p",[s._v("You can find an example video here:")]),s._v(" "),t("h2",{attrs:{id:"how-it-works"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#how-it-works"}},[s._v("#")]),s._v(" How it works")]),s._v(" "),t("p",[s._v("As such immudb provides "),t("strong",[s._v("unparalleled insights")]),s._v(" "),t("strong",[s._v("retro-actively")]),s._v(", of what happened to your sensitive data, even if your perimiter was compromised. immudb provides the guarantatee of immutability by using internally a "),t("strong",[s._v("Merkle tree structure")]),s._v(".")]),s._v(" "),t("p",[s._v("immudb gives you the same "),t("strong",[s._v("cyrptographic verification")]),s._v(" of the integrity of data written with "),t("strong",[s._v("SHA-256")]),s._v(" like classic blockchain without the cost and complexity associated with blockchains today.")]),s._v(" "),t("p",[s._v("immudb has 4 main benefits:")]),s._v(" "),t("ul",[t("li",[t("strong",[s._v("immudb is immutable")]),s._v(". You can only add records, but "),t("strong",[s._v("never change or delete records")]),s._v(".")]),s._v(" "),t("li",[s._v("data stored in immudb is "),t("strong",[s._v("cryptographically coherent and verifiable")]),s._v(", like blockchains, just without all the complexity and at high speed.")]),s._v(" "),t("li",[s._v("Anyone can get "),t("strong",[s._v("started with immudb in minutes")]),s._v(". Wether in node.js, Java, Python, Golang, .Net, or any other language. It's very easy to use and you can have your immutable database running in just a few minutes.")]),s._v(" "),t("li",[s._v("Finally, immudb is "),t("strong",[s._v("Open Source")]),s._v(". You can run it "),t("strong",[s._v("on premise")]),s._v(", or in the "),t("strong",[s._v("cloud")]),s._v(" and it's completely free. immudb is governed by the Apache 2.0 License.")])]),s._v(" "),t("p",[s._v("immudb is currently runs on "),t("strong",[s._v("Linux")]),s._v(", "),t("strong",[s._v("FreeBSD")]),s._v(", "),t("strong",[s._v("Windows")]),s._v(", and "),t("strong",[s._v("MacOS")]),s._v(", along with other systems derived from them, such as "),t("strong",[s._v("Kubernetes")]),s._v(" and "),t("strong",[s._v("Docker")]),s._v(".")]),s._v(" "),t("h2",{attrs:{id:"immudb-high-level"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-high-level"}},[s._v("#")]),s._v(" "),t("strong",[s._v("immudb High-level")])]),s._v(" "),t("h2",{attrs:{id:"the-components"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-components"}},[s._v("#")]),s._v(" The components")]),s._v(" "),t("ul",[t("li",[t("strong",[s._v("immudb")]),s._v(" is the server binary that listens on port 3322 on localhost and provides a gRPC interface")]),s._v(" "),t("li",[t("strong",[s._v("immugw")]),s._v(" is the intelligent REST proxy that connects to immudb and provides a RESTful interface for applications. We recommend to run immudb and immugw on separate machines to enhance security")]),s._v(" "),t("li",[t("strong",[s._v("immuadmin")]),s._v(" is the admin CLI for immudb and immugw. You can install and manage the service installation for both components and get statistics as well as runtime information.")])]),s._v(" "),t("h2",{attrs:{id:"getting-started"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[s._v("#")]),s._v(" "),t("strong",[s._v("Getting started")])]),s._v(" "),t("p",[s._v("You can either build Docker images based on the Dockerfiles in the GitHub repository for the most common architectures or use the prebuild ones on Dockerhub for Linux.")]),s._v(" "),t("h2",{attrs:{id:"build-it-yourself"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-it-yourself"}},[s._v("#")]),s._v(" Build it yourself")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker build -t myown/immudb:latest -f Dockerfile "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\ndocker build -t myown/immugw:latest -f Dockerfile.immugw "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\ndocker build -t myown/immuadmin:latest -f Dockerfile.immuadmin "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])])]),t("h2",{attrs:{id:"immudb-dockerhub"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-dockerhub"}},[s._v("#")]),s._v(" immudb "),t("strong",[s._v("Dockerhub")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker run -it -d -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3322")]),s._v(":3322 -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("9497")]),s._v(":9497 — name immudb codenotary/immudb:latest\n")])])]),t("h2",{attrs:{id:"immugw-dockerhub"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immugw-dockerhub"}},[s._v("#")]),s._v(" "),t("strong",[s._v("immugw Dockerhub")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker run -it -d -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3323")]),s._v(":3323 --name immugw --env "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IMMUGW_IMMUDB_ADDRESS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("immudb codenotary/immugw:latest\n")])])]),t("h2",{attrs:{id:"standalone-binaries"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#standalone-binaries"}},[s._v("#")]),s._v(" standalone Binaries")]),s._v(" "),t("p",[s._v("If you want to build the **binaries **yourself, simply "),t("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[s._v("clone this repo"),t("OutboundLink")],1),s._v(" and run one of the following commands based on your operating system.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Linux")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("linux "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuadmin-static immudb-static\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# macOS")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("darwin "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuadmin-static immudb-static\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Microsoft Windows")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("windows "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuadmin-static immudb-static\n")])])]),t("p",[s._v("Then you can run immudb the immudb server")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# run immudb in the foreground ")]),s._v("\n./immudb\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# run immudb in the background ")]),s._v("\n./immudb -d\n")])])]),t("h2",{attrs:{id:"install-immudb-as-a-service"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-immudb-as-a-service"}},[s._v("#")]),s._v(" "),t("strong",[s._v("install immudb as a service")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# install immudb service ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# check current immudb service status ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" status\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# stop immudb service ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" stop\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# start immudb service ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" start\n")])])]),t("p",[s._v("The immudb linux service is using the following defaults:")]),s._v(" "),t("ul",[t("li",[s._v("user: immu")]),s._v(" "),t("li",[s._v("group: immu")]),s._v(" "),t("li",[s._v("configuration: /etc/immudb")]),s._v(" "),t("li",[s._v("data: /var/lib/immudb")]),s._v(" "),t("li",[s._v("logs: /var/log/immudb")]),s._v(" "),t("li",[s._v("Service Port: 3322 (immudb)")]),s._v(" "),t("li",[s._v("Prometheus Port: 9497")])]),s._v(" "),t("p",[s._v("As immudb is often compared to Amazon QLDB, we did a performance benchmark using a simple demo application to write data (without using any unfair optimization).")]),s._v(" "),t("p",[s._v("Test setup:")]),s._v(" "),t("ul",[t("li",[s._v("4 CPU cores")]),s._v(" "),t("li",[s._v("Intel(R) Xeon(R) CPU E3–1275 v6 @ 3.80GHz")]),s._v(" "),t("li",[s._v("64 GB memory")]),s._v(" "),t("li",[s._v("SSD")])]),s._v(" "),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/throughput_read.png",alt:"immudb throughput read Benchmark",title:"Throughput read (higher is better)"}})]),s._v(" "),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/throughput_write.png",alt:"immudb Throughput write Benchmark",title:"Throughput write (higher is better)"}})]),s._v(" "),t("h2",{attrs:{id:"immudb-statistics"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-statistics"}},[s._v("#")]),s._v(" immudb statistics")]),s._v(" "),t("p",[s._v("To check the statistics at any time, please use "),t("code",[s._v("immuadmin stats")]),s._v(":")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuadmin stats -t\nDatabase path "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" db/immudb\nUptime "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" 1m38.64s\nNumber of entries "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("12")]),s._v("\nLSM size "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("701")]),s._v(" B\nVLog size "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.1")]),s._v(" kB\nTotal size "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.8")]),s._v(" kB\nNumber of clients "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\nQueries per client "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("127.0")]),s._v(".0.1 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("26")]),s._v("\n Last query "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("749")]),s._v(".641765ms ago\nAvg. duration "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nb calls"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" µs\n ByIndex "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ByIndexSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ChangePassword "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Consistency "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Count "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n CreateUser "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n CurrentRoot "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n DeactivateUser "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Dump "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Get "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),s._v("\n GetBatch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n GetBatchSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n GetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Health "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("16")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("33")]),s._v("\n History "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n HistorySV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n IScan "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n IScanSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Inclusion "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Login "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Reference "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeGet "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeGetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeReference "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeSet "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeSetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeZAdd "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Scan "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ScanSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Set "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("76")]),s._v("\n SetBatch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SetBatchSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ZAdd "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ZScan "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ZScanSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\n")])])]),t("p",[s._v("or visual (default)")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/stats-v.png",alt:"immuadmin stats"}})]),s._v(" "),t("h2",{attrs:{id:"prometheus-and-grafana-monitoring"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prometheus-and-grafana-monitoring"}},[s._v("#")]),s._v(" Prometheus and Grafana monitoring")]),s._v(" "),t("p",[s._v("immudb has a built-in prometheus exporter that publishes all metrics at port 9497 (:9497/metrics) by default. When running a Prometheus instance, you can configure the target like in this example:")]),s._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("job_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'immudbmetrics'")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("scrape_interval")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 60s\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("static_configs")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("targets")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'my-immudb-server:9497'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])])]),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/grafana-dashboard.png",alt:"Grafana Dashboard"}})]),s._v(" "),t("p",[s._v("You can find the Grafana dashboard here: "),t("a",{attrs:{href:"https://grafana.com/grafana/dashboards/12026",target:"_blank",rel:"noopener noreferrer"}},[s._v("https://grafana.com/grafana/dashboards/12026"),t("OutboundLink")],1)]),s._v(" "),t("h2",{attrs:{id:"common-use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#common-use-cases"}},[s._v("#")]),s._v(" Common Use Cases")]),s._v(" "),t("p",[s._v("We already learned about the following use cases from users:")]),s._v(" "),t("ul",[t("li",[s._v("use immudb to immutably store every update to sensitive database fields (credit card or bank account data) of an existing application database")]),s._v(" "),t("li",[s._v("store CI/CD recipes in immudb to protect build and deployment pipelines")]),s._v(" "),t("li",[s._v("store public certificates in immudb")]),s._v(" "),t("li",[s._v("use immudb as an additional hash storage for digital objects checksums")]),s._v(" "),t("li",[s._v("store log streams (i. e. audit logs) tamperproof")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://www.opvizor.com",target:"_blank",rel:"noopener noreferrer"}},[s._v("Opvizor"),t("OutboundLink")],1),s._v(" — immutable log (syslog) solution for VMware vSphere")]),s._v(" "),t("h2",{attrs:{id:"api-documentation-and-how-to-use-it"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#api-documentation-and-how-to-use-it"}},[s._v("#")]),s._v(" API Documentation and how to use it")]),s._v(" "),t("p",[s._v("You can find the swagger schema for immudb here:")]),s._v(" "),t("p",[s._v("If you want to run the Swagger UI, simply run the following docker command after you cloned this repo:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker run -d -it -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8080")]),s._v(":8080 --name swagger-immudb -v "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("PWD")]),s._v("}")]),s._v("/pkg/api/schema/schema.swagger.json:/openapi.json -e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("SWAGGER_JSON")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/openapi.json swaggerapi/swagger-ui\n")])])]),t("h2",{attrs:{id:"no-programmer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#no-programmer"}},[s._v("#")]),s._v(" No programmer?")]),s._v(" "),t("p",[s._v("Actually in case you're not a programmer but still want to use immudb just to play around or within scripts, you can use immuclient.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Linux")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("linux "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuclient-static\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Microsoft Windows")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("windows "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuclient-static\n")])])]),t("p",[s._v("In case you have no idea how to build it, you can use the following Docker command and procedurel:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Linux")]),s._v("\ndocker run -it --rm -v "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("pwd")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(":/src golang:1.13-stretch "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -c "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'cd /src && GOOS=linux GOARCH=amd64 make immuclient-static'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Microsoft Windows")]),s._v("\ndocker run -it --rm -v "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("pwd")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(":/src golang:1.13-stretch "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -c "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'cd /src && GOOS=windows GOARCH=amd64 make immuclient-static'")]),s._v("\n")])])]),t("p",[s._v("Now you'll find the immuclient binary in the repository folder and ready to be used.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient --help\n")])])]),t("p",[s._v("gives you details how to use it.")]),s._v(" "),t("h2",{attrs:{id:"add-a-record-to-immudb"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-a-record-to-immudb"}},[s._v("#")]),s._v(" Add a record to immudb")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# same system where immudb server is running")]),s._v("\n./immuclient safeset mykey myvalue\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# immudb server runs on a remote system")]),s._v("\n./immuclient -a safeset mykey myvalue\n")])])]),t("p",[s._v("You'll receive something similar to:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeset k1 v1\nindex: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("307")]),s._v("\nkey: k1\nvalue: v1\nhash: 4a6a18172eba5a3ea49a3caf147ac405c874ed4c922cc7dafe0dce5ff85f35aa\ntime: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2020")]),s._v("–05–13 04:01:30 -0400 EDT\nverified: "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n")])])]),t("h2",{attrs:{id:"get-the-record-from-immudb"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#get-the-record-from-immudb"}},[s._v("#")]),s._v(" Get the record from immudb")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# same system where immudb server is running")]),s._v("\n./immuclient safeget mykey\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# get the value history")]),s._v("\n./immuclient "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("history")]),s._v(" mykey\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# immudb server runs on a remote system")]),s._v("\n./immuclient -a safeget mykey\n")])])]),t("p",[s._v("The")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[s._v("safeGet \n")])])]),t("p",[s._v("and")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[s._v("safeSet \n")])])]),t("p",[s._v("commands do a consistency check for the values as well.")]),s._v(" "),t("p",[s._v("Now you could store any kind of data, like the content of a sensitive database field, public certificate or a even a configuration file.")]),s._v(" "),t("p",[s._v("Let's try with a local Dockerfile and make sure there are not new lines or special characters in our value.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeset Dockerfile1 "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" -n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" Dockerfile"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v('"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" base64 -w "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v("\n")])])]),t("p",[s._v("To get the data back, you need to make sure to convert it again.")]),s._v(" "),t("p",[s._v("As the output of safeget contains more than just the value, as seen here:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeget Dockerfile1\nindex: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("309")]),s._v("\nkey: Dockerfile1\nvalue: RlJPTSBnb2xhbmc6MS4xMy1zdHJldGNoIGFzIGJ1aWxkCldPUktESVIgL3NyYwpDT1BZIC4gLgpSVU4gR09PUz1saW51eCBHT0FSQ0g9YW1kNjQgbWFrZSBpbW11YWRtaW4tc3RhdGljCkZST00gdWJ1bnR1OjE4LjA0Ck1BSU5UQUlORVIgdkNoYWluLCBJbmMuICA8aW5mb0B2Y2hhaW4udXM+CgpDT1BZIC0tZnJvbT1idWlsZCAvc3JjL2ltbXVhZG1pbiAvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4KCkFSRyBJTU1VX1VJRD0iMzMyMiIKQVJHIElNTVVfR0lEPSIzMzIyIgoKRU5WIElNTVVBRE1JTl9JTU1VREItQUREUkVTUz0iMTI3LjAuMC4xIiBcCiAgICBJTU1VQURNSU5fSU1NVURCLVBPUlQ9IjMzMjIiIFwKICAgIElNTVVEQl9NVExTPSJmYWxzZSIgCgpSVU4gYWRkZ3JvdXAgLS1zeXN0ZW0gLS1naWQgJElNTVVfR0lEIGltbXUgJiYgXAogICAgYWRkdXNlciAtLXN5c3RlbSAtLXVpZCAkSU1NVV9VSUQgLS1uby1jcmVhdGUtaG9tZSAtLWluZ3JvdXAgaW1tdSBpbW11ICYmIFwKICAgIGNobW9kICt4IC91c3IvbG9jYWwvYmluL2ltbXVhZG1pbgoKVVNFUiBpbW11CkVOVFJZUE9JTlQgWyIvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4iXQ"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v("\nhash: dfca217e2d87dccb8fd3fe8c1b49e620cc4ece8dc9c9fc2384cb6f6c9617eddb\ntime: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2020")]),s._v("-05-13 05:19:19 -0400 EDT\nverified: "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n")])])]),t("p",[s._v("the command is a bit more complex")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeget Dockerfile1 "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("grep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^value"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cut")]),s._v(" -d"),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('":"')]),s._v(" -f2 "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("xargs")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" -n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" base64 -di\n")])])]),t("p",[s._v("There are also SDK driver for .net, Java, Node.js, Python available")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{436:function(s,a,t){"use strict";t.r(a);var e=t(10),n=Object(e.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"a-step-by-step-guide-to-immudb-the-open-source-immutable-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-step-by-step-guide-to-immudb-the-open-source-immutable-database"}},[s._v("#")]),s._v(" A Step by Step Guide to immudb — the open source immutable database")]),s._v(" "),t("p",[t("strong",[s._v("immudb")]),s._v(" is "),t("strong",[s._v("lightweight, high-speed immutable database")]),s._v(" for systems and applications.")]),s._v(" "),t("p",[s._v("With "),t("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[s._v("immudb"),t("OutboundLink")],1),s._v(" you can track changes in sensitive data in your transactional databases and then record those changes indelibly in a the tamperproof immudb database.")]),s._v(" "),t("p",[s._v("This allows you to keep an indelible history of, say, your debit/credit transactions.")]),s._v(" "),t("p",[s._v("immudb is open source under the "),t("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[s._v("Apache v2.0 License"),t("OutboundLink")],1),s._v(", and can be found here (there is also a more comprehensive documentation):")]),s._v(" "),t("p",[s._v("Traditional transaction logs are hard to scale, and are not immutable. So there is no way to know for sure if your data has been compromised.")]),s._v(" "),t("p",[s._v("You can find an example video here:")]),s._v(" "),t("h2",{attrs:{id:"how-it-works"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#how-it-works"}},[s._v("#")]),s._v(" How it works")]),s._v(" "),t("p",[s._v("As such immudb provides "),t("strong",[s._v("unparalleled insights")]),s._v(" "),t("strong",[s._v("retro-actively")]),s._v(", of what happened to your sensitive data, even if your perimiter was compromised. immudb provides the guarantatee of immutability by using internally a "),t("strong",[s._v("Merkle tree structure")]),s._v(".")]),s._v(" "),t("p",[s._v("immudb gives you the same "),t("strong",[s._v("cyrptographic verification")]),s._v(" of the integrity of data written with "),t("strong",[s._v("SHA-256")]),s._v(" like classic blockchain without the cost and complexity associated with blockchains today.")]),s._v(" "),t("p",[s._v("immudb has 4 main benefits:")]),s._v(" "),t("ul",[t("li",[t("strong",[s._v("immudb is immutable")]),s._v(". You can only add records, but "),t("strong",[s._v("never change or delete records")]),s._v(".")]),s._v(" "),t("li",[s._v("data stored in immudb is "),t("strong",[s._v("cryptographically coherent and verifiable")]),s._v(", like blockchains, just without all the complexity and at high speed.")]),s._v(" "),t("li",[s._v("Anyone can get "),t("strong",[s._v("started with immudb in minutes")]),s._v(". Wether in node.js, Java, Python, Golang, .Net, or any other language. It's very easy to use and you can have your immutable database running in just a few minutes.")]),s._v(" "),t("li",[s._v("Finally, immudb is "),t("strong",[s._v("Open Source")]),s._v(". You can run it "),t("strong",[s._v("on premise")]),s._v(", or in the "),t("strong",[s._v("cloud")]),s._v(" and it's completely free. immudb is governed by the Apache 2.0 License.")])]),s._v(" "),t("p",[s._v("immudb is currently runs on "),t("strong",[s._v("Linux")]),s._v(", "),t("strong",[s._v("FreeBSD")]),s._v(", "),t("strong",[s._v("Windows")]),s._v(", and "),t("strong",[s._v("MacOS")]),s._v(", along with other systems derived from them, such as "),t("strong",[s._v("Kubernetes")]),s._v(" and "),t("strong",[s._v("Docker")]),s._v(".")]),s._v(" "),t("h2",{attrs:{id:"immudb-high-level"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-high-level"}},[s._v("#")]),s._v(" "),t("strong",[s._v("immudb High-level")])]),s._v(" "),t("h2",{attrs:{id:"the-components"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-components"}},[s._v("#")]),s._v(" The components")]),s._v(" "),t("ul",[t("li",[t("strong",[s._v("immudb")]),s._v(" is the server binary that listens on port 3322 on localhost and provides a gRPC interface")]),s._v(" "),t("li",[t("strong",[s._v("immugw")]),s._v(" is the intelligent REST proxy that connects to immudb and provides a RESTful interface for applications. We recommend to run immudb and immugw on separate machines to enhance security")]),s._v(" "),t("li",[t("strong",[s._v("immuadmin")]),s._v(" is the admin CLI for immudb and immugw. You can install and manage the service installation for both components and get statistics as well as runtime information.")])]),s._v(" "),t("h2",{attrs:{id:"getting-started"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[s._v("#")]),s._v(" "),t("strong",[s._v("Getting started")])]),s._v(" "),t("p",[s._v("You can either build Docker images based on the Dockerfiles in the GitHub repository for the most common architectures or use the prebuild ones on Dockerhub for Linux.")]),s._v(" "),t("h2",{attrs:{id:"build-it-yourself"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-it-yourself"}},[s._v("#")]),s._v(" Build it yourself")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker build -t myown/immudb:latest -f Dockerfile "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\ndocker build -t myown/immugw:latest -f Dockerfile.immugw "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\ndocker build -t myown/immuadmin:latest -f Dockerfile.immuadmin "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n")])])]),t("h2",{attrs:{id:"immudb-dockerhub"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-dockerhub"}},[s._v("#")]),s._v(" immudb "),t("strong",[s._v("Dockerhub")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker run -it -d -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3322")]),s._v(":3322 -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("9497")]),s._v(":9497 — name immudb codenotary/immudb:latest\n")])])]),t("h2",{attrs:{id:"immugw-dockerhub"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immugw-dockerhub"}},[s._v("#")]),s._v(" "),t("strong",[s._v("immugw Dockerhub")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker run -it -d -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3323")]),s._v(":3323 --name immugw --env "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IMMUGW_IMMUDB_ADDRESS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("immudb codenotary/immugw:latest\n")])])]),t("h2",{attrs:{id:"standalone-binaries"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#standalone-binaries"}},[s._v("#")]),s._v(" standalone Binaries")]),s._v(" "),t("p",[s._v("If you want to build the **binaries **yourself, simply "),t("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[s._v("clone this repo"),t("OutboundLink")],1),s._v(" and run one of the following commands based on your operating system.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Linux")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("linux "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuadmin-static immudb-static\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# macOS")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("darwin "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuadmin-static immudb-static\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Microsoft Windows")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("windows "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuadmin-static immudb-static\n")])])]),t("p",[s._v("Then you can run immudb the immudb server")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# run immudb in the foreground ")]),s._v("\n./immudb\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# run immudb in the background ")]),s._v("\n./immudb -d\n")])])]),t("h2",{attrs:{id:"install-immudb-as-a-service"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-immudb-as-a-service"}},[s._v("#")]),s._v(" "),t("strong",[s._v("install immudb as a service")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# install immudb service ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# check current immudb service status ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" status\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# stop immudb service ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" stop\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# start immudb service ")]),s._v("\n./immudb "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" start\n")])])]),t("p",[s._v("The immudb linux service is using the following defaults:")]),s._v(" "),t("ul",[t("li",[s._v("user: immu")]),s._v(" "),t("li",[s._v("group: immu")]),s._v(" "),t("li",[s._v("configuration: /etc/immudb")]),s._v(" "),t("li",[s._v("data: /var/lib/immudb")]),s._v(" "),t("li",[s._v("logs: /var/log/immudb")]),s._v(" "),t("li",[s._v("Service Port: 3322 (immudb)")]),s._v(" "),t("li",[s._v("Prometheus Port: 9497")])]),s._v(" "),t("p",[s._v("As immudb is often compared to Amazon QLDB, we did a performance benchmark using a simple demo application to write data (without using any unfair optimization).")]),s._v(" "),t("p",[s._v("Test setup:")]),s._v(" "),t("ul",[t("li",[s._v("4 CPU cores")]),s._v(" "),t("li",[s._v("Intel(R) Xeon(R) CPU E3–1275 v6 @ 3.80GHz")]),s._v(" "),t("li",[s._v("64 GB memory")]),s._v(" "),t("li",[s._v("SSD")])]),s._v(" "),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/throughput_read.png",alt:"immudb throughput read Benchmark",title:"Throughput read (higher is better)"}})]),s._v(" "),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/throughput_write.png",alt:"immudb Throughput write Benchmark",title:"Throughput write (higher is better)"}})]),s._v(" "),t("h2",{attrs:{id:"immudb-statistics"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-statistics"}},[s._v("#")]),s._v(" immudb statistics")]),s._v(" "),t("p",[s._v("To check the statistics at any time, please use "),t("code",[s._v("immuadmin stats")]),s._v(":")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuadmin stats -t\nDatabase path "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" db/immudb\nUptime "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" 1m38.64s\nNumber of entries "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("12")]),s._v("\nLSM size "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("701")]),s._v(" B\nVLog size "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.1")]),s._v(" kB\nTotal size "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.8")]),s._v(" kB\nNumber of clients "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\nQueries per client "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("127.0")]),s._v(".0.1 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("26")]),s._v("\n Last query "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("749")]),s._v(".641765ms ago\nAvg. duration "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("nb calls"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" µs\n ByIndex "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ByIndexSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ChangePassword "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Consistency "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Count "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n CreateUser "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n CurrentRoot "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n DeactivateUser "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Dump "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Get "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),s._v("\n GetBatch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n GetBatchSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n GetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Health "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("16")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("33")]),s._v("\n History "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n HistorySV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n IScan "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n IScanSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Inclusion "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Login "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Reference "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeGet "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeGetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeReference "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeSet "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeSetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SafeZAdd "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Scan "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ScanSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n Set "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("76")]),s._v("\n SetBatch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SetBatchSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n SetSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ZAdd "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ZScan "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n ZScanSV "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\n")])])]),t("p",[s._v("or visual (default)")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/stats-v.png",alt:"immuadmin stats"}})]),s._v(" "),t("h2",{attrs:{id:"prometheus-and-grafana-monitoring"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prometheus-and-grafana-monitoring"}},[s._v("#")]),s._v(" Prometheus and Grafana monitoring")]),s._v(" "),t("p",[s._v("immudb has a built-in prometheus exporter that publishes all metrics at port 9497 (:9497/metrics) by default. When running a Prometheus instance, you can configure the target like in this example:")]),s._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("job_name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'immudbmetrics'")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("scrape_interval")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" 60s\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("static_configs")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("targets")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'my-immudb-server:9497'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])])]),t("p",[t("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/grafana-dashboard.png",alt:"Grafana Dashboard"}})]),s._v(" "),t("p",[s._v("You can find the Grafana dashboard here: "),t("a",{attrs:{href:"https://grafana.com/grafana/dashboards/12026",target:"_blank",rel:"noopener noreferrer"}},[s._v("https://grafana.com/grafana/dashboards/12026"),t("OutboundLink")],1)]),s._v(" "),t("h2",{attrs:{id:"common-use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#common-use-cases"}},[s._v("#")]),s._v(" Common Use Cases")]),s._v(" "),t("p",[s._v("We already learned about the following use cases from users:")]),s._v(" "),t("ul",[t("li",[s._v("use immudb to immutably store every update to sensitive database fields (credit card or bank account data) of an existing application database")]),s._v(" "),t("li",[s._v("store CI/CD recipes in immudb to protect build and deployment pipelines")]),s._v(" "),t("li",[s._v("store public certificates in immudb")]),s._v(" "),t("li",[s._v("use immudb as an additional hash storage for digital objects checksums")]),s._v(" "),t("li",[s._v("store log streams (i. e. audit logs) tamperproof")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://www.opvizor.com",target:"_blank",rel:"noopener noreferrer"}},[s._v("Opvizor"),t("OutboundLink")],1),s._v(" — immutable log (syslog) solution for VMware vSphere")]),s._v(" "),t("h2",{attrs:{id:"api-documentation-and-how-to-use-it"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#api-documentation-and-how-to-use-it"}},[s._v("#")]),s._v(" API Documentation and how to use it")]),s._v(" "),t("p",[s._v("You can find the swagger schema for immudb here:")]),s._v(" "),t("p",[s._v("If you want to run the Swagger UI, simply run the following docker command after you cloned this repo:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker run -d -it -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8080")]),s._v(":8080 --name swagger-immudb -v "),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("${"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("PWD")]),s._v("}")]),s._v("/pkg/api/schema/schema.swagger.json:/openapi.json -e "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("SWAGGER_JSON")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/openapi.json swaggerapi/swagger-ui\n")])])]),t("h2",{attrs:{id:"no-programmer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#no-programmer"}},[s._v("#")]),s._v(" No programmer?")]),s._v(" "),t("p",[s._v("Actually in case you're not a programmer but still want to use immudb just to play around or within scripts, you can use immuclient.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Linux")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("linux "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuclient-static\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Microsoft Windows")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOOS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("windows "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GOARCH")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("amd64 "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" immuclient-static\n")])])]),t("p",[s._v("In case you have no idea how to build it, you can use the following Docker command and procedurel:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Linux")]),s._v("\ndocker run -it --rm -v "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("pwd")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(":/src golang:1.13-stretch "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -c "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'cd /src && GOOS=linux GOARCH=amd64 make immuclient-static'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Microsoft Windows")]),s._v("\ndocker run -it --rm -v "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("pwd")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(":/src golang:1.13-stretch "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -c "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'cd /src && GOOS=windows GOARCH=amd64 make immuclient-static'")]),s._v("\n")])])]),t("p",[s._v("Now you'll find the immuclient binary in the repository folder and ready to be used.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient --help\n")])])]),t("p",[s._v("gives you details how to use it.")]),s._v(" "),t("h2",{attrs:{id:"add-a-record-to-immudb"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-a-record-to-immudb"}},[s._v("#")]),s._v(" Add a record to immudb")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# same system where immudb server is running")]),s._v("\n./immuclient safeset mykey myvalue\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# immudb server runs on a remote system")]),s._v("\n./immuclient -a safeset mykey myvalue\n")])])]),t("p",[s._v("You'll receive something similar to:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeset k1 v1\nindex: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("307")]),s._v("\nkey: k1\nvalue: v1\nhash: 4a6a18172eba5a3ea49a3caf147ac405c874ed4c922cc7dafe0dce5ff85f35aa\ntime: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2020")]),s._v("–05–13 04:01:30 -0400 EDT\nverified: "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n")])])]),t("h2",{attrs:{id:"get-the-record-from-immudb"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#get-the-record-from-immudb"}},[s._v("#")]),s._v(" Get the record from immudb")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# same system where immudb server is running")]),s._v("\n./immuclient safeget mykey\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# get the value history")]),s._v("\n./immuclient "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("history")]),s._v(" mykey\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# immudb server runs on a remote system")]),s._v("\n./immuclient -a safeget mykey\n")])])]),t("p",[s._v("The")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[s._v("safeGet \n")])])]),t("p",[s._v("and")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[s._v("safeSet \n")])])]),t("p",[s._v("commands do a consistency check for the values as well.")]),s._v(" "),t("p",[s._v("Now you could store any kind of data, like the content of a sensitive database field, public certificate or a even a configuration file.")]),s._v(" "),t("p",[s._v("Let's try with a local Dockerfile and make sure there are not new lines or special characters in our value.")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeset Dockerfile1 "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" -n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" Dockerfile"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v('"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" base64 -w "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v("\n")])])]),t("p",[s._v("To get the data back, you need to make sure to convert it again.")]),s._v(" "),t("p",[s._v("As the output of safeget contains more than just the value, as seen here:")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeget Dockerfile1\nindex: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("309")]),s._v("\nkey: Dockerfile1\nvalue: RlJPTSBnb2xhbmc6MS4xMy1zdHJldGNoIGFzIGJ1aWxkCldPUktESVIgL3NyYwpDT1BZIC4gLgpSVU4gR09PUz1saW51eCBHT0FSQ0g9YW1kNjQgbWFrZSBpbW11YWRtaW4tc3RhdGljCkZST00gdWJ1bnR1OjE4LjA0Ck1BSU5UQUlORVIgdkNoYWluLCBJbmMuICA8aW5mb0B2Y2hhaW4udXM+CgpDT1BZIC0tZnJvbT1idWlsZCAvc3JjL2ltbXVhZG1pbiAvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4KCkFSRyBJTU1VX1VJRD0iMzMyMiIKQVJHIElNTVVfR0lEPSIzMzIyIgoKRU5WIElNTVVBRE1JTl9JTU1VREItQUREUkVTUz0iMTI3LjAuMC4xIiBcCiAgICBJTU1VQURNSU5fSU1NVURCLVBPUlQ9IjMzMjIiIFwKICAgIElNTVVEQl9NVExTPSJmYWxzZSIgCgpSVU4gYWRkZ3JvdXAgLS1zeXN0ZW0gLS1naWQgJElNTVVfR0lEIGltbXUgJiYgXAogICAgYWRkdXNlciAtLXN5c3RlbSAtLXVpZCAkSU1NVV9VSUQgLS1uby1jcmVhdGUtaG9tZSAtLWluZ3JvdXAgaW1tdSBpbW11ICYmIFwKICAgIGNobW9kICt4IC91c3IvbG9jYWwvYmluL2ltbXVhZG1pbgoKVVNFUiBpbW11CkVOVFJZUE9JTlQgWyIvdXNyL2xvY2FsL2Jpbi9pbW11YWRtaW4iXQ"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("==")]),s._v("\nhash: dfca217e2d87dccb8fd3fe8c1b49e620cc4ece8dc9c9fc2384cb6f6c9617eddb\ntime: "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2020")]),s._v("-05-13 05:19:19 -0400 EDT\nverified: "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n")])])]),t("p",[s._v("the command is a bit more complex")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("./immuclient safeget Dockerfile1 "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("grep")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^value"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cut")]),s._v(" -d"),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('":"')]),s._v(" -f2 "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("xargs")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" -n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" base64 -di\n")])])]),t("p",[s._v("There are also SDK driver for .net, Java, Node.js, Python available")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/17.7d2cdf0d.js b/docs/assets/js/17.624242d7.js similarity index 97% rename from docs/assets/js/17.7d2cdf0d.js rename to docs/assets/js/17.624242d7.js index b5476d7dec..e8e045e322 100644 --- a/docs/assets/js/17.7d2cdf0d.js +++ b/docs/assets/js/17.624242d7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{428:function(e,t,r){"use strict";r.r(t);var n=r(46),i=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"immudb-release-v0-6-1"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immudb-release-v0-6-1"}},[e._v("#")]),e._v(" immudb release v0.6.1")]),e._v(" "),r("p",[e._v("Release v0.6.1 fixes some important bugs and has many improvements - we recommend updating to it")]),e._v(" "),r("h1",{attrs:{id:"changelog"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#changelog"}},[e._v("#")]),e._v(" Changelog")]),e._v(" "),r("p",[r("a",{attrs:{name:"v0.6.1"}})]),e._v(" "),r("h2",{attrs:{id:"v0-6-1-2020-06-09"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#v0-6-1-2020-06-09"}},[e._v("#")]),e._v(" [v0.6.1] - 2020-06-09")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[e._v("disallow running immuadmin backup with current directory as source")]),e._v(" "),r("li",[e._v("immuadmin dump hangs indefinitely if token is invalid")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/283",target:"_blank",rel:"noopener noreferrer"}},[e._v("#283"),r("OutboundLink")],1),e._v(", immudb crash on dump of empty db")]),e._v(" "),r("li",[e._v("fix corruption checker crash during immudb shoutdown")]),e._v(" "),r("li",[e._v("choose correct config for immudb, immugw installation")]),e._v(" "),r("li",[e._v("update env vars in README and Docker files ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/297",target:"_blank",rel:"noopener noreferrer"}},[e._v("#297"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin:")]),e._v(" inform user that manual server restart may be needed after interrupted backup")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin:")]),e._v(" validate backup dir before asking password")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuclient:")]),e._v(" add version sub-command to immuclient interractive mode")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuclient:")]),e._v(" nil pointer when audit-mode used with immudb running as daemon")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immutest:")]),e._v(" add new line at the end of output message")]),e._v(" "),r("li",[r("strong",[e._v("pkg/ring:")]),e._v(" return nil on inconsistent access to buffer rings elements")]),e._v(" "),r("li",[r("strong",[e._v("pkg/store:")]),e._v(" fix visualization of non frozen nodes inside print tree command")]),e._v(" "),r("li",[r("strong",[e._v("pkg/store/treestore:")]),e._v(" fix overwriting on non frozen nodes")])]),e._v(" "),r("h3",{attrs:{id:"changes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#changes"}},[e._v("#")]),e._v(" Changes")]),e._v(" "),r("ul",[r("li",[e._v("add license to tests ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/288",target:"_blank",rel:"noopener noreferrer"}},[e._v("#288"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("update statement about traditional DBs in README")]),e._v(" "),r("li",[e._v("remove immugw configs from immudb config file "),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/302",target:"_blank",rel:"noopener noreferrer"}},[e._v("#302"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin/command:")]),e._v(" improve visualization ui in merkle tree print command")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin/command/service:")]),e._v(" syntax error, build fails on windows")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuclient/audit:")]),e._v(" code cleanup and renaming")]),e._v(" "),r("li",[r("strong",[e._v("pkg/store/treestore:")]),e._v(" improve cache invalidation")])]),e._v(" "),r("h3",{attrs:{id:"code-refactoring"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#code-refactoring"}},[e._v("#")]),e._v(" Code Refactoring")]),e._v(" "),r("ul",[r("li",[e._v("handling of failed dump")])]),e._v(" "),r("h3",{attrs:{id:"features"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[e._v("allow the password of immugw auditor to be base64 encoded in the config file ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/296",target:"_blank",rel:"noopener noreferrer"}},[e._v("#296"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("add auth support to immutest CLI")]),e._v(" "),r("li",[e._v("add server-side logout ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/286",target:"_blank",rel:"noopener noreferrer"}},[e._v("#286"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cmd/helper:")]),e._v(" add functionalities to print colored output")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin:")]),e._v(" add print tree command")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immutest:")]),e._v(" add env var for tokenfile")]),e._v(" "),r("li",[r("strong",[e._v("pkg:")]),e._v(" add print tree functionality")])]),e._v(" "),r("h1",{attrs:{id:"downloads"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#downloads"}},[e._v("#")]),e._v(" Downloads")]),e._v(" "),r("p",[r("strong",[e._v("Docker image")]),e._v("\nhttps://hub.docker.com/r/codenotary/immudb")]),e._v(" "),r("p",[r("strong",[e._v("Immudb Binaries")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/tag/v0.6.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("v0.6.1. download"),r("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{433:function(e,t,r){"use strict";r.r(t);var n=r(10),i=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"immudb-release-v0-6-1"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immudb-release-v0-6-1"}},[e._v("#")]),e._v(" immudb release v0.6.1")]),e._v(" "),r("p",[e._v("Release v0.6.1 fixes some important bugs and has many improvements - we recommend updating to it")]),e._v(" "),r("h1",{attrs:{id:"changelog"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#changelog"}},[e._v("#")]),e._v(" Changelog")]),e._v(" "),r("p",[r("a",{attrs:{name:"v0.6.1"}})]),e._v(" "),r("h2",{attrs:{id:"v0-6-1-2020-06-09"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#v0-6-1-2020-06-09"}},[e._v("#")]),e._v(" [v0.6.1] - 2020-06-09")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[e._v("disallow running immuadmin backup with current directory as source")]),e._v(" "),r("li",[e._v("immuadmin dump hangs indefinitely if token is invalid")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/283",target:"_blank",rel:"noopener noreferrer"}},[e._v("#283"),r("OutboundLink")],1),e._v(", immudb crash on dump of empty db")]),e._v(" "),r("li",[e._v("fix corruption checker crash during immudb shoutdown")]),e._v(" "),r("li",[e._v("choose correct config for immudb, immugw installation")]),e._v(" "),r("li",[e._v("update env vars in README and Docker files ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/297",target:"_blank",rel:"noopener noreferrer"}},[e._v("#297"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin:")]),e._v(" inform user that manual server restart may be needed after interrupted backup")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin:")]),e._v(" validate backup dir before asking password")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuclient:")]),e._v(" add version sub-command to immuclient interractive mode")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuclient:")]),e._v(" nil pointer when audit-mode used with immudb running as daemon")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immutest:")]),e._v(" add new line at the end of output message")]),e._v(" "),r("li",[r("strong",[e._v("pkg/ring:")]),e._v(" return nil on inconsistent access to buffer rings elements")]),e._v(" "),r("li",[r("strong",[e._v("pkg/store:")]),e._v(" fix visualization of non frozen nodes inside print tree command")]),e._v(" "),r("li",[r("strong",[e._v("pkg/store/treestore:")]),e._v(" fix overwriting on non frozen nodes")])]),e._v(" "),r("h3",{attrs:{id:"changes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#changes"}},[e._v("#")]),e._v(" Changes")]),e._v(" "),r("ul",[r("li",[e._v("add license to tests ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/288",target:"_blank",rel:"noopener noreferrer"}},[e._v("#288"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("update statement about traditional DBs in README")]),e._v(" "),r("li",[e._v("remove immugw configs from immudb config file "),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/302",target:"_blank",rel:"noopener noreferrer"}},[e._v("#302"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin/command:")]),e._v(" improve visualization ui in merkle tree print command")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin/command/service:")]),e._v(" syntax error, build fails on windows")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuclient/audit:")]),e._v(" code cleanup and renaming")]),e._v(" "),r("li",[r("strong",[e._v("pkg/store/treestore:")]),e._v(" improve cache invalidation")])]),e._v(" "),r("h3",{attrs:{id:"code-refactoring"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#code-refactoring"}},[e._v("#")]),e._v(" Code Refactoring")]),e._v(" "),r("ul",[r("li",[e._v("handling of failed dump")])]),e._v(" "),r("h3",{attrs:{id:"features"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[e._v("allow the password of immugw auditor to be base64 encoded in the config file ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/296",target:"_blank",rel:"noopener noreferrer"}},[e._v("#296"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("add auth support to immutest CLI")]),e._v(" "),r("li",[e._v("add server-side logout ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb/issues/286",target:"_blank",rel:"noopener noreferrer"}},[e._v("#286"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cmd/helper:")]),e._v(" add functionalities to print colored output")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immuadmin:")]),e._v(" add print tree command")]),e._v(" "),r("li",[r("strong",[e._v("cmd/immutest:")]),e._v(" add env var for tokenfile")]),e._v(" "),r("li",[r("strong",[e._v("pkg:")]),e._v(" add print tree functionality")])]),e._v(" "),r("h1",{attrs:{id:"downloads"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#downloads"}},[e._v("#")]),e._v(" Downloads")]),e._v(" "),r("p",[r("strong",[e._v("Docker image")]),e._v("\nhttps://hub.docker.com/r/codenotary/immudb")]),e._v(" "),r("p",[r("strong",[e._v("Immudb Binaries")])]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/tag/v0.6.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("v0.6.1. download"),r("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/18.35025aa4.js b/docs/assets/js/18.09ae4c6b.js similarity index 97% rename from docs/assets/js/18.35025aa4.js rename to docs/assets/js/18.09ae4c6b.js index 4d9b2a7da9..9c68aaa6ad 100644 --- a/docs/assets/js/18.35025aa4.js +++ b/docs/assets/js/18.09ae4c6b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{429:function(e,a,t){"use strict";t.r(a);var r=t(46),s=Object(r.a)({},(function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"immudb-release-v0-6-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-release-v0-6-2"}},[e._v("#")]),e._v(" immudb release v0.6.2")]),e._v(" "),t("p",[e._v("Release v0.6.2 - ringbuffer management fix, improved user management for automatic deployment, improved container support")]),e._v(" "),t("h1",{attrs:{id:"changelog"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#changelog"}},[e._v("#")]),e._v(" Changelog")]),e._v(" "),t("p",[t("a",{attrs:{name:"v0.6.2"}})]),e._v(" "),t("h2",{attrs:{id:"v0-6-2-2020-06-15"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v0-6-2-2020-06-15"}},[e._v("#")]),e._v(" [v0.6.2] - 2020-06-15")]),e._v(" "),t("h3",{attrs:{id:"bug-fixes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),t("ul",[t("li",[e._v("require auth for admin commands even if auth is disabled on server, do not allow admin user to be deactivated")]),e._v(" "),t("li",[e._v('base64 decoding of passwords: now it requires the "enc:" prefix as base64 can not be differentiated from plain-text at runtime (e.g. "immu" is a valid base64 encode string)')]),e._v(" "),t("li",[e._v('only require admin password to be changed if it is "immu"')]),e._v(" "),t("li",[e._v("fix ldflags on dist binaries and add static compilation infos")]),e._v(" "),t("li",[t("strong",[e._v("cmd/immuclient/audit:")]),e._v(" fix base64 encoded password not working with immuclient audit-mode")]),e._v(" "),t("li",[t("strong",[e._v("immuadmin:")]),e._v(" repair password change flow right after first admin login")]),e._v(" "),t("li",[t("strong",[e._v("pkg/auth:")]),e._v(" make ListUsers require admin permissions")]),e._v(" "),t("li",[t("strong",[e._v("pkg/ring:")]),e._v(" fixes cache corruption due to a ring buffer elements overwrite on same internal index")]),e._v(" "),t("li",[t("strong",[e._v("pkg/store:")]),e._v(" remove useless ringbuffer array")]),e._v(" "),t("li",[t("strong",[e._v("pkg/store:")]),e._v(" fix uniform cache layers size allocation with small values")])]),e._v(" "),t("h3",{attrs:{id:"changes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#changes"}},[e._v("#")]),e._v(" Changes")]),e._v(" "),t("ul",[t("li",[e._v("add bug and feature request report github template")]),e._v(" "),t("li",[e._v("fix golint errors")]),e._v(" "),t("li",[e._v("githubactions add windows and build step")]),e._v(" "),t("li",[e._v("remove plain-test admin password from log outputs")]),e._v(" "),t("li",[e._v("add message (in cli help and swagger description) about base64-encoded inputs and outputs of get and set commands")]),e._v(" "),t("li",[e._v("FreeBSD section in the readme")]),e._v(" "),t("li",[e._v("fix changelog auto generation repo and releasing template")]),e._v(" "),t("li",[t("strong",[e._v("pkg/server:")]),e._v(" reduce corruption_checker resources usage")])]),e._v(" "),t("h3",{attrs:{id:"features"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),t("ul",[t("li",[e._v("expose through REST the following user-related actions: create, get, list, change password, set permission and deactivate")]),e._v(" "),t("li",[e._v("immuclient freebsd daemon installation")]),e._v(" "),t("li",[e._v("freebsd service install")]),e._v(" "),t("li",[e._v("read immudb default admin password from flag, config or env var")]),e._v(" "),t("li",[e._v("use immu as default admin password instead of randomly generated one")]),e._v(" "),t("li",[t("strong",[e._v("immudb:")]),e._v(" accept base64 string for admin password in flag/config/env var")])]),e._v(" "),t("h1",{attrs:{id:"downloads"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#downloads"}},[e._v("#")]),e._v(" Downloads")]),e._v(" "),t("p",[t("strong",[e._v("Docker image")]),e._v(" "),t("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("v0.6.2 Dockerhub"),t("OutboundLink")],1)]),e._v(" "),t("p",[t("strong",[e._v("Immudb Binaries")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/tag/v0.6.2",target:"_blank",rel:"noopener noreferrer"}},[e._v("v0.6.2 download"),t("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{434:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"immudb-release-v0-6-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#immudb-release-v0-6-2"}},[e._v("#")]),e._v(" immudb release v0.6.2")]),e._v(" "),t("p",[e._v("Release v0.6.2 - ringbuffer management fix, improved user management for automatic deployment, improved container support")]),e._v(" "),t("h1",{attrs:{id:"changelog"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#changelog"}},[e._v("#")]),e._v(" Changelog")]),e._v(" "),t("p",[t("a",{attrs:{name:"v0.6.2"}})]),e._v(" "),t("h2",{attrs:{id:"v0-6-2-2020-06-15"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v0-6-2-2020-06-15"}},[e._v("#")]),e._v(" [v0.6.2] - 2020-06-15")]),e._v(" "),t("h3",{attrs:{id:"bug-fixes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),t("ul",[t("li",[e._v("require auth for admin commands even if auth is disabled on server, do not allow admin user to be deactivated")]),e._v(" "),t("li",[e._v('base64 decoding of passwords: now it requires the "enc:" prefix as base64 can not be differentiated from plain-text at runtime (e.g. "immu" is a valid base64 encode string)')]),e._v(" "),t("li",[e._v('only require admin password to be changed if it is "immu"')]),e._v(" "),t("li",[e._v("fix ldflags on dist binaries and add static compilation infos")]),e._v(" "),t("li",[t("strong",[e._v("cmd/immuclient/audit:")]),e._v(" fix base64 encoded password not working with immuclient audit-mode")]),e._v(" "),t("li",[t("strong",[e._v("immuadmin:")]),e._v(" repair password change flow right after first admin login")]),e._v(" "),t("li",[t("strong",[e._v("pkg/auth:")]),e._v(" make ListUsers require admin permissions")]),e._v(" "),t("li",[t("strong",[e._v("pkg/ring:")]),e._v(" fixes cache corruption due to a ring buffer elements overwrite on same internal index")]),e._v(" "),t("li",[t("strong",[e._v("pkg/store:")]),e._v(" remove useless ringbuffer array")]),e._v(" "),t("li",[t("strong",[e._v("pkg/store:")]),e._v(" fix uniform cache layers size allocation with small values")])]),e._v(" "),t("h3",{attrs:{id:"changes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#changes"}},[e._v("#")]),e._v(" Changes")]),e._v(" "),t("ul",[t("li",[e._v("add bug and feature request report github template")]),e._v(" "),t("li",[e._v("fix golint errors")]),e._v(" "),t("li",[e._v("githubactions add windows and build step")]),e._v(" "),t("li",[e._v("remove plain-test admin password from log outputs")]),e._v(" "),t("li",[e._v("add message (in cli help and swagger description) about base64-encoded inputs and outputs of get and set commands")]),e._v(" "),t("li",[e._v("FreeBSD section in the readme")]),e._v(" "),t("li",[e._v("fix changelog auto generation repo and releasing template")]),e._v(" "),t("li",[t("strong",[e._v("pkg/server:")]),e._v(" reduce corruption_checker resources usage")])]),e._v(" "),t("h3",{attrs:{id:"features"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),t("ul",[t("li",[e._v("expose through REST the following user-related actions: create, get, list, change password, set permission and deactivate")]),e._v(" "),t("li",[e._v("immuclient freebsd daemon installation")]),e._v(" "),t("li",[e._v("freebsd service install")]),e._v(" "),t("li",[e._v("read immudb default admin password from flag, config or env var")]),e._v(" "),t("li",[e._v("use immu as default admin password instead of randomly generated one")]),e._v(" "),t("li",[t("strong",[e._v("immudb:")]),e._v(" accept base64 string for admin password in flag/config/env var")])]),e._v(" "),t("h1",{attrs:{id:"downloads"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#downloads"}},[e._v("#")]),e._v(" Downloads")]),e._v(" "),t("p",[t("strong",[e._v("Docker image")]),e._v(" "),t("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("v0.6.2 Dockerhub"),t("OutboundLink")],1)]),e._v(" "),t("p",[t("strong",[e._v("Immudb Binaries")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/tag/v0.6.2",target:"_blank",rel:"noopener noreferrer"}},[e._v("v0.6.2 download"),t("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/19.28f00029.js b/docs/assets/js/19.c5ec4257.js similarity index 96% rename from docs/assets/js/19.28f00029.js rename to docs/assets/js/19.c5ec4257.js index a83bfe15a6..f969a9b035 100644 --- a/docs/assets/js/19.28f00029.js +++ b/docs/assets/js/19.c5ec4257.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{430:function(e,t,a){"use strict";a.r(t);var n=a(46),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("div",[a("h1",{attrs:{id:"the-tamper-proof-full-list-of-ppp-recipients-on-immudb-the-immutable-database"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-tamper-proof-full-list-of-ppp-recipients-on-immudb-the-immutable-database"}},[e._v("#")]),e._v(" The tamper-proof full list of PPP recipients on immudb, the immutable database")]),e._v(" "),a("p",[e._v("The intense public debate about the criteria used by the government to identify eligible companies for the Paycheck Protection Program "),a("a",{attrs:{href:"https://www.sba.gov/funding-programs/loans/coronavirus-relief-options/paycheck-protection-program",target:"_blank",rel:"noopener noreferrer"}},[e._v("PPP"),a("OutboundLink")],1),e._v(" and whether the allocated $349 billion for small business (< 500 employees) ended up in the most needing hands, on Monday the U.S. Treasury Department released the full list with the names of those companies who benefited from the program and how much they received.")]),e._v(" "),a("p",[e._v("The PPP is part of the government’s Coronavirus Aid, Relief and Economic Security (CARES) Act. Loans are available for up to 2.5 times the average monthly payroll during the year preceding the application, with a maximum loan of $10 million. If employers maintain their payroll and use loan funds for allowed expenses like payroll, rent, and utilities for the first 24 weeks after the loan is issued, the loan amount is forgiven.")]),e._v(" "),a("p",[e._v("The move from the U.S. Government was highly anticipated, which also gave the opportunity to some of the entitled companies to reassess whether the grant was actually necessary or not. As the Governmental agency released the full list, a number of companies took distance from it, claiming that it had not been updated and contained still names of companies, that while entitled at first decided to not get the grant.")]),e._v(" "),a("p",[e._v("Everyone can access the data directly from the U.S. Government’s website here and download the very large comma-separated value file where he can find the company he’s looking for. Here at vChain, we wanted to make your life simpler and put that list into a searchable db based on our lightweight high-speed immutable database immudb. Thanks to immudb you can, in fact, be sure that the data you see has not been tampered with by anyone. Immudb is used by a number of organizations to track changes to sensitive data in their transactional databases, such as bank, debit, or credit card transactions, and then record those changes permanently in a tamperproof way. That makes immudb the perfect platform to store highly scrutinized data, making sure that no one can manipulate it to his own benefit and then leverage the modified output to spread fake news.")]),e._v(" "),a("p",[e._v("The searchable interface is available "),a("a",{attrs:{href:"https://ppp.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),a("OutboundLink")],1),e._v(". In this dashboard, you can easily query the list and see whether a company has been granted the PPP loan.")])]),e._v(" "),a("i-card",{staticClass:"link-card"},[a("font-awesome-icon",{staticClass:"icon",attrs:{icon:"chevron-right"}}),e._v(" "),a("a",{staticClass:"_overlay-link",attrs:{href:"https://ppp.immudb.io"}},[a("strong",[e._v("U.S. Federal Reserve PPP Searchable Interface")])])],1),e._v(" "),a("p",[e._v("You can download and install immudb from the "),a("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb GitHub Repository"),a("OutboundLink")],1),e._v(", it’s Open-Source.")]),e._v(" "),a("p",[e._v("For those who are wondering it, vChain Inc., the company behind immudb, did not apply nor received any PPP funding.")])],1)}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{435:function(e,t,a){"use strict";a.r(t);var n=a(10),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("div",[a("h1",{attrs:{id:"the-tamper-proof-full-list-of-ppp-recipients-on-immudb-the-immutable-database"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-tamper-proof-full-list-of-ppp-recipients-on-immudb-the-immutable-database"}},[e._v("#")]),e._v(" The tamper-proof full list of PPP recipients on immudb, the immutable database")]),e._v(" "),a("p",[e._v("The intense public debate about the criteria used by the government to identify eligible companies for the Paycheck Protection Program "),a("a",{attrs:{href:"https://www.sba.gov/funding-programs/loans/coronavirus-relief-options/paycheck-protection-program",target:"_blank",rel:"noopener noreferrer"}},[e._v("PPP"),a("OutboundLink")],1),e._v(" and whether the allocated $349 billion for small business (< 500 employees) ended up in the most needing hands, on Monday the U.S. Treasury Department released the full list with the names of those companies who benefited from the program and how much they received.")]),e._v(" "),a("p",[e._v("The PPP is part of the government’s Coronavirus Aid, Relief and Economic Security (CARES) Act. Loans are available for up to 2.5 times the average monthly payroll during the year preceding the application, with a maximum loan of $10 million. If employers maintain their payroll and use loan funds for allowed expenses like payroll, rent, and utilities for the first 24 weeks after the loan is issued, the loan amount is forgiven.")]),e._v(" "),a("p",[e._v("The move from the U.S. Government was highly anticipated, which also gave the opportunity to some of the entitled companies to reassess whether the grant was actually necessary or not. As the Governmental agency released the full list, a number of companies took distance from it, claiming that it had not been updated and contained still names of companies, that while entitled at first decided to not get the grant.")]),e._v(" "),a("p",[e._v("Everyone can access the data directly from the U.S. Government’s website here and download the very large comma-separated value file where he can find the company he’s looking for. Here at vChain, we wanted to make your life simpler and put that list into a searchable db based on our lightweight high-speed immutable database immudb. Thanks to immudb you can, in fact, be sure that the data you see has not been tampered with by anyone. Immudb is used by a number of organizations to track changes to sensitive data in their transactional databases, such as bank, debit, or credit card transactions, and then record those changes permanently in a tamperproof way. That makes immudb the perfect platform to store highly scrutinized data, making sure that no one can manipulate it to his own benefit and then leverage the modified output to spread fake news.")]),e._v(" "),a("p",[e._v("The searchable interface is available "),a("a",{attrs:{href:"https://ppp.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),a("OutboundLink")],1),e._v(". In this dashboard, you can easily query the list and see whether a company has been granted the PPP loan.")])]),e._v(" "),a("i-card",{staticClass:"link-card"},[a("font-awesome-icon",{staticClass:"icon",attrs:{icon:"chevron-right"}}),e._v(" "),a("a",{staticClass:"_overlay-link",attrs:{href:"https://ppp.immudb.io"}},[a("strong",[e._v("U.S. Federal Reserve PPP Searchable Interface")])])],1),e._v(" "),a("p",[e._v("You can download and install immudb from the "),a("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb GitHub Repository"),a("OutboundLink")],1),e._v(", it’s Open-Source.")]),e._v(" "),a("p",[e._v("For those who are wondering it, vChain Inc., the company behind immudb, did not apply nor received any PPP funding.")])],1)}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/2.17fe7e66.js b/docs/assets/js/2.17fe7e66.js deleted file mode 100644 index 7ea901f4a5..0000000000 --- a/docs/assets/js/2.17fe7e66.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{312:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return s})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return u})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return h})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return v}));n(22),n(73),n(173),n(100),n(182),n(48),n(47),n(320),n(69),n(341),n(74);var i=/#.*$/,a=/\.(md|html)$/,r=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(a,"")}function l(t){return s.test(t)}function c(t){return/^mailto:/.test(t)}function u(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;var e=t.match(i),n=e?e[0]:"",a=o(t);return r.test(a)?t:a+".html"+n}function h(t,e){var n=decodeURIComponent(t.hash),a=function(t){var e=t.match(i);if(e)return e[0]}(e);return(!a||n===a)&&o(t.path)===o(e)}function d(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){var i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;var a=e.split("/");n&&a[a.length-1]||a.pop();for(var r=t.replace(/^\//,"").split("/"),s=0;s3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});var r=e.children||[];return 0===r.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,children:r.map((function(e){return t(e,n,i,a+1)})),collapsable:!1!==e.collapsable}}(t,a,c)})):[]}return[]}function m(t){var e;return(t=t.map((function(t){return Object.assign({},t)}))).forEach((function(t){2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)})),t.filter((function(t){return 2===t.level}))}function v(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},313:function(t,e,n){"use strict";n(47),n(69);var i=n(354),a=n.n(i),r=n(312),s={name:"PageEdit",computed:{lastUpdated:function(){return this.$page.lastUpdated},lastUpdatedText:function(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink:function(){var t=a()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,e=this.$site.themeConfig,n=e.repo,i=e.docsDir,r=void 0===i?"":i,s=e.docsBranch,o=void 0===s?"master":s,l=e.docsRepo,c=void 0===l?n:l;return t&&c&&this.$page.relativePath?this.createEditLink(n,c,r,o,this.$page.relativePath):null},editLinkText:function(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink:function(t,e,n,i,a){return/bitbucket.org/.test(t)?(r.i.test(e)?e:t).replace(r.a,"")+"/src"+"/".concat(i,"/")+(n?n.replace(r.a,"")+"/":"")+a+"?mode=edit&spa=0&at=".concat(i,"&fileviewer=file-view-default"):(r.i.test(e)?e:"https://github.com/".concat(e)).replace(r.a,"")+"/edit"+"/".concat(i,"/")+(n?n.replace(r.a,"")+"/":"")+a}}},o=(n(401),n(46)),l=Object(o.a)(s,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("footer",{staticClass:"page-edit"},[t.editLink?n("div",{staticClass:"edit-link"},[n("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),n("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?n("div",{staticClass:"last-updated"},[n("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),n("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null).exports,c=n(402),u=n.n(c),p={name:"PageNav",props:["sidebarItems"],computed:{prev:function(){return d(h.PREV,this)},next:function(){return d(h.NEXT,this)}}};var h={NEXT:{resolveLink:function(t,e){return f(t,e,1)},getThemeLinkConfig:function(t){return t.nextLinks},getPageLinkConfig:function(t){return t.frontmatter.next}},PREV:{resolveLink:function(t,e){return f(t,e,-1)},getThemeLinkConfig:function(t){return t.prevLinks},getPageLinkConfig:function(t){return t.frontmatter.prev}}};function d(t,e){var n=e.$themeConfig,i=e.$page,s=e.$route,o=e.$site,l=e.sidebarItems,c=t.resolveLink,p=t.getThemeLinkConfig,h=t.getPageLinkConfig,d=p(n),f=h(i),m=a()(f)?d:f;return!1===m?void 0:u()(m)?Object(r.k)(o.pages,m,s.path):c(i,l)}function f(t,e,n){var i=[];!function t(e,n){for(var i=0,a=e.length;i',this.initialize(t,e)}}},r=(n(391),n(46)),s=Object(r.a)(a,(function(){var t=this.$createElement,e=this._self._c||t;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])}),[],!1,null,null,null).exports,o=n(414);n(396);function l(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var c={name:"Navbar",components:{SidebarButton:Object(r.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[n("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[n("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports,NavLinks:n(356).a,SearchBox:o.a,AlgoliaSearchBox:s},data:function(){return{linksWrapMaxWidth:null}},computed:{algolia:function(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch:function(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted:function(){var t=this,e=parseInt(l(this.$el,"paddingLeft"))+parseInt(l(this.$el,"paddingRight")),n=function(){document.documentElement.clientWidth<719?t.linksWrapMaxWidth=null:t.linksWrapMaxWidth=t.$el.offsetWidth-e-(t.$refs.siteName&&t.$refs.siteName.offsetWidth||0)};n(),window.addEventListener("resize",n,!1)}},u=(n(400),Object(r.a)(c,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("header",{staticClass:"navbar"},[n("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),n("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?n("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?n("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),n("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?n("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?n("SearchBox"):t._e(),t._v(" "),n("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null));e.a=u.exports},315:function(t,e,n){"use strict";n(176),n(70),n(177);var i=n(319),a=n(317),r=n(362),s=(n(364),n(109),n(65)),o="https://api.codenotary.io/immudb-beta",l=n(365),c=n.n(l),u={components:{VueRecaptcha:n(382).a},props:{value:{type:Boolean,default:!1}},data:function(){return{verified:!1,sending:!1,error:!1,sent:!1,sitekey:"6LeHGL4ZAAAAALlN7PGMzqnNBM6GVwhlJ-ZeiCV8",form:this.$inkline.form({contactEmail:{validators:[{rule:"required"},{rule:"email"}]}})}},methods:{onVisibilityChange:function(t){this.$emit("input",t)},onSubmit:function(){var t=this;return Object(s.a)(regeneratorRuntime.mark((function e(){var n,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.verified){e.next=2;break}return e.abrupt("return");case 2:return t.sending=!0,n=t.form.contactEmail.value,i={email:n},e.prev=5,e.next=8,c.a.post("".concat(o,"/research-paper"),i,{withCredentials:!0});case 8:t.sent=!0,e.next=14;break;case 11:e.prev=11,e.t0=e.catch(5),t.error=!0;case 14:return e.prev=14,t.sending=!1,t.verified=!1,setTimeout((function(){t.sent=!1,t.error=!1,t.$emit("input",!1)}),3e3),e.finish(14);case 19:case"end":return e.stop()}}),e,null,[[5,11,14,19]])})))()},onVerify:function(t){var e=this;return Object(s.a)(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:t&&(e.verified=!0);case 1:case"end":return n.stop()}}),n)})))()}}},p=(n(383),n(46)),h={name:"Home",components:{ResearchPaper:Object(p.a)(u,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("i-modal",{staticClass:"subscribe-modal",attrs:{size:"lg",value:t.value},on:{input:t.onVisibilityChange}},[n("template",{slot:"header"},[t._v("\n Download Research Paper\n ")]),t._v(" "),t.sent?n("i-alert",{staticClass:"_margin-bottom-1",attrs:{variant:"success"}},[n("template",{slot:"icon"},[n("font-awesome-icon",{attrs:{icon:"check-circle"}})],1),t._v(" "),n("p",[t._v("Email sent successfully!")])],2):t._e(),t._v(" "),t.error?n("i-alert",{staticClass:"_margin-bottom-1",attrs:{variant:"danger"}},[n("template",{slot:"icon"},[n("font-awesome-icon",{attrs:{icon:"times-circle"}})],1),t._v(" "),n("p",[t._v("Something went wrong. Please try again later!")])],2):t._e(),t._v(" "),n("p",{staticClass:"_margin-top-0"},[t._v("\n We'll send you the research paper via email.\n ")]),t._v(" "),n("i-form",{on:{submit:function(e){return e.preventDefault(),t.onSubmit(e)}},model:{value:t.form,callback:function(e){t.form=e},expression:"form"}},[n("i-form-group",[n("i-input",{attrs:{schema:t.form.contactEmail,placeholder:"Enter your email"}})],1),t._v(" "),n("i-form-group",[n("vue-recaptcha",{ref:"recaptcha",attrs:{loadRecaptchaScript:!0,sitekey:t.sitekey},on:{verify:t.onVerify}})],1),t._v(" "),n("i-form-group",[n("i-button",{attrs:{type:"submit",variant:"primary",disabled:!t.verified||t.sending,block:""}},[t._v("\n "+t._s(t.sending?"Sending..":"Send me the document")+"\n ")])],1)],1)],2)}),[],!1,null,null,null).exports,NavLink:i.a,GithubButton:r.a,Footer:a.a},data:function(){return{researchPaperModalVisible:!1,beta:Object.keys(this.$route.query).includes("beta")}},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}},mounted:function(){Object.keys(this.$route.query).includes("research-paper")&&(this.researchPaperModalVisible=!0)}},d=(n(384),Object(p.a)(h,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{attrs:{id:"homepage"}},[n("research-paper",{model:{value:t.researchPaperModalVisible,callback:function(e){t.researchPaperModalVisible=e},expression:"researchPaperModalVisible"}}),t._v(" "),n("header",{staticClass:"hero"},[n("div",{staticClass:"hero-content"},[t.data.heroImage?n("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?n("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?n("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?n("p",{staticClass:"action"},[n("i-button",{attrs:{size:"lg",variant:"primary",to:t.data.actionLink}},[t._v(t._s(t.data.actionText))])],1):t._e(),t._v(" "),n("p",{staticClass:"_margin-top-3"},[n("i-button",{attrs:{id:"research-paper-button",link:"",variant:"primary"},on:{click:function(e){t.researchPaperModalVisible=!0}}},[n("i-badge",{staticClass:"_margin-right-1-2",attrs:{size:"sm",variant:"success"}},[t._v("New")]),t._v(" "),n("span",[t._v("Download Research Paper")])],1)],1),t._v(" "),n("div",{attrs:{id:"github-button"}},[n("github-button",{attrs:{href:"https://github.com/codenotary/immudb","data-icon":"octicon-star","data-size":"large","data-show-count":"true","aria-label":"Star codenotary/immudb on GitHub"}},[t._v("\n Star\n ")])],1)])]),t._v(" "),n("Content"),t._v(" "),n("Footer")],1)}),[],!1,null,null,null));e.a=d.exports},317:function(t,e,n){"use strict";n(71);var i={components:{NavLink:n(319).a},data:function(){return{year:(new Date).getFullYear()}}},a=(n(361),n(46)),r=Object(a.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"footer"},[n("i-container",[n("i-row",[n("i-column",[n("span",{staticClass:"copyright"},[t._v("Copyright © vChain "+t._s(t.year))]),t._v(" "),n("i-nav",{staticClass:"list -inline _font-size-sm"},[n("i-nav-item",{attrs:{href:"https://codenotary.io/blog"}},[t._v("Blog")]),t._v(" "),n("i-nav-item",{attrs:{to:"/"}},[t._v("Documentation")]),t._v(" "),n("i-nav-item",{attrs:{href:"https://codenotary.io/careers"}},[t._v("Careers")]),t._v(" "),n("i-nav-item",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank"}},[t._v("GitHub")])],1)],1)],1)],1)],1)}),[],!1,null,null,null);e.a=r.exports},318:function(t,e,n){"use strict";var i=n(355),a=n(356),r={name:"Sidebar",components:{SidebarLinks:i.default,NavLinks:a.a},props:["items"]},s=(n(408),n(46)),o=Object(s.a)(r,(function(){var t=this.$createElement,e=this._self._c||t;return e("aside",{staticClass:"sidebar"},[e("NavLinks"),this._v(" "),this._t("top"),this._v(" "),e("SidebarLinks",{attrs:{depth:0,items:this.items}}),this._v(" "),this._t("bottom")],2)}),[],!1,null,null,null);e.a=o.exports},319:function(t,e,n){"use strict";n(172),n(70),n(358);var i=n(312),a={name:"NavLink",props:{item:{required:!0}},computed:{link:function(){return Object(i.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link},isNonHttpURI:function(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget:function(){return"_blank"===this.target},isInternal:function(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target:function(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel:function(){return this.isNonHttpURI?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":""}},methods:{focusoutAction:function(){this.$emit("focusout")}}},r=n(46),s=Object(r.a)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction(e)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.a=s.exports},321:function(t,e,n){},322:function(t,e,n){},323:function(t,e,n){},325:function(t,e,n){},327:function(t,e,n){},328:function(t,e,n){},329:function(t,e,n){},330:function(t,e,n){},331:function(t,e,n){},332:function(t,e,n){},333:function(t,e,n){},334:function(t,e,n){},335:function(t,e,n){},336:function(t,e,n){},337:function(t,e,n){},355:function(t,e,n){"use strict";n.r(e);n(172);var i=n(312),a={name:"SidebarGroup",components:{DropdownTransition:n(357).a},props:["item","open","collapsable","depth"],beforeCreate:function(){this.$options.components.SidebarLinks=n(355).default},methods:{isActive:i.e}},r=(n(405),n(46)),s=Object(r.a)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;n(406),n(48);function o(t,e,n,i,a){var r={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}};return a>2&&(r.style={"padding-left":a+"rem"}),t("RouterLink",r,n)}function l(t,e,n,a,r){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||s>r?null:t("ul",{class:"sidebar-sub-headers"},e.map((function(e){var c=Object(i.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[o(t,n+"#"+e.slug,e.title,c,e.level-1),l(t,e.children,n,a,r,s+1)])})))}var c={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,a=n.$page,r=(n.$site,n.$route),s=n.$themeConfig,c=n.$themeLocaleConfig,u=e.props,p=u.item,h=u.sidebarDepth,d=Object(i.e)(r,p.path),f="auto"===p.type?d||p.children.some((function(t){return Object(i.e)(r,p.basePath+"#"+t.slug)})):d,m="external"===p.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,p.path,p.title||p.path):o(t,p.path,p.title||p.path,f),v=[a.frontmatter.sidebarDepth,h,c.sidebarDepth,s.sidebarDepth,1].find((function(t){return void 0!==t})),g=c.displayAllHeaders||s.displayAllHeaders;return"auto"===p.type?[m,l(t,p.children,p.basePath,r,v)]:(f||g)&&p.headers&&!i.d.test(p.path)?[m,l(t,Object(i.c)(p.headers),p.path,r,v)]:m}};n(407);function u(t,e){return"group"===e.type&&e.children.some((function(e){return"group"===e.type?u(t,e):"page"===e.type&&Object(i.e)(t,e.path)}))}var p={name:"SidebarLinks",components:{SidebarGroup:s,SidebarLink:Object(r.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth"],data:function(){return{openGroupIndex:0}},watch:{$route:function(){this.refreshIndex()}},created:function(){this.refreshIndex()},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(i.e)(this.$route,t.regularPath)}}},h=Object(r.a)(p,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,i){return n("li",{key:i},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:i===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):n("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=h.exports},356:function(t,e,n){"use strict";n(181),n(48),n(172),n(70),n(353),n(47),n(101),n(320),n(69);var i=n(43),a=n(319),r=n(357),s=n(191),o=n.n(s),l={name:"DropdownLink",components:{NavLink:a.a,DropdownTransition:r.a},props:{item:{required:!0}},data:function(){return{open:!1}},computed:{dropdownAriaLabel:function(){return this.item.ariaLabel||this.item.text}},watch:{$route:function(){this.open=!1}},methods:{setOpen:function(t){this.open=t},isLastItemOfArray:function(t,e){return o()(e)===t}}},c=(n(398),n(46)),u=Object(c.a)(l,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[n("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),n("DropdownTransition",[n("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,i){return n("li",{key:e.link||i,staticClass:"dropdown-item"},["links"===e.type?n("h4",[t._v("\n "+t._s(e.text)+"\n ")]):t._e(),t._v(" "),"links"===e.type?n("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(i){return n("li",{key:i.link,staticClass:"dropdown-subitem"},[n("NavLink",{attrs:{item:i},on:{focusout:function(n){t.isLastItemOfArray(i,e.items)&&t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0):n("NavLink",{attrs:{item:e},on:{focusout:function(n){t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null).exports,p=n(312),h={name:"NavLinks",components:{NavLink:a.a,DropdownLink:u},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var n=this.$page.path,a=this.$router.options.routes,r=this.$site.themeConfig.locales||{},s={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(e).map((function(i){var s,o=e[i],l=r[i]&&r[i].label||o.lang;return o.lang===t.$lang?s=n:(s=n.replace(t.$localeConfig.path,i),a.some((function(t){return t.path===s}))||(s=i)),{text:l,link:s}}))};return[].concat(Object(i.a)(this.userNav),[s])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(p.j)(t),{items:(t.items||[]).map(p.j)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;return t?/^https?:/.test(t)?t:"https://github.com/".concat(t):null},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],n=0;n3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});var r=e.children||[];return 0===r.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,children:r.map((function(e){return t(e,n,i,a+1)})),collapsable:!1!==e.collapsable}}(t,a,c)})):[]}return[]}function m(t){var e;return(t=t.map((function(t){return Object.assign({},t)}))).forEach((function(t){2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)})),t.filter((function(t){return 2===t.level}))}function v(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},324:function(t,e,n){"use strict";n(25),n(31);var i=n(362),a=n.n(i),r=n(323),s={name:"PageEdit",computed:{lastUpdated:function(){return this.$page.lastUpdated},lastUpdatedText:function(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink:function(){var t=a()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,e=this.$site.themeConfig,n=e.repo,i=e.docsDir,r=void 0===i?"":i,s=e.docsBranch,o=void 0===s?"master":s,l=e.docsRepo,c=void 0===l?n:l;return t&&c&&this.$page.relativePath?this.createEditLink(n,c,r,o,this.$page.relativePath):null},editLinkText:function(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink:function(t,e,n,i,a){return/bitbucket.org/.test(t)?(r.i.test(e)?e:t).replace(r.a,"")+"/src"+"/".concat(i,"/")+(n?n.replace(r.a,"")+"/":"")+a+"?mode=edit&spa=0&at=".concat(i,"&fileviewer=file-view-default"):(r.i.test(e)?e:"https://github.com/".concat(e)).replace(r.a,"")+"/edit"+"/".concat(i,"/")+(n?n.replace(r.a,"")+"/":"")+a}}},o=(n(407),n(10)),l=Object(o.a)(s,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("footer",{staticClass:"page-edit"},[t.editLink?n("div",{staticClass:"edit-link"},[n("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),n("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?n("div",{staticClass:"last-updated"},[n("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),n("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null).exports,c=n(408),u=n.n(c),p={name:"PageNav",props:["sidebarItems"],computed:{prev:function(){return d(h.PREV,this)},next:function(){return d(h.NEXT,this)}}};var h={NEXT:{resolveLink:function(t,e){return f(t,e,1)},getThemeLinkConfig:function(t){return t.nextLinks},getPageLinkConfig:function(t){return t.frontmatter.next}},PREV:{resolveLink:function(t,e){return f(t,e,-1)},getThemeLinkConfig:function(t){return t.prevLinks},getPageLinkConfig:function(t){return t.frontmatter.prev}}};function d(t,e){var n=e.$themeConfig,i=e.$page,s=e.$route,o=e.$site,l=e.sidebarItems,c=t.resolveLink,p=t.getThemeLinkConfig,h=t.getPageLinkConfig,d=p(n),f=h(i),m=a()(f)?d:f;return!1===m?void 0:u()(m)?Object(r.k)(o.pages,m,s.path):c(i,l)}function f(t,e,n){var i=[];!function t(e,n){for(var i=0,a=e.length;i',this.initialize(t,e)}}},r=(n(398),n(10)),s=Object(r.a)(a,(function(){var t=this.$createElement,e=this._self._c||t;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])}),[],!1,null,null,null).exports,o=n(420);n(402);function l(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var c={name:"Navbar",components:{SidebarButton:Object(r.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[n("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[n("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports,NavLinks:n(364).a,SearchBox:o.a,AlgoliaSearchBox:s},data:function(){return{linksWrapMaxWidth:null}},computed:{algolia:function(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch:function(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted:function(){var t=this,e=parseInt(l(this.$el,"paddingLeft"))+parseInt(l(this.$el,"paddingRight")),n=function(){document.documentElement.clientWidth<719?t.linksWrapMaxWidth=null:t.linksWrapMaxWidth=t.$el.offsetWidth-e-(t.$refs.siteName&&t.$refs.siteName.offsetWidth||0)};n(),window.addEventListener("resize",n,!1)}},u=(n(406),Object(r.a)(c,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("header",{staticClass:"navbar"},[n("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),n("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?n("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?n("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),n("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?n("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?n("SearchBox"):t._e(),t._v(" "),n("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null));e.a=u.exports},326:function(t,e,n){"use strict";n(183),n(78),n(184);var i=n(330),a=n(328),r=n(370),s=(n(198),n(113),n(75)),o="https://api.codenotary.io/immudb-beta",l=n(372),c=n.n(l),u={components:{VueRecaptcha:n(389).a},props:{value:{type:Boolean,default:!1}},data:function(){return{verified:!1,sending:!1,error:!1,sent:!1,sitekey:"6LeHGL4ZAAAAALlN7PGMzqnNBM6GVwhlJ-ZeiCV8",form:this.$inkline.form({contactEmail:{validators:[{rule:"required"},{rule:"email"}]}})}},methods:{onVisibilityChange:function(t){this.$emit("input",t)},onSubmit:function(){var t=this;return Object(s.a)(regeneratorRuntime.mark((function e(){var n,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.verified){e.next=2;break}return e.abrupt("return");case 2:return t.sending=!0,n=t.form.contactEmail.value,i={email:n},e.prev=5,e.next=8,c.a.post("".concat(o,"/research-paper"),i,{withCredentials:!0});case 8:t.sent=!0,e.next=14;break;case 11:e.prev=11,e.t0=e.catch(5),t.error=!0;case 14:return e.prev=14,t.sending=!1,t.verified=!1,setTimeout((function(){t.sent=!1,t.error=!1,t.$emit("input",!1)}),3e3),e.finish(14);case 19:case"end":return e.stop()}}),e,null,[[5,11,14,19]])})))()},onVerify:function(t){var e=this;return Object(s.a)(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:t&&(e.verified=!0);case 1:case"end":return n.stop()}}),n)})))()}}},p=(n(390),n(10)),h={name:"Home",components:{ResearchPaper:Object(p.a)(u,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("i-modal",{staticClass:"subscribe-modal",attrs:{size:"lg",value:t.value},on:{input:t.onVisibilityChange}},[n("template",{slot:"header"},[t._v("\n Download Research Paper\n ")]),t._v(" "),t.sent?n("i-alert",{staticClass:"_margin-bottom-1",attrs:{variant:"success"}},[n("template",{slot:"icon"},[n("font-awesome-icon",{attrs:{icon:"check-circle"}})],1),t._v(" "),n("p",[t._v("Email sent successfully!")])],2):t._e(),t._v(" "),t.error?n("i-alert",{staticClass:"_margin-bottom-1",attrs:{variant:"danger"}},[n("template",{slot:"icon"},[n("font-awesome-icon",{attrs:{icon:"times-circle"}})],1),t._v(" "),n("p",[t._v("Something went wrong. Please try again later!")])],2):t._e(),t._v(" "),n("p",{staticClass:"_margin-top-0"},[t._v("\n We'll send you the research paper via email.\n ")]),t._v(" "),n("i-form",{on:{submit:function(e){return e.preventDefault(),t.onSubmit(e)}},model:{value:t.form,callback:function(e){t.form=e},expression:"form"}},[n("i-form-group",[n("i-input",{attrs:{schema:t.form.contactEmail,placeholder:"Enter your email"}})],1),t._v(" "),n("i-form-group",[n("vue-recaptcha",{ref:"recaptcha",attrs:{loadRecaptchaScript:!0,sitekey:t.sitekey},on:{verify:t.onVerify}})],1),t._v(" "),n("i-form-group",[n("i-button",{attrs:{type:"submit",variant:"primary",disabled:!t.verified||t.sending,block:""}},[t._v("\n "+t._s(t.sending?"Sending..":"Send me the document")+"\n ")])],1)],1)],2)}),[],!1,null,null,null).exports,NavLink:i.a,GithubButton:r.a,Footer:a.a},data:function(){return{researchPaperModalVisible:!1,beta:Object.keys(this.$route.query).includes("beta")}},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}},mounted:function(){Object.keys(this.$route.query).includes("research-paper")&&(this.researchPaperModalVisible=!0)}},d=(n(391),Object(p.a)(h,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{attrs:{id:"homepage"}},[n("research-paper",{model:{value:t.researchPaperModalVisible,callback:function(e){t.researchPaperModalVisible=e},expression:"researchPaperModalVisible"}}),t._v(" "),n("header",{staticClass:"hero"},[n("div",{staticClass:"hero-content"},[t.data.heroImage?n("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?n("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?n("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?n("p",{staticClass:"action"},[n("i-button",{attrs:{size:"lg",variant:"primary",to:t.data.actionLink}},[t._v(t._s(t.data.actionText))])],1):t._e(),t._v(" "),n("p",{staticClass:"_margin-top-3"},[n("i-button",{attrs:{id:"research-paper-button",link:"",variant:"primary"},on:{click:function(e){t.researchPaperModalVisible=!0}}},[n("i-badge",{staticClass:"_margin-right-1-2",attrs:{size:"sm",variant:"success"}},[t._v("New")]),t._v(" "),n("span",[t._v("Download Research Paper")])],1)],1),t._v(" "),n("div",{attrs:{id:"github-button"}},[n("github-button",{attrs:{href:"https://github.com/codenotary/immudb","data-icon":"octicon-star","data-size":"large","data-show-count":"true","aria-label":"Star codenotary/immudb on GitHub"}},[t._v("\n Star\n ")])],1)])]),t._v(" "),n("Content"),t._v(" "),n("Footer")],1)}),[],!1,null,null,null));e.a=d.exports},328:function(t,e,n){"use strict";n(79);var i={components:{NavLink:n(330).a},data:function(){return{year:(new Date).getFullYear()}}},a=(n(369),n(10)),r=Object(a.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"footer"},[n("i-container",[n("i-row",[n("i-column",[n("span",{staticClass:"copyright"},[t._v("Copyright © vChain "+t._s(t.year))]),t._v(" "),n("i-nav",{staticClass:"list -inline _font-size-sm"},[n("i-nav-item",{attrs:{href:"https://codenotary.io/blog"}},[t._v("Blog")]),t._v(" "),n("i-nav-item",{attrs:{to:"/"}},[t._v("Documentation")]),t._v(" "),n("i-nav-item",{attrs:{href:"https://codenotary.io/careers"}},[t._v("Careers")]),t._v(" "),n("i-nav-item",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank"}},[t._v("GitHub")])],1)],1)],1)],1)],1)}),[],!1,null,null,null);e.a=r.exports},329:function(t,e,n){"use strict";var i=n(363),a=n(364),r={name:"Sidebar",components:{SidebarLinks:i.default,NavLinks:a.a},props:["items"]},s=(n(414),n(10)),o=Object(s.a)(r,(function(){var t=this.$createElement,e=this._self._c||t;return e("aside",{staticClass:"sidebar"},[e("NavLinks"),this._v(" "),this._t("top"),this._v(" "),e("SidebarLinks",{attrs:{depth:0,items:this.items}}),this._v(" "),this._t("bottom")],2)}),[],!1,null,null,null);e.a=o.exports},330:function(t,e,n){"use strict";n(181),n(78),n(366);var i=n(323),a={name:"NavLink",props:{item:{required:!0}},computed:{link:function(){return Object(i.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link},isNonHttpURI:function(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget:function(){return"_blank"===this.target},isInternal:function(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target:function(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel:function(){return this.isNonHttpURI?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":""}},methods:{focusoutAction:function(){this.$emit("focusout")}}},r=n(10),s=Object(r.a)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction(e)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.a=s.exports},332:function(t,e,n){},333:function(t,e,n){},334:function(t,e,n){},335:function(t,e,n){},337:function(t,e,n){},338:function(t,e,n){},339:function(t,e,n){},340:function(t,e,n){},341:function(t,e,n){},342:function(t,e,n){},343:function(t,e,n){},344:function(t,e,n){},345:function(t,e,n){},346:function(t,e,n){},347:function(t,e,n){},363:function(t,e,n){"use strict";n.r(e);n(181);var i=n(323),a={name:"SidebarGroup",components:{DropdownTransition:n(365).a},props:["item","open","collapsable","depth"],beforeCreate:function(){this.$options.components.SidebarLinks=n(363).default},methods:{isActive:i.e}},r=(n(411),n(10)),s=Object(r.a)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;n(412),n(40);function o(t,e,n,i,a){var r={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}};return a>2&&(r.style={"padding-left":a+"rem"}),t("RouterLink",r,n)}function l(t,e,n,a,r){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||s>r?null:t("ul",{class:"sidebar-sub-headers"},e.map((function(e){var c=Object(i.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[o(t,n+"#"+e.slug,e.title,c,e.level-1),l(t,e.children,n,a,r,s+1)])})))}var c={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,a=n.$page,r=(n.$site,n.$route),s=n.$themeConfig,c=n.$themeLocaleConfig,u=e.props,p=u.item,h=u.sidebarDepth,d=Object(i.e)(r,p.path),f="auto"===p.type?d||p.children.some((function(t){return Object(i.e)(r,p.basePath+"#"+t.slug)})):d,m="external"===p.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,p.path,p.title||p.path):o(t,p.path,p.title||p.path,f),v=[a.frontmatter.sidebarDepth,h,c.sidebarDepth,s.sidebarDepth,1].find((function(t){return void 0!==t})),g=c.displayAllHeaders||s.displayAllHeaders;return"auto"===p.type?[m,l(t,p.children,p.basePath,r,v)]:(f||g)&&p.headers&&!i.d.test(p.path)?[m,l(t,Object(i.c)(p.headers),p.path,r,v)]:m}};n(413);function u(t,e){return"group"===e.type&&e.children.some((function(e){return"group"===e.type?u(t,e):"page"===e.type&&Object(i.e)(t,e.path)}))}var p={name:"SidebarLinks",components:{SidebarGroup:s,SidebarLink:Object(r.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth"],data:function(){return{openGroupIndex:0}},watch:{$route:function(){this.refreshIndex()}},created:function(){this.refreshIndex()},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(i.e)(this.$route,t.regularPath)}}},h=Object(r.a)(p,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,i){return n("li",{key:i},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:i===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):n("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=h.exports},364:function(t,e,n){"use strict";n(80),n(40),n(181),n(78),n(361),n(25),n(109),n(331),n(31);var i=n(57),a=n(330),r=n(365),s=n(197),o=n.n(s),l={name:"DropdownLink",components:{NavLink:a.a,DropdownTransition:r.a},props:{item:{required:!0}},data:function(){return{open:!1}},computed:{dropdownAriaLabel:function(){return this.item.ariaLabel||this.item.text}},watch:{$route:function(){this.open=!1}},methods:{setOpen:function(t){this.open=t},isLastItemOfArray:function(t,e){return o()(e)===t}}},c=(n(404),n(10)),u=Object(c.a)(l,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[n("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),n("DropdownTransition",[n("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,i){return n("li",{key:e.link||i,staticClass:"dropdown-item"},["links"===e.type?n("h4",[t._v("\n "+t._s(e.text)+"\n ")]):t._e(),t._v(" "),"links"===e.type?n("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(i){return n("li",{key:i.link,staticClass:"dropdown-subitem"},[n("NavLink",{attrs:{item:i},on:{focusout:function(n){t.isLastItemOfArray(i,e.items)&&t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0):n("NavLink",{attrs:{item:e},on:{focusout:function(n){t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null).exports,p=n(323),h={name:"NavLinks",components:{NavLink:a.a,DropdownLink:u},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var n=this.$page.path,a=this.$router.options.routes,r=this.$site.themeConfig.locales||{},s={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(e).map((function(i){var s,o=e[i],l=r[i]&&r[i].label||o.lang;return o.lang===t.$lang?s=n:(s=n.replace(t.$localeConfig.path,i),a.some((function(t){return t.path===s}))||(s=i)),{text:l,link:s}}))};return[].concat(Object(i.a)(this.userNav),[s])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(p.j)(t),{items:(t.items||[]).map(p.j)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;return t?/^https?:/.test(t)?t:"https://github.com/".concat(t):null},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],n=0;n")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("io.codenotary"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("immudb4j"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("0.1.6"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n")])])]),s("p",[t._v("if using "),s("code",[t._v("Gradle")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-groovy extra-class"},[s("pre",{pre:!0,attrs:{class:"language-groovy"}},[s("code",[t._v(" compile "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'io.codenotary:immudb4j:0.1.6'")]),t._v("\n")])])]),s("p",[t._v("Note: immudb4j is currently hosted in "),s("a",{attrs:{href:"https://docs.github.com/en/packages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Packages"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Thus "),s("code",[t._v("immudb4j Github Package repository")]),t._v(" needs to be included with authentication.\nWhen using maven it means to include immudb4j Github Package in your "),s("code",[t._v("~/.m2/settings.xml")]),t._v('\nfile. See "Configuring Apache Maven for use with GitHub Packages"\nand "Configuring Gradle for use with GitHub Packages" at '),s("a",{attrs:{href:"https://docs.github.com/en/packages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Packages"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"supported-versions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#supported-versions"}},[t._v("#")]),t._v(" Supported Versions")]),t._v(" "),s("p",[t._v("immudb4j supports the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/tag/v0.7.1",target:"_blank",rel:"noopener noreferrer"}},[t._v("latest immudb release"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"quickstart"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quickstart"}},[t._v("#")]),t._v(" Quickstart")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/tree/master/java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Hello Immutable World!"),s("OutboundLink")],1),t._v(" example can be found in "),s("code",[t._v("immudb-client-examples")]),t._v(" repo.")]),t._v(" "),s("p",[t._v("Follow its "),s("code",[t._v("README")]),t._v(" to build and run it.")]),t._v(" "),s("h2",{attrs:{id:"step-by-step-guide"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#step-by-step-guide"}},[t._v("#")]),t._v(" Step by step guide")]),t._v(" "),s("h3",{attrs:{id:"creating-a-client"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-client"}},[t._v("#")]),t._v(" Creating a Client")]),t._v(" "),s("p",[t._v("The following code snippets shows how to create a client.")]),t._v(" "),s("p",[t._v("Using default configuration:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Setting "),s("code",[t._v("immudb")]),t._v(" url and port:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setServerUrl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setServerPort")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Customizing the "),s("code",[t._v("Root Holder")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FileRootHolder")]),t._v(" rootHolder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FileRootHolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRootsFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my_immuapp_roots"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("withRootHolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rootHolder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"user-sessions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#user-sessions"}},[t._v("#")]),t._v(" User sessions")]),t._v(" "),s("p",[t._v("Use "),s("code",[t._v("login")]),t._v(" and "),s("code",[t._v("logout")]),t._v(" methods to initiate and terminate user sessions:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("login")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"usr1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pwd1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with immudb using logged user")]),t._v("\n\n immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("logout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"creating-a-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database"}},[t._v("#")]),t._v(" Creating a database")]),t._v(" "),s("p",[t._v("Creating a new database is quite simple:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"setting-the-active-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-active-database"}},[t._v("#")]),t._v(" Setting the active database")]),t._v(" "),s("p",[t._v("Specify the active database with:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"traditional-read-and-write"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#traditional-read-and-write"}},[t._v("#")]),t._v(" Traditional read and write")]),t._v(" "),s("p",[t._v("immudb provides read and write operations that behave as a traditional\nkey-value store i.e. no cryptographic verification is done. This operations\nmay be used when validations can be post-poned:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"verified-or-safe-read-and-write"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#verified-or-safe-read-and-write"}},[t._v("#")]),t._v(" Verified or Safe read and write")]),t._v(" "),s("p",[t._v("immudb provides built-in cryptographic verification for any entry. The client\nimplements the mathematical validations while the application uses as a traditional\nread or write operation:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("VerificationException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//TODO: tampering detected!")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"closing-the-client"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#closing-the-client"}},[t._v("#")]),t._v(" Closing the client")]),t._v(" "),s("p",[t._v("To programatically close the connection with immudb server use the "),s("code",[t._v("shutdown")]),t._v(" operation:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("shutdown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Note: after shutdown, a new client needs to be created to establish a new connection.")]),t._v(" "),s("p",[t._v("There will be easier options in the future for non developers and also SDK driver for .net, Java, Node.js, Python aso.")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{442:function(t,a,s){"use strict";s.r(a);var e=s(10),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"first-steps-to-use-java-sdk-for-immudb-the-open-source-immutable-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#first-steps-to-use-java-sdk-for-immudb-the-open-source-immutable-database"}},[t._v("#")]),t._v(" First steps to use Java SDK for immudb — the open source immutable database")]),t._v(" "),s("p",[s("strong",[t._v("immudb")]),t._v(" is "),s("strong",[t._v("lightweight, high-speed immutable database")]),t._v(" for systems and applications. immudb is open source under the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("With "),s("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb"),s("OutboundLink")],1),t._v(" you can track changes in sensitive data in your transactional databases and then record those changes indelibly in a tamperproof database.\nimmudb makes sure that not just the latest data, but the complete history of, say, your debit/credit transactions is stored unchangeable.")]),t._v(" "),s("h2",{attrs:{id:"setup-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-immudb"}},[t._v("#")]),t._v(" Setup immudb")]),t._v(" "),s("p",[t._v("If you haven't setup immudb yet, this is the time to do so. You only need to start immudb either as a process, a service or a docker container.")]),t._v(" "),s("p",[t._v("It's up to you if you want to build the Docker images yourself based on the Dockerfiles in the GitHub repository or use the prebuild ones on Dockerhub.")]),t._v(" "),s("p",[t._v("immudb is using the following defaults:")]),t._v(" "),s("ul",[s("li",[t._v("Auth user: immudb")]),t._v(" "),s("li",[t._v("Auth password: immudb")]),t._v(" "),s("li",[t._v("Service Port: 3322 (immudb)")])]),t._v(" "),s("h3",{attrs:{id:"immudb-dockerhub"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immudb-dockerhub"}},[t._v("#")]),t._v(" immudb "),s("strong",[t._v("Dockerhub")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker run -it -d -p "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 — name immudb codenotary/immudb:latest\n")])])]),s("h3",{attrs:{id:"standalone-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#standalone-binaries"}},[t._v("#")]),t._v(" standalone Binaries")]),t._v(" "),s("p",[t._v("Each release provides all binaries for different operating systems. you can find these here: "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb releases"),s("OutboundLink")],1)]),t._v(" "),s("p",[t._v("If you want to build the **binaries **yourself, simply "),s("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("clone this repo"),s("OutboundLink")],1),t._v(" and run one of the following commands based on your operating system.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Linux")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immudb-static\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# macOS")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immudb-static\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Microsoft Windows")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immudb-static\n")])])]),s("p",[t._v("Then you can run immudb")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# run immudb in the foreground ")]),t._v("\n./immudb\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# run immudb in the background ")]),t._v("\n./immudb -d\n")])])]),s("h3",{attrs:{id:"install-immudb-as-a-service"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-immudb-as-a-service"}},[t._v("#")]),t._v(" "),s("strong",[t._v("install immudb as a service")])]),t._v(" "),s("p",[t._v("Please make sure to build or download the immudb and immuadmin component and save them in the same work directory when installing the service.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# install immudb service ")]),t._v("\n./immuadmin "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# check current immudb service status ")]),t._v("\n./immuadmin "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" immudb status\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stop immudb service ")]),t._v("\n./immuadmin "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" immudb stop\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# start immudb service ")]),t._v("\n./immuadmin "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" immudb start\n")])])]),s("h2",{attrs:{id:"where-to-find-the-official-java-sdk-for-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#where-to-find-the-official-java-sdk-for-immudb"}},[t._v("#")]),t._v(" Where to find the official Java SDK for immudb")]),t._v(" "),s("p",[t._v("The always up2date Java SDK for immudb can be find as "),s("a",{attrs:{href:"https://github.com/codenotary/immudb4j",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb4j on Github"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"immudb4j-introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immudb4j-introduction"}},[t._v("#")]),t._v(" immudb4j Introduction")]),t._v(" "),s("p",[t._v("immudb4j implements a "),s("a",{attrs:{href:"https://grpc.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("grpc"),s("OutboundLink")],1),t._v(" immudb client. A minimalist API is exposed for applications while cryptographic\nverifications and state update protocol implementation are fully implemented by this client.\nLatest validated immudb state may be keep in the local filesystem when using default "),s("code",[t._v("FileRootHolder")]),t._v(",\nplease read "),s("a",{attrs:{href:"https://immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb research paper"),s("OutboundLink")],1),t._v(" for details of how immutability is ensured by "),s("a",{attrs:{href:"https://immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),s("p",[t._v("Just include immudb4j as a dependency in your project:")]),t._v(" "),s("p",[t._v("if using "),s("code",[t._v("Maven")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-xml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-xml"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("io.codenotary"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("immudb4j"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("0.1.6"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n")])])]),s("p",[t._v("if using "),s("code",[t._v("Gradle")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-groovy extra-class"},[s("pre",{pre:!0,attrs:{class:"language-groovy"}},[s("code",[t._v(" compile "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'io.codenotary:immudb4j:0.1.6'")]),t._v("\n")])])]),s("p",[t._v("Note: immudb4j is currently hosted in "),s("a",{attrs:{href:"https://docs.github.com/en/packages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Packages"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Thus "),s("code",[t._v("immudb4j Github Package repository")]),t._v(" needs to be included with authentication.\nWhen using maven it means to include immudb4j Github Package in your "),s("code",[t._v("~/.m2/settings.xml")]),t._v('\nfile. See "Configuring Apache Maven for use with GitHub Packages"\nand "Configuring Gradle for use with GitHub Packages" at '),s("a",{attrs:{href:"https://docs.github.com/en/packages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Packages"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"supported-versions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#supported-versions"}},[t._v("#")]),t._v(" Supported Versions")]),t._v(" "),s("p",[t._v("immudb4j supports the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/tag/v0.7.1",target:"_blank",rel:"noopener noreferrer"}},[t._v("latest immudb release"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"quickstart"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quickstart"}},[t._v("#")]),t._v(" Quickstart")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/tree/master/java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Hello Immutable World!"),s("OutboundLink")],1),t._v(" example can be found in "),s("code",[t._v("immudb-client-examples")]),t._v(" repo.")]),t._v(" "),s("p",[t._v("Follow its "),s("code",[t._v("README")]),t._v(" to build and run it.")]),t._v(" "),s("h2",{attrs:{id:"step-by-step-guide"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#step-by-step-guide"}},[t._v("#")]),t._v(" Step by step guide")]),t._v(" "),s("h3",{attrs:{id:"creating-a-client"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-client"}},[t._v("#")]),t._v(" Creating a Client")]),t._v(" "),s("p",[t._v("The following code snippets shows how to create a client.")]),t._v(" "),s("p",[t._v("Using default configuration:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Setting "),s("code",[t._v("immudb")]),t._v(" url and port:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setServerUrl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setServerPort")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Customizing the "),s("code",[t._v("Root Holder")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FileRootHolder")]),t._v(" rootHolder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FileRootHolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRootsFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my_immuapp_roots"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("withRootHolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rootHolder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"user-sessions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#user-sessions"}},[t._v("#")]),t._v(" User sessions")]),t._v(" "),s("p",[t._v("Use "),s("code",[t._v("login")]),t._v(" and "),s("code",[t._v("logout")]),t._v(" methods to initiate and terminate user sessions:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("login")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"usr1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pwd1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with immudb using logged user")]),t._v("\n\n immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("logout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"creating-a-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database"}},[t._v("#")]),t._v(" Creating a database")]),t._v(" "),s("p",[t._v("Creating a new database is quite simple:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"setting-the-active-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-active-database"}},[t._v("#")]),t._v(" Setting the active database")]),t._v(" "),s("p",[t._v("Specify the active database with:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"traditional-read-and-write"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#traditional-read-and-write"}},[t._v("#")]),t._v(" Traditional read and write")]),t._v(" "),s("p",[t._v("immudb provides read and write operations that behave as a traditional\nkey-value store i.e. no cryptographic verification is done. This operations\nmay be used when validations can be post-poned:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"verified-or-safe-read-and-write"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#verified-or-safe-read-and-write"}},[t._v("#")]),t._v(" Verified or Safe read and write")]),t._v(" "),s("p",[t._v("immudb provides built-in cryptographic verification for any entry. The client\nimplements the mathematical validations while the application uses as a traditional\nread or write operation:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("VerificationException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//TODO: tampering detected!")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"closing-the-client"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#closing-the-client"}},[t._v("#")]),t._v(" Closing the client")]),t._v(" "),s("p",[t._v("To programatically close the connection with immudb server use the "),s("code",[t._v("shutdown")]),t._v(" operation:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("shutdown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Note: after shutdown, a new client needs to be created to establish a new connection.")]),t._v(" "),s("p",[t._v("There will be easier options in the future for non developers and also SDK driver for .net, Java, Node.js, Python aso.")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/26.b8df4cd4.js b/docs/assets/js/26.92e520d5.js similarity index 96% rename from docs/assets/js/26.b8df4cd4.js rename to docs/assets/js/26.92e520d5.js index 3e5f3a0ac0..497e7f1a28 100644 --- a/docs/assets/js/26.b8df4cd4.js +++ b/docs/assets/js/26.92e520d5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{437:function(e,t,r){"use strict";r.r(t);var a=r(46),n=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"apis-and-interfaces"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#apis-and-interfaces"}},[e._v("#")]),e._v(" APIs and interfaces")]),e._v(" "),r("h2",{attrs:{id:"examples"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[e._v("#")]),e._v(" Examples")]),e._v(" "),r("ul",[r("li",[r("RouterLink",{attrs:{to:"/immudb/golang.html"}},[e._v("Golang code snippets")])],1),e._v(" "),r("li",[r("RouterLink",{attrs:{to:"/immugw/curl.html"}},[e._v("Curl code snippets")])],1)]),e._v(" "),r("h2",{attrs:{id:"sdk-for-immudb"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#sdk-for-immudb"}},[e._v("#")]),e._v(" SDK for immudb")]),e._v(" "),r("p",[e._v("SDKs for Java, Golang, .net, Python and Node are fully compatible with latest immudb release v0.8.0:")]),e._v(" "),r("ol",[r("li",[e._v("immudb4j "),r("a",{attrs:{href:"https://github.com/codenotary/immudb4j",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb4j"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Golang "),r("a",{attrs:{href:"https://docs.immudb.io/immudb/golang.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb-go"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v(".net "),r("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb4dotnet"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Python "),r("a",{attrs:{href:"https://github.com/codenotary/immudb-py",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb-py"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Node.js "),r("a",{attrs:{href:"https://github.com/codenotary/immudb-node",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb-node"),r("OutboundLink")],1)])]),e._v(" "),r("h2",{attrs:{id:"immudb-grpc-api-reference"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immudb-grpc-api-reference"}},[e._v("#")]),e._v(" immudb gRPC API reference")]),e._v(" "),r("p",[e._v("Here the gRPC documentation that shows available endpoints with protobuffer protocol")]),e._v(" "),r("p",[r("RouterLink",{attrs:{to:"/immudb/grpc-interface.html"}},[e._v("immudb gRPC")])],1),e._v(" "),r("h2",{attrs:{id:"immugw-restful-api-reference"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immugw-restful-api-reference"}},[e._v("#")]),e._v(" immugw RESTful API reference")]),e._v(" "),r("p",[e._v("immugw can be found in a different "),r("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),r("OutboundLink")],1)]),e._v(" "),r("p",[e._v("You can find the swagger schema here:")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/pkg/api/gw.schema.swagger.json",target:"_blank",rel:"noopener noreferrer"}},[e._v("swagger immugw"),r("OutboundLink")],1)]),e._v(" "),r("p",[e._v("If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:")]),e._v(" "),r("div",{staticClass:"language-bash extra-class"},[r("pre",{pre:!0,attrs:{class:"language-bash"}},[r("code",[e._v("docker run -d -it -p "),r("span",{pre:!0,attrs:{class:"token number"}},[e._v("8081")]),e._v(":8080 --name swagger-immugw -v "),r("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${"),r("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("PWD")]),e._v("}")]),e._v("/pkg/api/gw.schema.swagger.json:/openapi.json -e "),r("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SWAGGER_JSON")]),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/openapi.json swaggerapi/swagger-ui\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{443:function(e,t,r){"use strict";r.r(t);var a=r(10),n=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"apis-and-interfaces"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#apis-and-interfaces"}},[e._v("#")]),e._v(" APIs and interfaces")]),e._v(" "),r("h2",{attrs:{id:"examples"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[e._v("#")]),e._v(" Examples")]),e._v(" "),r("ul",[r("li",[r("RouterLink",{attrs:{to:"/immudb/golang.html"}},[e._v("Golang code snippets")])],1),e._v(" "),r("li",[r("RouterLink",{attrs:{to:"/immugw/curl.html"}},[e._v("Curl code snippets")])],1)]),e._v(" "),r("h2",{attrs:{id:"sdk-for-immudb"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#sdk-for-immudb"}},[e._v("#")]),e._v(" SDK for immudb")]),e._v(" "),r("p",[e._v("SDKs for Java, Golang, .net, Python and Node are fully compatible with latest immudb release v0.8.0:")]),e._v(" "),r("ol",[r("li",[e._v("immudb4j "),r("a",{attrs:{href:"https://github.com/codenotary/immudb4j",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb4j"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Golang "),r("a",{attrs:{href:"https://docs.immudb.io/immudb/golang.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb-go"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v(".net "),r("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb4dotnet"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Python "),r("a",{attrs:{href:"https://github.com/codenotary/immudb-py",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb-py"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Node.js "),r("a",{attrs:{href:"https://github.com/codenotary/immudb-node",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb-node"),r("OutboundLink")],1)])]),e._v(" "),r("h2",{attrs:{id:"immudb-grpc-api-reference"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immudb-grpc-api-reference"}},[e._v("#")]),e._v(" immudb gRPC API reference")]),e._v(" "),r("p",[e._v("Here the gRPC documentation that shows available endpoints with protobuffer protocol")]),e._v(" "),r("p",[r("RouterLink",{attrs:{to:"/immudb/grpc-interface.html"}},[e._v("immudb gRPC")])],1),e._v(" "),r("h2",{attrs:{id:"immugw-restful-api-reference"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#immugw-restful-api-reference"}},[e._v("#")]),e._v(" immugw RESTful API reference")]),e._v(" "),r("p",[e._v("immugw can be found in a different "),r("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),r("OutboundLink")],1)]),e._v(" "),r("p",[e._v("You can find the swagger schema here:")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/pkg/api/gw.schema.swagger.json",target:"_blank",rel:"noopener noreferrer"}},[e._v("swagger immugw"),r("OutboundLink")],1)]),e._v(" "),r("p",[e._v("If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:")]),e._v(" "),r("div",{staticClass:"language-bash extra-class"},[r("pre",{pre:!0,attrs:{class:"language-bash"}},[r("code",[e._v("docker run -d -it -p "),r("span",{pre:!0,attrs:{class:"token number"}},[e._v("8081")]),e._v(":8080 --name swagger-immugw -v "),r("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${"),r("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("PWD")]),e._v("}")]),e._v("/pkg/api/gw.schema.swagger.json:/openapi.json -e "),r("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SWAGGER_JSON")]),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/openapi.json swaggerapi/swagger-ui\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/27.32ec064d.js b/docs/assets/js/27.32ec064d.js new file mode 100644 index 0000000000..3353e0e1e4 --- /dev/null +++ b/docs/assets/js/27.32ec064d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{444:function(e,r,a){"use strict";a.r(r);var t=a(10),s=Object(t.a)({},(function(){var e=this,r=e.$createElement,a=e._self._c||r;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"apis-reference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#apis-reference"}},[e._v("#")]),e._v(" APIs reference")]),e._v(" "),a("h2",{attrs:{id:"immudb-grpc-api-reference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immudb-grpc-api-reference"}},[e._v("#")]),e._v(" immudb gRPC API reference")]),e._v(" "),a("p",[e._v("Here the gRPC documentation that shows available endpoints with protobuffer protocol")]),e._v(" "),a("p",[a("RouterLink",{attrs:{to:"/immudb/grpc-interface.html"}},[e._v("immudb gRPC")])],1),e._v(" "),a("h2",{attrs:{id:"immugw-restful-api-reference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immugw-restful-api-reference"}},[e._v("#")]),e._v(" immugw RESTful API reference")]),e._v(" "),a("p",[e._v("immugw can be found in a different "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),a("OutboundLink")],1)]),e._v(" "),a("p",[e._v("You can find the swagger schema here:")]),e._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/pkg/api/gw.schema.swagger.json",target:"_blank",rel:"noopener noreferrer"}},[e._v("swagger immugw"),a("OutboundLink")],1)]),e._v(" "),a("p",[e._v("If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("docker run -d -it -p "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("8081")]),e._v(":8080 --name swagger-immugw -v "),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${"),a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("PWD")]),e._v("}")]),e._v("/pkg/api/gw.schema.swagger.json:/openapi.json -e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SWAGGER_JSON")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/openapi.json swaggerapi/swagger-ui\n")])])]),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[e._v("#")]),e._v(" Examples")]),e._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/immugw/curl.html"}},[e._v("Curl code snippets")])],1)])])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/27.f4ce3ddd.js b/docs/assets/js/28.8266e3c2.js similarity index 97% rename from docs/assets/js/27.f4ce3ddd.js rename to docs/assets/js/28.8266e3c2.js index 94c124501b..b111c5a2ef 100644 --- a/docs/assets/js/27.f4ce3ddd.js +++ b/docs/assets/js/28.8266e3c2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{438:function(e,t,o){"use strict";o.r(t);var r=o(46),n=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"careers"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#careers"}},[e._v("#")]),e._v(" Careers")]),e._v(" "),o("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as immudb and CodeNotary.\nWe process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),o("p",[e._v("We use the following environments and systems:")]),e._v(" "),o("ul",[o("li",[e._v("Go")]),e._v(" "),o("li",[e._v("JavaScript")]),e._v(" "),o("li",[e._v("Vue")]),e._v(" "),o("li",[e._v("Nodejs")]),e._v(" "),o("li",[e._v("Java")]),e._v(" "),o("li",[e._v("Linux, and low-level operating system technologies, as well as complex cloud infrastructure.")])]),e._v(" "),o("p",[e._v("Our Values")]),e._v(" "),o("ul",[o("li",[o("strong",[e._v("Excellence")]),e._v(" – Ensure what we do, we do amazingly")]),e._v(" "),o("li",[o("strong",[e._v("Intellectual")]),e._v(" Honesty – Be sincere towards yourself and the team")]),e._v(" "),o("li",[o("strong",[e._v("Speed")]),e._v(" – Be proactive and get things done in a flash")])]),e._v(" "),o("h2",{attrs:{id:"open-positions"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#open-positions"}},[e._v("#")]),e._v(" Open positions")]),e._v(" "),o("p",[e._v("We're hiring! Check out our open positions:")]),e._v(" "),o("div",{staticClass:"jobs"},[o("ul",[o("li",[o("RouterLink",{attrs:{to:"/careers/job-descriptions/software-development-team-lead.html"}},[e._v("Software Development Team Lead")])],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/careers/job-descriptions/senior-software-engineer-go.html"}},[e._v("Senior Go Engineer")])],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/careers/job-descriptions/qa-automation-engineer.html"}},[e._v("QA Automation Engineer")])],1)])]),e._v(" "),o("p",[e._v("Apply by following the directions in the job description.")]),e._v(" "),o("p",[e._v("If you're interested in vChain but aren't yet ready to apply, we are still happy to connect and answer any questions that you might have: "),o("a",{attrs:{href:"https://twitter.com/codenotary",target:"_blank",rel:"noopener noreferrer"}},[e._v("DM us on Twitter"),o("OutboundLink")],1),e._v(" or email "),o("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")]),e._v(".")]),e._v(" "),o("h2",{attrs:{id:"our-team"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#our-team"}},[e._v("#")]),e._v(" Our team")]),e._v(" "),o("p",[e._v("Our team consists of talented, collaborative,experienced, driven individuals who are attracted to develop something disruptive. We work in an open environment that treats people in a first-class manner and provides them with ownership, responsibility, and autonomy.")]),e._v(" "),o("h2",{attrs:{id:"our-work"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#our-work"}},[e._v("#")]),e._v(" Our work")]),e._v(" "),o("p",[e._v("Most of our work, including our main product, is open source, i. e. "),o("a",{attrs:{href:"https://github.com/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),o("OutboundLink")],1),e._v("! You can check out our code to see the kinds of problems that we work on, file an issue if you run into any problems, or even submit a PR if you want to help make our projects better.")]),e._v(" "),o("h2",{attrs:{id:"benefits"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#benefits"}},[e._v("#")]),e._v(" Benefits")]),e._v(" "),o("br"),e._v(" "),o("ul",[o("li",[e._v("Full-time position")]),e._v(" "),o("li",[e._v("Competitive compensation package with a stock option plan")]),e._v(" "),o("li",[e._v("Flexible hours")]),e._v(" "),o("li",[e._v("Flexible location (EU or North American time zone preferred)")]),e._v(" "),o("li",[e._v("Work from home")]),e._v(" "),o("li",[e._v("Motivated, highly engaged team that’s supportive and open to constructive feedback")]),e._v(" "),o("li",[e._v("The feeling of making an impact on the community as you help building Open Source tools for people like us")]),e._v(" "),o("li",[e._v("Fun and fast-paced environment")]),e._v(" "),o("li",[e._v("Opportunity to grow in multiple dimensions")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{445:function(e,t,o){"use strict";o.r(t);var r=o(10),n=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"careers"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#careers"}},[e._v("#")]),e._v(" Careers")]),e._v(" "),o("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as immudb and CodeNotary.\nWe process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),o("p",[e._v("We use the following environments and systems:")]),e._v(" "),o("ul",[o("li",[e._v("Go")]),e._v(" "),o("li",[e._v("JavaScript")]),e._v(" "),o("li",[e._v("Vue")]),e._v(" "),o("li",[e._v("Nodejs")]),e._v(" "),o("li",[e._v("Java")]),e._v(" "),o("li",[e._v("Linux, and low-level operating system technologies, as well as complex cloud infrastructure.")])]),e._v(" "),o("p",[e._v("Our Values")]),e._v(" "),o("ul",[o("li",[o("strong",[e._v("Excellence")]),e._v(" – Ensure what we do, we do amazingly")]),e._v(" "),o("li",[o("strong",[e._v("Intellectual")]),e._v(" Honesty – Be sincere towards yourself and the team")]),e._v(" "),o("li",[o("strong",[e._v("Speed")]),e._v(" – Be proactive and get things done in a flash")])]),e._v(" "),o("h2",{attrs:{id:"open-positions"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#open-positions"}},[e._v("#")]),e._v(" Open positions")]),e._v(" "),o("p",[e._v("We're hiring! Check out our open positions:")]),e._v(" "),o("div",{staticClass:"jobs"},[o("ul",[o("li",[o("RouterLink",{attrs:{to:"/careers/job-descriptions/software-development-team-lead.html"}},[e._v("Software Development Team Lead")])],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/careers/job-descriptions/senior-software-engineer-go.html"}},[e._v("Senior Go Engineer")])],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/careers/job-descriptions/qa-automation-engineer.html"}},[e._v("QA Automation Engineer")])],1)])]),e._v(" "),o("p",[e._v("Apply by following the directions in the job description.")]),e._v(" "),o("p",[e._v("If you're interested in vChain but aren't yet ready to apply, we are still happy to connect and answer any questions that you might have: "),o("a",{attrs:{href:"https://twitter.com/codenotary",target:"_blank",rel:"noopener noreferrer"}},[e._v("DM us on Twitter"),o("OutboundLink")],1),e._v(" or email "),o("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")]),e._v(".")]),e._v(" "),o("h2",{attrs:{id:"our-team"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#our-team"}},[e._v("#")]),e._v(" Our team")]),e._v(" "),o("p",[e._v("Our team consists of talented, collaborative,experienced, driven individuals who are attracted to develop something disruptive. We work in an open environment that treats people in a first-class manner and provides them with ownership, responsibility, and autonomy.")]),e._v(" "),o("h2",{attrs:{id:"our-work"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#our-work"}},[e._v("#")]),e._v(" Our work")]),e._v(" "),o("p",[e._v("Most of our work, including our main product, is open source, i. e. "),o("a",{attrs:{href:"https://github.com/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),o("OutboundLink")],1),e._v("! You can check out our code to see the kinds of problems that we work on, file an issue if you run into any problems, or even submit a PR if you want to help make our projects better.")]),e._v(" "),o("h2",{attrs:{id:"benefits"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#benefits"}},[e._v("#")]),e._v(" Benefits")]),e._v(" "),o("br"),e._v(" "),o("ul",[o("li",[e._v("Full-time position")]),e._v(" "),o("li",[e._v("Competitive compensation package with a stock option plan")]),e._v(" "),o("li",[e._v("Flexible hours")]),e._v(" "),o("li",[e._v("Flexible location (EU or North American time zone preferred)")]),e._v(" "),o("li",[e._v("Work from home")]),e._v(" "),o("li",[e._v("Motivated, highly engaged team that’s supportive and open to constructive feedback")]),e._v(" "),o("li",[e._v("The feeling of making an impact on the community as you help building Open Source tools for people like us")]),e._v(" "),o("li",[e._v("Fun and fast-paced environment")]),e._v(" "),o("li",[e._v("Opportunity to grow in multiple dimensions")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/28.33452396.js b/docs/assets/js/29.30bd365a.js similarity index 95% rename from docs/assets/js/28.33452396.js rename to docs/assets/js/29.30bd365a.js index 8b74136487..583a4d4d5a 100644 --- a/docs/assets/js/28.33452396.js +++ b/docs/assets/js/29.30bd365a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{439:function(e,t,n){"use strict";n.r(t);var a=n(46),i=Object(a.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"qa-automation-engineer"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#qa-automation-engineer"}},[e._v("#")]),e._v(" QA Automation Engineer")]),e._v(" "),n("p",[n("em",[n("strong",[e._v("LOCATION: REMOTE")])])]),e._v(" "),n("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as "),n("a",{attrs:{href:"http://www.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),n("OutboundLink")],1),e._v(" and "),n("a",{attrs:{href:"http://www.codenotary.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CodeNotary"),n("OutboundLink")],1),e._v(". We process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),n("p",[e._v("We are looking for a smart, hard-working, and experienced engineer to join vChain and to help us deliver high quality products and take our infrastructure to the next level. You should be able to thrive in a fast-paced environment, and have a good eye for detail and passion for improving the end user experience as your input has a crucial impact on the final product design. We are offering a competitive salary as well as a stock option plan.")]),e._v(" "),n("p",[n("em",[n("strong",[e._v("Qualifications")])])]),e._v(" "),n("ul",[n("li",[e._v("Good knowledge of English (spoken/written)")]),e._v(" "),n("li",[e._v("5+ years of experience in testing Enterprise software products and in particular web applications")]),e._v(" "),n("li",[e._v("Experience in test strategy, test planning, test cases creation, execution and defect reporting")]),e._v(" "),n("li",[e._v("Ability to perform various types of testing – feature, integration, Install-upgrade, regression, database etc.")]),e._v(" "),n("li",[e._v("Good knowledge of Relational Databases / SQL")]),e._v(" "),n("li",[e._v("Good knowledge of Unix/Linux OS")]),e._v(" "),n("li",[e._v("Experience with test automation scripting frameworks (Junit, Robot, Selenium, Sikuli or others)")]),e._v(" "),n("li",[e._v("Experience in Python and Linux/Unix shell scripting")]),e._v(" "),n("li",[e._v("Experience with DevOps tools such as Jenkins, Kubernetes, Docker, etc.")]),e._v(" "),n("li",[e._v("Good team player and communication skills")])]),e._v(" "),n("p",[e._v("Curious?\nApply at "),n("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")])]),e._v(" "),n("p",[e._v("Visit our website!")]),e._v(" "),n("p",[n("a",{attrs:{href:"http://www.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e._v("www.vchain.us"),n("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{446:function(e,t,n){"use strict";n.r(t);var a=n(10),i=Object(a.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"qa-automation-engineer"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#qa-automation-engineer"}},[e._v("#")]),e._v(" QA Automation Engineer")]),e._v(" "),n("p",[n("em",[n("strong",[e._v("LOCATION: REMOTE")])])]),e._v(" "),n("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as "),n("a",{attrs:{href:"http://www.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),n("OutboundLink")],1),e._v(" and "),n("a",{attrs:{href:"http://www.codenotary.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CodeNotary"),n("OutboundLink")],1),e._v(". We process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),n("p",[e._v("We are looking for a smart, hard-working, and experienced engineer to join vChain and to help us deliver high quality products and take our infrastructure to the next level. You should be able to thrive in a fast-paced environment, and have a good eye for detail and passion for improving the end user experience as your input has a crucial impact on the final product design. We are offering a competitive salary as well as a stock option plan.")]),e._v(" "),n("p",[n("em",[n("strong",[e._v("Qualifications")])])]),e._v(" "),n("ul",[n("li",[e._v("Good knowledge of English (spoken/written)")]),e._v(" "),n("li",[e._v("5+ years of experience in testing Enterprise software products and in particular web applications")]),e._v(" "),n("li",[e._v("Experience in test strategy, test planning, test cases creation, execution and defect reporting")]),e._v(" "),n("li",[e._v("Ability to perform various types of testing – feature, integration, Install-upgrade, regression, database etc.")]),e._v(" "),n("li",[e._v("Good knowledge of Relational Databases / SQL")]),e._v(" "),n("li",[e._v("Good knowledge of Unix/Linux OS")]),e._v(" "),n("li",[e._v("Experience with test automation scripting frameworks (Junit, Robot, Selenium, Sikuli or others)")]),e._v(" "),n("li",[e._v("Experience in Python and Linux/Unix shell scripting")]),e._v(" "),n("li",[e._v("Experience with DevOps tools such as Jenkins, Kubernetes, Docker, etc.")]),e._v(" "),n("li",[e._v("Good team player and communication skills")])]),e._v(" "),n("p",[e._v("Curious?\nApply at "),n("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")])]),e._v(" "),n("p",[e._v("Visit our website!")]),e._v(" "),n("p",[n("a",{attrs:{href:"http://www.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e._v("www.vchain.us"),n("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/29.eee3ef54.js b/docs/assets/js/30.11979980.js similarity index 95% rename from docs/assets/js/29.eee3ef54.js rename to docs/assets/js/30.11979980.js index c1eeffea68..a45fdee8fb 100644 --- a/docs/assets/js/29.eee3ef54.js +++ b/docs/assets/js/30.11979980.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{440:function(e,t,r){"use strict";r.r(t);var n=r(46),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"senior-golang-developer"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#senior-golang-developer"}},[e._v("#")]),e._v(" Senior Golang Developer")]),e._v(" "),r("p",[r("em",[r("strong",[e._v("LOCATION: REMOTE (within Europe)")])])]),e._v(" "),r("p",[e._v("If you love databases, distributed systems,")]),e._v(" "),r("p",[e._v("and Go this might be a great match.")]),e._v(" "),r("p",[e._v("We are looking for smart, dedicated and experienced Back-End engineers to join vChain and help us build an Open Source immutable Database ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://github.com/codenotary/immudb"),r("OutboundLink")],1),e._v("). Most of the code is written in Go, so if you write exemplary code and know Golang inside out, you'll feel like home. That said, you will be surrounded by experienced gophers that are keen to work with you.")]),e._v(" "),r("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as "),r("a",{attrs:{href:"http://www.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"http://www.codenotary.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CodeNotary"),r("OutboundLink")],1),e._v(". We process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),r("p",[r("em",[r("strong",[e._v("Qualifications")])])]),e._v(" "),r("ul",[r("li",[e._v("Master's degree in Computer Science or EE")]),e._v(" "),r("li",[e._v("7+ years of professional experience in developing at a startup")]),e._v(" "),r("li",[e._v("Expert level programming skills in Golang (5+ years daily coding experience)")]),e._v(" "),r("li",[e._v("Experience in developing databases or key-value Stores (e. g. Reddis, MongoDB, Dgraph)")]),e._v(" "),r("li",[e._v("Experience developing API driven architectures (e.g. REST, gRPC)")]),e._v(" "),r("li",[e._v("Great team skills")])]),e._v(" "),r("p",[e._v("Curious?\nApply at "),r("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")])]),e._v(" "),r("p",[e._v("Visit our website!")]),e._v(" "),r("p",[r("a",{attrs:{href:"http://www.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e._v("www.vchain.us"),r("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{447:function(e,t,r){"use strict";r.r(t);var n=r(10),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"senior-golang-developer"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#senior-golang-developer"}},[e._v("#")]),e._v(" Senior Golang Developer")]),e._v(" "),r("p",[r("em",[r("strong",[e._v("LOCATION: REMOTE (within Europe)")])])]),e._v(" "),r("p",[e._v("If you love databases, distributed systems,")]),e._v(" "),r("p",[e._v("and Go this might be a great match.")]),e._v(" "),r("p",[e._v("We are looking for smart, dedicated and experienced Back-End engineers to join vChain and help us build an Open Source immutable Database ("),r("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://github.com/codenotary/immudb"),r("OutboundLink")],1),e._v("). Most of the code is written in Go, so if you write exemplary code and know Golang inside out, you'll feel like home. That said, you will be surrounded by experienced gophers that are keen to work with you.")]),e._v(" "),r("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as "),r("a",{attrs:{href:"http://www.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"http://www.codenotary.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CodeNotary"),r("OutboundLink")],1),e._v(". We process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),r("p",[r("em",[r("strong",[e._v("Qualifications")])])]),e._v(" "),r("ul",[r("li",[e._v("Master's degree in Computer Science or EE")]),e._v(" "),r("li",[e._v("7+ years of professional experience in developing at a startup")]),e._v(" "),r("li",[e._v("Expert level programming skills in Golang (5+ years daily coding experience)")]),e._v(" "),r("li",[e._v("Experience in developing databases or key-value Stores (e. g. Reddis, MongoDB, Dgraph)")]),e._v(" "),r("li",[e._v("Experience developing API driven architectures (e.g. REST, gRPC)")]),e._v(" "),r("li",[e._v("Great team skills")])]),e._v(" "),r("p",[e._v("Curious?\nApply at "),r("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")])]),e._v(" "),r("p",[e._v("Visit our website!")]),e._v(" "),r("p",[r("a",{attrs:{href:"http://www.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e._v("www.vchain.us"),r("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/30.87eb5f3b.js b/docs/assets/js/31.d37ed4c2.js similarity index 96% rename from docs/assets/js/30.87eb5f3b.js rename to docs/assets/js/31.d37ed4c2.js index 880fb80fee..9fe433f70c 100644 --- a/docs/assets/js/30.87eb5f3b.js +++ b/docs/assets/js/31.d37ed4c2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{441:function(e,t,n){"use strict";n.r(t);var a=n(46),o=Object(a.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"software-development-team-lead"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#software-development-team-lead"}},[e._v("#")]),e._v(" Software Development Team Lead")]),e._v(" "),n("p",[n("strong",[e._v("LOCATION: REMOTE (within Europe)")])]),e._v(" "),n("p",[e._v("We are looking for a Software Development Team Lead as part of an agile development team, building and working on our Open Source trust solutions: "),n("a",{attrs:{href:"http://www.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),n("OutboundLink")],1),e._v(" and "),n("a",{attrs:{href:"http://www.codenotary.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CodeNotary"),n("OutboundLink")],1),e._v(".")]),e._v(" "),n("p",[e._v("The Software Development Team Lead will provide technical and team leadership through coaching and mentorship to a highly motivated team of distributed engineers working across a variety of systems, locations, and cultures. You will be responsible for delivering solutions successfully on-time and on-budget, adhering to high-quality development principles, and facilitating growth and improvement within the team.")]),e._v(" "),n("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as immudb and CodeNotary. We process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),n("p",[e._v("We use the following environments and systems: JavaScript, Vue, Nodejs and Go, Java, Linux, and low-level operating system technologies, as well as complex cloud infrastructure.")]),e._v(" "),n("p",[n("strong",[e._v("Our Values")])]),e._v(" "),n("ul",[n("li",[n("p",[n("strong",[e._v("Excellence")]),e._v(" – Ensure what we do, we do amazingly")])]),e._v(" "),n("li",[n("p",[n("strong",[e._v("Intellectual Honesty")]),e._v(" – Be sincere towards yourself and the team")])]),e._v(" "),n("li",[n("p",[n("strong",[e._v("Speed")]),e._v(" – Be proactive and get things done in a flash")])])]),e._v(" "),n("p",[n("em",[n("strong",[e._v("Qualifications")])])]),e._v(" "),n("ul",[n("li",[e._v("You have 7+ years' experience as a Software Developer in Java and/or C/C++")]),e._v(" "),n("li",[e._v("You have outstanding knowledge of Linux and container solutions")]),e._v(" "),n("li",[e._v("You have excellence knowledge of cloud orchestration systems and solutions")]),e._v(" "),n("li",[e._v("You have prior experience in a technical leadership position")]),e._v(" "),n("li",[e._v("You have a college or university degree in Computer Science or related discipline")])]),e._v(" "),n("p",[e._v("Please note that the technical knowledge will be tested in an interview.")]),e._v(" "),n("p",[e._v("Curious?\nApply at "),n("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")])]),e._v(" "),n("p",[e._v("Visit our website!")]),e._v(" "),n("p",[n("a",{attrs:{href:"http://www.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e._v("www.vchain.us"),n("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{448:function(e,t,n){"use strict";n.r(t);var a=n(10),o=Object(a.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"software-development-team-lead"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#software-development-team-lead"}},[e._v("#")]),e._v(" Software Development Team Lead")]),e._v(" "),n("p",[n("strong",[e._v("LOCATION: REMOTE (within Europe)")])]),e._v(" "),n("p",[e._v("We are looking for a Software Development Team Lead as part of an agile development team, building and working on our Open Source trust solutions: "),n("a",{attrs:{href:"http://www.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("immudb"),n("OutboundLink")],1),e._v(" and "),n("a",{attrs:{href:"http://www.codenotary.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CodeNotary"),n("OutboundLink")],1),e._v(".")]),e._v(" "),n("p",[e._v("The Software Development Team Lead will provide technical and team leadership through coaching and mentorship to a highly motivated team of distributed engineers working across a variety of systems, locations, and cultures. You will be responsible for delivering solutions successfully on-time and on-budget, adhering to high-quality development principles, and facilitating growth and improvement within the team.")]),e._v(" "),n("p",[e._v("vChain is the Open Source leader for immutable trust solutions such as immudb and CodeNotary. We process tens of millions of transactions every month and are growing fast to new markets and use cases.")]),e._v(" "),n("p",[e._v("We use the following environments and systems: JavaScript, Vue, Nodejs and Go, Java, Linux, and low-level operating system technologies, as well as complex cloud infrastructure.")]),e._v(" "),n("p",[n("strong",[e._v("Our Values")])]),e._v(" "),n("ul",[n("li",[n("p",[n("strong",[e._v("Excellence")]),e._v(" – Ensure what we do, we do amazingly")])]),e._v(" "),n("li",[n("p",[n("strong",[e._v("Intellectual Honesty")]),e._v(" – Be sincere towards yourself and the team")])]),e._v(" "),n("li",[n("p",[n("strong",[e._v("Speed")]),e._v(" – Be proactive and get things done in a flash")])])]),e._v(" "),n("p",[n("em",[n("strong",[e._v("Qualifications")])])]),e._v(" "),n("ul",[n("li",[e._v("You have 7+ years' experience as a Software Developer in Java and/or C/C++")]),e._v(" "),n("li",[e._v("You have outstanding knowledge of Linux and container solutions")]),e._v(" "),n("li",[e._v("You have excellence knowledge of cloud orchestration systems and solutions")]),e._v(" "),n("li",[e._v("You have prior experience in a technical leadership position")]),e._v(" "),n("li",[e._v("You have a college or university degree in Computer Science or related discipline")])]),e._v(" "),n("p",[e._v("Please note that the technical knowledge will be tested in an interview.")]),e._v(" "),n("p",[e._v("Curious?\nApply at "),n("a",{attrs:{href:"mailto:amelie@vchain.us"}},[e._v("amelie@vchain.us")])]),e._v(" "),n("p",[e._v("Visit our website!")]),e._v(" "),n("p",[n("a",{attrs:{href:"http://www.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e._v("www.vchain.us"),n("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/31.8892bfb3.js b/docs/assets/js/32.2229915d.js similarity index 99% rename from docs/assets/js/31.8892bfb3.js rename to docs/assets/js/32.2229915d.js index 466e707cf3..06e4d39d1f 100644 --- a/docs/assets/js/31.8892bfb3.js +++ b/docs/assets/js/32.2229915d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{442:function(t,s,a){"use strict";a.r(s);var e=a(46),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"command-reference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#command-reference"}},[t._v("#")]),t._v(" Command reference")]),t._v(" "),a("h2",{attrs:{id:"immudb"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immudb"}},[t._v("#")]),t._v(" immudb")]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("./immudb -d")]),t._v(" to start immudb locally in the background.")]),t._v(" "),a("p",[t._v("If you want to stop immudb în that case you need to find the process "),a("code",[t._v("ps -ax | grep immudb")]),t._v(" and then "),a("code",[t._v("kill -15 ")]),t._v(". Windows PowerShell would be "),a("code",[t._v("Get-Process immudb* | Stop-Process")]),t._v(".")]),t._v(" "),a("p",[t._v("immudb is launched by default with a security routine called "),a("RouterLink",{attrs:{to:"/immudb/consistency-checker.html"}},[t._v("consistency checker")]),t._v(" . This solution provides a continuous corruption check on data stored on server storage.")],1),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\n\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DIR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(".\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_NETWORK")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("tcp\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DBNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_PIDFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_LOGFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_AUTH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DETACHED")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_CONSISTENCY_CHECK")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/3_application/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/3_application/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DEVMODE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_MAINTENANCE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_ADMIN_PASSWORD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb\n\nUsage:\n immudb "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("flags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n immudb "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n version Show the immudb version\n\nFlags:\n -a, --address string "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("bind")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --admin-password string admin password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default is "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immu'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" as plain-text or base64 encoded "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("must be prefixed with "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'enc:'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" it is encoded"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immudb"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -s, --auth "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" auth\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/3_application/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immudb.ini"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --consistency-check "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" consistency check monitor routine. To disable: --consistency-check"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -d, --detached run immudb "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" background\n --devmode "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" dev mode: accept remote connections without auth\n --dir string data folder "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./data"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb\n --logfile string log path with filename. E.g. /tmp/immudb/immudb.log\n --maintenance override the authentication flag\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --no-histograms disable collection of histogram metrics like query durations\n --pidfile string pid path with filename. E.g. /var/run/immudb.pid\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/3_application/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --port int port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immudb [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),a("h2",{attrs:{id:"immugw"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immugw"}},[t._v("#")]),t._v(" immugw")]),t._v(" "),a("p",[t._v("immugw can be found in a different "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("repository"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("./immugw -d")]),t._v(" to start immugw on the same machine as immudb (test or dev environment) or point to the remote immudb system "),a("code",[t._v('./immugw --immudbaddress "immudb-server"')]),t._v(".")]),t._v(" "),a("p",[t._v("If you want to stop immugw în that case you need to find the process "),a("code",[t._v("ps -ax | grep immugw")]),t._v(" and then "),a("code",[t._v("kill -15 ")]),t._v(". Windows PowerShell would be "),a("code",[t._v("Get-Process immugw* | Stop-Process")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("immu gateway: a smart REST proxy "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\nIt exposes all gRPC methods with a REST interface "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" wrapping all SAFE endpoints with a verification service.\n\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3323")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_DIR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(".\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_PIDFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_LOGFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_DETACHED")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_SERVERNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immugw "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("flags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n immugw "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n version Show the immugw version\n\nFlags:\n -a, --address string immugw "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" audit mode "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("continuously fetches latest root from server, checks consistency against a "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("local")]),t._v(" root and saves the latest root locally"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-interval duration interval at "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("which")]),t._v(" audit should run "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default 5m0s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-password string immudb password used to login during audit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" can be plain-text or base64 encoded "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("must be prefixed with "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'enc:'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" it is encoded"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-username string immudb username used to login during audit "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immugwauditor"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immugw.toml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -d, --detached run immudb "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" background\n --dir string program files folder "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immugw\n -k, --immudb-address string immudb "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -j, --immudb-port int immudb port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --logfile string log path with filename. E.g. /tmp/immugw/immugw.log\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pidfile string pid path with filename. E.g. /var/run/immugw.pid\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --port int immugw port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3323")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immugw [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),a("h2",{attrs:{id:"immuadmin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[t._v("#")]),t._v(" immuadmin")]),t._v(" "),a("p",[t._v("For security reasons we recommend using immuadmin only on the same system as immudb. User management is restricted to localhost usage. Simply run "),a("code",[t._v("./immuadmin")]),t._v(" on the same machine.")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("CLI admin client "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\n\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_SERVERNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immuadmin "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n backup Make a copy of the database files and folders\n database Issue all database commands\n dump Dump database content to a "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n login Login using the specified username and password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("admin username is immudb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("logout")]),t._v("\n print Print merkle tree\n restore Restore the database from a snapshot archive or folder\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" Manage immu services\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" Update server config items: auth "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("none"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("password"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("cryptosig"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(", mtls "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("true"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n stats Show statistics as text or visually with the "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-v'")]),t._v(" option. Run "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immuadmin stats -h'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details.\n status Show heartbeat status\n user Issue all user commands\n version Show the immuadmin version\n\nFlags:\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is immuadmin.toml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immuadmin\n -a, --immudb-address string immudb "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --immudb-port int immudb port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --tokenfile string authentication token "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),t._v(" or binary location"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" the supplied value will be automatically suffixed with _admin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is token-0.7.0_admin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"token-0.7.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuadmin [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),a("h2",{attrs:{id:"immuclient"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immuclient"}},[t._v("#")]),t._v(" immuclient")]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("./immuclient")]),t._v(" on the same machine or connect to a remote immudb "),a("code",[t._v("./immuclient -a ")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("CLI client "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_AUTH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_SERVERNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nIMPORTANT: All get and safeget functions "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("return")]),t._v(" base64-encoded keys and values, "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" all "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" and safeset functions "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),t._v(" base64-encoded inputs.\n\nUsage:\n immuclient "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("flags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n immuclient "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n audit-mode Starts immuclient as daemon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" auditor mode. Run "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immuclient audit-mode help'")]),t._v(" or use -h flag "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details\n check-consistency Check consistency "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the specified index and "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("hash")]),t._v("\n count Count keys having the specified prefix\n current Return the last merkle tree root and index stored locally\n get Get item having the specified key\n getByIndex Return an element by index\n getRawBySafeIndex Return an element by index\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" Fetch "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key\n inclusion Check "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" specified index is included "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" the current tree\n iscan Iterate over all elements by insertion order\n it Starts immuclient "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" CLI mode. Use "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'help'")]),t._v(" or -h flag on the shell "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details\n login Login using the specified username and password\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("logout")]),t._v("\n rawsafeget Get item having the specified key, without parsing structured values\n rawsafeset Set a value "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key, without setup structured values\n reference Add new reference to an existing key\n safeget Get and verify item having the specified key\n safereference Add and verify new reference to an existing key\n safeset Add and verify new item having the specified key and value\n safezadd Add and verify new key with score to a new or existing sorted "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n scan Iterate over keys having the specified prefix\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" Add new item having the specified key and value\n status Ping to check "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" server connection is alive\n use Select database\n user Issue all user commands\n version Show the immuclient version\n zadd Add new key with score to a new or existing sorted "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n zscan Iterate over a sorted "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n\nFlags:\n --audit-password string immudb password used to login during audit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" can be plain-text or base64 encoded "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("must be prefixed with "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'enc:'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" it is encoded"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-username string immudb username used to login during audit\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immuclient.toml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --dir string Main directory "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" audit process tool to initialize "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immuclient\n -a, --immudb-address string immudb "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --immudb-port int immudb port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-host string Launch "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" of the Prometheus exporter. "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-port string Launch port of the Prometheus exporter. "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"9477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --roots-filepath string Filepath "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" storing root hashes after every successful audit loop. Default is tempdir of every OS. "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --tokenfile string authentication token "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),t._v(" or binary location"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is token-0.7.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"token-0.7.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --value-only returning only values "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" get operations\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuclient [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{451:function(t,s,a){"use strict";a.r(s);var e=a(10),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"command-reference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#command-reference"}},[t._v("#")]),t._v(" Command reference")]),t._v(" "),a("h2",{attrs:{id:"immudb"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immudb"}},[t._v("#")]),t._v(" immudb")]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("./immudb -d")]),t._v(" to start immudb locally in the background.")]),t._v(" "),a("p",[t._v("If you want to stop immudb în that case you need to find the process "),a("code",[t._v("ps -ax | grep immudb")]),t._v(" and then "),a("code",[t._v("kill -15 ")]),t._v(". Windows PowerShell would be "),a("code",[t._v("Get-Process immudb* | Stop-Process")]),t._v(".")]),t._v(" "),a("p",[t._v("immudb is launched by default with a security routine called "),a("RouterLink",{attrs:{to:"/immudb/consistency-checker.html"}},[t._v("consistency checker")]),t._v(" . This solution provides a continuous corruption check on data stored on server storage.")],1),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\n\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DIR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(".\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_NETWORK")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("tcp\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DBNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_PIDFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_LOGFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_AUTH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DETACHED")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_CONSISTENCY_CHECK")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/3_application/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/3_application/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_DEVMODE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_MAINTENANCE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_ADMIN_PASSWORD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb\n\nUsage:\n immudb "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("flags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n immudb "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n version Show the immudb version\n\nFlags:\n -a, --address string "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("bind")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --admin-password string admin password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default is "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immu'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" as plain-text or base64 encoded "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("must be prefixed with "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'enc:'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" it is encoded"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immudb"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -s, --auth "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" auth\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/3_application/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immudb.ini"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --consistency-check "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" consistency check monitor routine. To disable: --consistency-check"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -d, --detached run immudb "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" background\n --devmode "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" dev mode: accept remote connections without auth\n --dir string data folder "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./data"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb\n --logfile string log path with filename. E.g. /tmp/immudb/immudb.log\n --maintenance override the authentication flag\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --no-histograms disable collection of histogram metrics like query durations\n --pidfile string pid path with filename. E.g. /var/run/immudb.pid\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/3_application/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --port int port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immudb [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),a("h2",{attrs:{id:"immugw"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immugw"}},[t._v("#")]),t._v(" immugw")]),t._v(" "),a("p",[t._v("immugw can be found in a different "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("repository"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("./immugw -d")]),t._v(" to start immugw on the same machine as immudb (test or dev environment) or point to the remote immudb system "),a("code",[t._v('./immugw --immudbaddress "immudb-server"')]),t._v(".")]),t._v(" "),a("p",[t._v("If you want to stop immugw în that case you need to find the process "),a("code",[t._v("ps -ax | grep immugw")]),t._v(" and then "),a("code",[t._v("kill -15 ")]),t._v(". Windows PowerShell would be "),a("code",[t._v("Get-Process immugw* | Stop-Process")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("immu gateway: a smart REST proxy "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\nIt exposes all gRPC methods with a REST interface "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" wrapping all SAFE endpoints with a verification service.\n\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3323")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_DIR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(".\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_PIDFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_LOGFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_DETACHED")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_SERVERNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immugw "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("flags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n immugw "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n version Show the immugw version\n\nFlags:\n -a, --address string immugw "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" audit mode "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("continuously fetches latest root from server, checks consistency against a "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("local")]),t._v(" root and saves the latest root locally"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-interval duration interval at "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("which")]),t._v(" audit should run "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default 5m0s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-password string immudb password used to login during audit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" can be plain-text or base64 encoded "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("must be prefixed with "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'enc:'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" it is encoded"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-username string immudb username used to login during audit "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immugwauditor"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immugw.toml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -d, --detached run immudb "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" background\n --dir string program files folder "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immugw\n -k, --immudb-address string immudb "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -j, --immudb-port int immudb port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --logfile string log path with filename. E.g. /tmp/immugw/immugw.log\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pidfile string pid path with filename. E.g. /var/run/immugw.pid\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --port int immugw port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3323")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immugw [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),a("h2",{attrs:{id:"immuadmin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[t._v("#")]),t._v(" immuadmin")]),t._v(" "),a("p",[t._v("For security reasons we recommend using immuadmin only on the same system as immudb. User management is restricted to localhost usage. Simply run "),a("code",[t._v("./immuadmin")]),t._v(" on the same machine.")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("CLI admin client "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\n\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_SERVERNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUADMIN_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immuadmin "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n backup Make a copy of the database files and folders\n database Issue all database commands\n dump Dump database content to a "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n login Login using the specified username and password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("admin username is immudb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("logout")]),t._v("\n print Print merkle tree\n restore Restore the database from a snapshot archive or folder\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" Manage immu services\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" Update server config items: auth "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("none"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("password"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("cryptosig"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(", mtls "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("true"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n stats Show statistics as text or visually with the "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-v'")]),t._v(" option. Run "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immuadmin stats -h'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details.\n status Show heartbeat status\n user Issue all user commands\n version Show the immuadmin version\n\nFlags:\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is immuadmin.toml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immuadmin\n -a, --immudb-address string immudb "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --immudb-port int immudb port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --tokenfile string authentication token "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),t._v(" or binary location"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" the supplied value will be automatically suffixed with _admin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is token-0.7.0_admin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"token-0.7.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuadmin [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),a("h2",{attrs:{id:"immuclient"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immuclient"}},[t._v("#")]),t._v(" immuclient")]),t._v(" "),a("p",[t._v("Simply run "),a("code",[t._v("./immuclient")]),t._v(" on the same machine or connect to a remote immudb "),a("code",[t._v("./immuclient -a ")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("CLI client "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\nEnvironment variables:\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_ADDRESS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_PORT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_AUTH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_MTLS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_SERVERNAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_PKEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CERTIFICATE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CLIENTCAS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nIMPORTANT: All get and safeget functions "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("return")]),t._v(" base64-encoded keys and values, "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" all "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" and safeset functions "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),t._v(" base64-encoded inputs.\n\nUsage:\n immuclient "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("flags"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n immuclient "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n audit-mode Starts immuclient as daemon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" auditor mode. Run "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immuclient audit-mode help'")]),t._v(" or use -h flag "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details\n check-consistency Check consistency "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the specified index and "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("hash")]),t._v("\n count Count keys having the specified prefix\n current Return the last merkle tree root and index stored locally\n get Get item having the specified key\n getByIndex Return an element by index\n getRawBySafeIndex Return an element by index\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" Fetch "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key\n inclusion Check "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" specified index is included "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" the current tree\n iscan Iterate over all elements by insertion order\n it Starts immuclient "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" CLI mode. Use "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'help'")]),t._v(" or -h flag on the shell "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details\n login Login using the specified username and password\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("logout")]),t._v("\n rawsafeget Get item having the specified key, without parsing structured values\n rawsafeset Set a value "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key, without setup structured values\n reference Add new reference to an existing key\n safeget Get and verify item having the specified key\n safereference Add and verify new reference to an existing key\n safeset Add and verify new item having the specified key and value\n safezadd Add and verify new key with score to a new or existing sorted "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n scan Iterate over keys having the specified prefix\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" Add new item having the specified key and value\n status Ping to check "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" server connection is alive\n use Select database\n user Issue all user commands\n version Show the immuclient version\n zadd Add new key with score to a new or existing sorted "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n zscan Iterate over a sorted "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n\nFlags:\n --audit-password string immudb password used to login during audit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" can be plain-text or base64 encoded "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("must be prefixed with "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'enc:'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" it is encoded"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --audit-username string immudb username used to login during audit\n --certificate string server certificate "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immuclient.toml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --dir string Main directory "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" audit process tool to initialize "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immuclient\n -a, --immudb-address string immudb "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --immudb-port int immudb port number "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -m, --mtls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pkey string server private key path "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-host string Launch "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" of the Prometheus exporter. "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-port string Launch port of the Prometheus exporter. "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"9477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --roots-filepath string Filepath "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" storing root hashes after every successful audit loop. Default is tempdir of every OS. "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --tokenfile string authentication token "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is "),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),t._v(" or binary location"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is token-0.7.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"token-0.7.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --value-only returning only values "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" get operations\n\nUse "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuclient [command] --help"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/32.2ee7ea2f.js b/docs/assets/js/33.1f7946d5.js similarity index 98% rename from docs/assets/js/32.2ee7ea2f.js rename to docs/assets/js/33.1f7946d5.js index 933c47436d..5da20b63b9 100644 --- a/docs/assets/js/32.2ee7ea2f.js +++ b/docs/assets/js/33.1f7946d5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{443:function(t,e,a){"use strict";a.r(e);var s=a(46),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"how-it-works"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-it-works"}},[t._v("#")]),t._v(" How it works")]),t._v(" "),a("p",[t._v("Download "),a("a",{attrs:{href:"https://codenotary.com/technologies/immudb/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb short research paper"),a("OutboundLink")],1),t._v(" to have a conceptual understanding of the technical foundations of immudb.")]),t._v(" "),a("h2",{attrs:{id:"adding-data"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-data"}},[t._v("#")]),t._v(" Adding data")]),t._v(" "),a("p",[t._v("When adding data the merkle tree changes as well as shown in the diagram")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/immudb-adding-data-diagram.png",alt:"the merkle tree changes with every new data"}})]),t._v(" "),a("h2",{attrs:{id:"checking-data-consistency"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#checking-data-consistency"}},[t._v("#")]),t._v(" Checking data consistency")]),t._v(" "),a("p",[t._v("The following diagram explains how data is inserted, verified and consistency checked.")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/immudb-consistency-diagram.png",alt:"How immudb data consistency works"}})]),t._v(" "),a("h2",{attrs:{id:"structured-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structured-value"}},[t._v("#")]),t._v(" Structured value")]),t._v(" "),a("p",[t._v("The messages structure allows callers to use key value pairs as embedded payload. Thus, it will soon be possible to decouple and extend\nthe value structure. The value, currently a stream of bytes, can be augmented with some client provided metadata.\nThis also permits use of an on-demand serialization/deserialization strategy.")]),t._v(" "),a("p",[t._v("The payload includes a timestamp and a value at the moment. In the near future cryptographic signatures will be added as well, but it's\npossible to decouple and extend. The entire payload contribute to hash generation and is inserted in\nthe merkle tree.")]),t._v(" "),a("p",[t._v("All the complexity is hidden by the SDK.")]),t._v(" "),a("h2",{attrs:{id:"root-signature"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#root-signature"}},[t._v("#")]),t._v(" Root signature")]),t._v(" "),a("p",[t._v("Providing "),a("code",[t._v("immudb")]),t._v(" with a signing key enables the cryptographic root signature.\nIn this way an auditor for instance or a third party client could verify the authenticity of the returned root hash / index pair after calling "),a("code",[t._v("currentRoot")]),t._v(" gRPC method.\nHere the gRPC message definitions:")]),t._v(" "),a("div",{staticClass:"language-proto extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("message Root {\n\tRootIndex payload = 1;\n\tSignature signature = 2;\n}\n\nmessage RootIndex {\n\tuint64 index = 1;\n\tbytes root = 2;\n}\n\nmessage Signature {\n\tbytes signature = 1;\n\tbytes publicKey = 2;\n}\n")])])]),a("p",[t._v("It's possible to use the environment "),a("code",[t._v("IMMUDB_SIGNING_KEY")]),t._v(" or "),a("code",[t._v("--signingKey")]),t._v(" immudb flag.")]),t._v(" "),a("p",[t._v("To generate a valid key it's possible to use "),a("code",[t._v("openssl")]),t._v(" tool:")]),t._v(" "),a("div",{staticClass:"language-.bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("openssl ecparam -name prime256v1 -genkey -noout -out my.key\n")])])]),a("p",[t._v("Immuclient and "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" are shipped with auditor capabilities.\nTo obtain the advantages of using the signed root in combination with the auditor it's possible to launch:")]),t._v(" "),a("ul",[a("li",[t._v("immuclient with auditor capabilities:")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("immuclient audit-mode --audit-username "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-username"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-pw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-signature validate\n")])])]),a("ul",[a("li",[t._v("with "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" with auditor capabilities:")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("./immugw --audit --audit-username "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-username"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-pw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-signature validate\n")])])]),a("h2",{attrs:{id:"item-references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#item-references"}},[t._v("#")]),t._v(" Item References")]),t._v(" "),a("p",[t._v("Enables the insertion of a special entry which references to another item")]),t._v(" "),a("h2",{attrs:{id:"value-timestamp"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#value-timestamp"}},[t._v("#")]),t._v(" Value timestamp")]),t._v(" "),a("p",[t._v("The server should not set the timestamp, to avoid relying on a non-verifiable “single source of truth”.\nThus, the clients must provide it. The client driver implementation can automatically do that for the user.")]),t._v(" "),a("h2",{attrs:{id:"primary-index"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#primary-index"}},[t._v("#")]),t._v(" Primary Index")]),t._v(" "),a("p",[t._v("Index enables queries and search based on the data key")]),t._v(" "),a("h2",{attrs:{id:"secondary-index"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#secondary-index"}},[t._v("#")]),t._v(" Secondary Index")]),t._v(" "),a("p",[t._v("Index enables queries and search based on the data value")]),t._v(" "),a("h2",{attrs:{id:"cryptographic-signatures"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cryptographic-signatures"}},[t._v("#")]),t._v(" Cryptographic signatures")]),t._v(" "),a("p",[t._v("A signature (PKI) provided by the client can be became part of the insertion process")]),t._v(" "),a("h2",{attrs:{id:"authentication-transport"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#authentication-transport"}},[t._v("#")]),t._v(" Authentication (transport)")]),t._v(" "),a("p",[t._v("Integrated mTLS offers the best approach for machine-to-machine authentication, also providing communications security (entryption) over the transport channel")]),t._v(" "),a("h1",{attrs:{id:"immugw-communication"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immugw-communication"}},[t._v("#")]),t._v(" immugw communication")]),t._v(" "),a("p",[t._v("immugw can be found in its "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("own repository"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("immugw proxies REST client communication and gRPC server interface. For security purposes, immugw should not run on the same server as immudb. The following diagram shows how the communication works:")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://raw.githubusercontent.com/codenotary/immugw/master/img/immugw-diagram.png",alt:"immugw communication explained"}})])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{449:function(t,e,a){"use strict";a.r(e);var s=a(10),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"how-it-works"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-it-works"}},[t._v("#")]),t._v(" How it works")]),t._v(" "),a("p",[t._v("Download "),a("a",{attrs:{href:"https://codenotary.com/technologies/immudb/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb short research paper"),a("OutboundLink")],1),t._v(" to have a conceptual understanding of the technical foundations of immudb.")]),t._v(" "),a("h2",{attrs:{id:"adding-data"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-data"}},[t._v("#")]),t._v(" Adding data")]),t._v(" "),a("p",[t._v("When adding data the merkle tree changes as well as shown in the diagram")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/immudb-adding-data-diagram.png",alt:"the merkle tree changes with every new data"}})]),t._v(" "),a("h2",{attrs:{id:"checking-data-consistency"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#checking-data-consistency"}},[t._v("#")]),t._v(" Checking data consistency")]),t._v(" "),a("p",[t._v("The following diagram explains how data is inserted, verified and consistency checked.")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://github.com/codenotary/immudb/raw/master/img/immudb-consistency-diagram.png",alt:"How immudb data consistency works"}})]),t._v(" "),a("h2",{attrs:{id:"structured-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structured-value"}},[t._v("#")]),t._v(" Structured value")]),t._v(" "),a("p",[t._v("The messages structure allows callers to use key value pairs as embedded payload. Thus, it will soon be possible to decouple and extend\nthe value structure. The value, currently a stream of bytes, can be augmented with some client provided metadata.\nThis also permits use of an on-demand serialization/deserialization strategy.")]),t._v(" "),a("p",[t._v("The payload includes a timestamp and a value at the moment. In the near future cryptographic signatures will be added as well, but it's\npossible to decouple and extend. The entire payload contribute to hash generation and is inserted in\nthe merkle tree.")]),t._v(" "),a("p",[t._v("All the complexity is hidden by the SDK.")]),t._v(" "),a("h2",{attrs:{id:"root-signature"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#root-signature"}},[t._v("#")]),t._v(" Root signature")]),t._v(" "),a("p",[t._v("Providing "),a("code",[t._v("immudb")]),t._v(" with a signing key enables the cryptographic root signature.\nIn this way an auditor for instance or a third party client could verify the authenticity of the returned root hash / index pair after calling "),a("code",[t._v("currentRoot")]),t._v(" gRPC method.\nHere the gRPC message definitions:")]),t._v(" "),a("div",{staticClass:"language-proto extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("message Root {\n\tRootIndex payload = 1;\n\tSignature signature = 2;\n}\n\nmessage RootIndex {\n\tuint64 index = 1;\n\tbytes root = 2;\n}\n\nmessage Signature {\n\tbytes signature = 1;\n\tbytes publicKey = 2;\n}\n")])])]),a("p",[t._v("It's possible to use the environment "),a("code",[t._v("IMMUDB_SIGNING_KEY")]),t._v(" or "),a("code",[t._v("--signingKey")]),t._v(" immudb flag.")]),t._v(" "),a("p",[t._v("To generate a valid key it's possible to use "),a("code",[t._v("openssl")]),t._v(" tool:")]),t._v(" "),a("div",{staticClass:"language-.bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("openssl ecparam -name prime256v1 -genkey -noout -out my.key\n")])])]),a("p",[t._v("Immuclient and "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" are shipped with auditor capabilities.\nTo obtain the advantages of using the signed root in combination with the auditor it's possible to launch:")]),t._v(" "),a("ul",[a("li",[t._v("immuclient with auditor capabilities:")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("immuclient audit-mode --audit-username "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-username"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-pw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-signature validate\n")])])]),a("ul",[a("li",[t._v("with "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" with auditor capabilities:")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("./immugw --audit --audit-username "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-username"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("immudb-pw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" --audit-signature validate\n")])])]),a("h2",{attrs:{id:"item-references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#item-references"}},[t._v("#")]),t._v(" Item References")]),t._v(" "),a("p",[t._v("Enables the insertion of a special entry which references to another item")]),t._v(" "),a("h2",{attrs:{id:"value-timestamp"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#value-timestamp"}},[t._v("#")]),t._v(" Value timestamp")]),t._v(" "),a("p",[t._v("The server should not set the timestamp, to avoid relying on a non-verifiable “single source of truth”.\nThus, the clients must provide it. The client driver implementation can automatically do that for the user.")]),t._v(" "),a("h2",{attrs:{id:"primary-index"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#primary-index"}},[t._v("#")]),t._v(" Primary Index")]),t._v(" "),a("p",[t._v("Index enables queries and search based on the data key")]),t._v(" "),a("h2",{attrs:{id:"secondary-index"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#secondary-index"}},[t._v("#")]),t._v(" Secondary Index")]),t._v(" "),a("p",[t._v("Index enables queries and search based on the data value")]),t._v(" "),a("h2",{attrs:{id:"cryptographic-signatures"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cryptographic-signatures"}},[t._v("#")]),t._v(" Cryptographic signatures")]),t._v(" "),a("p",[t._v("A signature (PKI) provided by the client can be became part of the insertion process")]),t._v(" "),a("h2",{attrs:{id:"authentication-transport"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#authentication-transport"}},[t._v("#")]),t._v(" Authentication (transport)")]),t._v(" "),a("p",[t._v("Integrated mTLS offers the best approach for machine-to-machine authentication, also providing communications security (entryption) over the transport channel")]),t._v(" "),a("h1",{attrs:{id:"immugw-communication"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#immugw-communication"}},[t._v("#")]),t._v(" immugw communication")]),t._v(" "),a("p",[t._v("immugw can be found in its "),a("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("own repository"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("immugw proxies REST client communication and gRPC server interface. For security purposes, immugw should not run on the same server as immudb. The following diagram shows how the communication works:")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://raw.githubusercontent.com/codenotary/immugw/master/img/immugw-diagram.png",alt:"immugw communication explained"}})])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/33.a2e03872.js b/docs/assets/js/34.7fe4275b.js similarity index 99% rename from docs/assets/js/33.a2e03872.js rename to docs/assets/js/34.7fe4275b.js index dbbe4aa422..a0f809bb7e 100644 --- a/docs/assets/js/33.a2e03872.js +++ b/docs/assets/js/34.7fe4275b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{444:function(a,t,s){"use strict";s.r(t);var e=s(46),n=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"immuadmin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[a._v("#")]),a._v(" immuadmin")]),a._v(" "),s("p",[a._v("immuadmin is the admin CLI for immudb and immugw. You can install and manage the service installation for both components and get statistics as well as runtime information.")]),a._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[a._v("#")]),a._v(" Contents")]),a._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#latest-binaries"}},[a._v("Latest binaries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#build"}},[a._v("Build")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#docker"}},[a._v("Docker")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#use-immuadmin"}},[a._v("Use immuadmin")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#license"}},[a._v("License")])])]),a._v(" "),s("h2",{attrs:{id:"latest-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[a._v("#")]),a._v(" Latest binaries")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[a._v("Get the latest builds"),s("OutboundLink")],1)]),a._v(" "),s("h2",{attrs:{id:"build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[a._v("#")]),a._v(" Build")]),a._v(" "),s("p",[a._v("clone the immudb repository locally")]),a._v(" "),s("p",[s("code",[a._v("git clone https://github.com/codenotary/immudb.git")])]),a._v(" "),s("h3",{attrs:{id:"linux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h3",{attrs:{id:"macos"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[a._v("#")]),a._v(" MacOS")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h3",{attrs:{id:"windows"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[a._v("#")]),a._v(" Windows")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h2",{attrs:{id:"docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[a._v("#")]),a._v(" Docker")]),a._v(" "),s("h3",{attrs:{id:"build-your-own-docker-container-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[a._v("#")]),a._v(" build your own Docker container image")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker build -t myown/immuadmin:latest -f Dockerfile.immuadmin "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v("\n")])])]),s("h3",{attrs:{id:"run-immuadmin-in-a-container"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immuadmin-in-a-container"}},[a._v("#")]),a._v(" run immuadmin in a container")]),a._v(" "),s("p",[a._v("Best is to have immuadmin running on the same machine as immudb, so it can access localhost. As immuadmin is interactive, you can simply add the immuadmin command after docker run.")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker run -it --rm ---network "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" -name immuadmin codenotary/immugw:latest "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v("\n")])])]),s("h2",{attrs:{id:"use-immuadmin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-immuadmin"}},[a._v("#")]),a._v(" Use immuadmin")]),a._v(" "),s("p",[s("code",[a._v("immuadmin help")]),a._v(" is a good starting point")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("CLI admin client "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immudb - the lightweight, high-speed immutable database "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" systems and applications.\n\nEnvironment variables:\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immuadmin "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("command"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\nAvailable Commands:\n backup Make a copy of the database files and folders\n dump Dump database content to a "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" Help about any "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v("\n login Login using the specified username and password "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("admin username is immu"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("logout")]),a._v("\n restore Restore the database from a snapshot archive or folder\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" Manage immu services\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("set")]),a._v(" Update server config items: auth "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("none"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("password"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("cryptosig"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(", mtls "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("true"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n stats Show statistics as text or visually with the "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'-v'")]),a._v(" option. Run "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'immuadmin stats -h'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" details.\n status Show heartbeat status\n user Perform various user-related operations: list, create, deactivate, change password, "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("set")]),a._v(" permissions\n version Show the immuadmin version\n\nFlags:\n --certificate string server certificate "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --clientcas string clients certificates list. Aka certificate authority "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --config string config "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default path is configs or "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" default filename is immuadmin.toml"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -h, --help "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immuadmin\n -a, --immudb-address string immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -p, --immudb-port int immudb port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -m, --mtls "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" mutual tls\n --pkey string server private key path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --servername string used to verify the "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("hostname")]),a._v(" on the returned certificates "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --tokenfile string authentication token "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default path is "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v(" or binary location"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" the supplied value will be automatically suffixed with _admin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" default filename is token_admin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"token"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n\nUse "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"immuadmin [command] --help"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("more")]),a._v(" information about a command.\n")])])]),s("p",[a._v("You can also use the help functionality for specific commands, i. e. "),s("code",[a._v("immuadmin user help")])]),a._v(" "),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),s("p",[a._v("immuadmin is "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),s("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{450:function(a,t,s){"use strict";s.r(t);var e=s(10),n=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"immuadmin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[a._v("#")]),a._v(" immuadmin")]),a._v(" "),s("p",[a._v("immuadmin is the admin CLI for immudb and immugw. You can install and manage the service installation for both components and get statistics as well as runtime information.")]),a._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[a._v("#")]),a._v(" Contents")]),a._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#latest-binaries"}},[a._v("Latest binaries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#build"}},[a._v("Build")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#docker"}},[a._v("Docker")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#use-immuadmin"}},[a._v("Use immuadmin")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#license"}},[a._v("License")])])]),a._v(" "),s("h2",{attrs:{id:"latest-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[a._v("#")]),a._v(" Latest binaries")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[a._v("Get the latest builds"),s("OutboundLink")],1)]),a._v(" "),s("h2",{attrs:{id:"build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[a._v("#")]),a._v(" Build")]),a._v(" "),s("p",[a._v("clone the immudb repository locally")]),a._v(" "),s("p",[s("code",[a._v("git clone https://github.com/codenotary/immudb.git")])]),a._v(" "),s("h3",{attrs:{id:"linux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h3",{attrs:{id:"macos"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[a._v("#")]),a._v(" MacOS")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h3",{attrs:{id:"windows"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[a._v("#")]),a._v(" Windows")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h2",{attrs:{id:"docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[a._v("#")]),a._v(" Docker")]),a._v(" "),s("h3",{attrs:{id:"build-your-own-docker-container-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[a._v("#")]),a._v(" build your own Docker container image")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker build -t myown/immuadmin:latest -f Dockerfile.immuadmin "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v("\n")])])]),s("h3",{attrs:{id:"run-immuadmin-in-a-container"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immuadmin-in-a-container"}},[a._v("#")]),a._v(" run immuadmin in a container")]),a._v(" "),s("p",[a._v("Best is to have immuadmin running on the same machine as immudb, so it can access localhost. As immuadmin is interactive, you can simply add the immuadmin command after docker run.")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker run -it --rm ---network "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" -name immuadmin codenotary/immugw:latest "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v("\n")])])]),s("h2",{attrs:{id:"use-immuadmin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-immuadmin"}},[a._v("#")]),a._v(" Use immuadmin")]),a._v(" "),s("p",[s("code",[a._v("immuadmin help")]),a._v(" is a good starting point")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("CLI admin client "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immudb - the lightweight, high-speed immutable database "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" systems and applications.\n\nEnvironment variables:\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUADMIN_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immuadmin "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("command"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\nAvailable Commands:\n backup Make a copy of the database files and folders\n dump Dump database content to a "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" Help about any "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v("\n login Login using the specified username and password "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("admin username is immu"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("logout")]),a._v("\n restore Restore the database from a snapshot archive or folder\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" Manage immu services\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("set")]),a._v(" Update server config items: auth "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("none"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("password"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("cryptosig"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(", mtls "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("true"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n stats Show statistics as text or visually with the "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'-v'")]),a._v(" option. Run "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'immuadmin stats -h'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" details.\n status Show heartbeat status\n user Perform various user-related operations: list, create, deactivate, change password, "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("set")]),a._v(" permissions\n version Show the immuadmin version\n\nFlags:\n --certificate string server certificate "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --clientcas string clients certificates list. Aka certificate authority "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --config string config "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default path is configs or "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" default filename is immuadmin.toml"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -h, --help "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immuadmin\n -a, --immudb-address string immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -p, --immudb-port int immudb port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -m, --mtls "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" mutual tls\n --pkey string server private key path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --servername string used to verify the "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("hostname")]),a._v(" on the returned certificates "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --tokenfile string authentication token "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default path is "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v(" or binary location"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" the supplied value will be automatically suffixed with _admin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" default filename is token_admin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"token"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n\nUse "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"immuadmin [command] --help"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("more")]),a._v(" information about a command.\n")])])]),s("p",[a._v("You can also use the help functionality for specific commands, i. e. "),s("code",[a._v("immuadmin user help")])]),a._v(" "),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),s("p",[a._v("immuadmin is "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),s("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/35.436bfe90.js b/docs/assets/js/35.436bfe90.js deleted file mode 100644 index b33a31e8db..0000000000 --- a/docs/assets/js/35.436bfe90.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{446:function(a,t,e){"use strict";e.r(t);var s=e(46),r=Object(s.a)({},(function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immudb"}},[a._v("#")]),a._v(" immudb")]),a._v(" "),e("h2",{attrs:{id:"contents"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[a._v("#")]),a._v(" Contents")]),a._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"#latest-binaries"}},[a._v("Latest binaries")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#build"}},[a._v("Build")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#docker"}},[a._v("Docker")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#run-immudb"}},[a._v("Run immudb")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#configuration"}},[a._v("Configuration")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#immuadmin"}},[a._v("immuadmin")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#immudb-service"}},[a._v("immudb service")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#authentication"}},[a._v("Authentication")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#backup-and-restore"}},[a._v("Backup and Restore")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#multi-database"}},[a._v("Multi-Database")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#clients"}},[a._v("Clients")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#auditors"}},[a._v("Auditors")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#architecture"}},[a._v("Architecture")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#consistency-checker"}},[a._v("Consistency Checker")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#license"}},[a._v("License")])])]),a._v(" "),e("h2",{attrs:{id:"latest-binaries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[a._v("#")]),a._v(" Latest binaries")]),a._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[a._v("Get the latest builds"),e("OutboundLink")],1)]),a._v(" "),e("p",[a._v("If you run macOS you can also use Homebrew:")]),a._v(" "),e("p",[e("code",[a._v("brew install immudb")])]),a._v(" "),e("h2",{attrs:{id:"build"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[a._v("#")]),a._v(" Build")]),a._v(" "),e("p",[a._v("clone the immudb repository locally")]),a._v(" "),e("p",[a._v("'git clone https://github.com/codenotary/immudb.git'")]),a._v(" "),e("h3",{attrs:{id:"linux"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immudb-static\n")])])]),e("h3",{attrs:{id:"macos"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[a._v("#")]),a._v(" MacOS")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("darwin "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immudb-static\n")])])]),e("h3",{attrs:{id:"windows"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[a._v("#")]),a._v(" Windows")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immudb-static\n")])])]),e("h2",{attrs:{id:"docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[a._v("#")]),a._v(" Docker")]),a._v(" "),e("h3",{attrs:{id:"build-your-own-docker-container-image"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[a._v("#")]),a._v(" build your own Docker container image")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker build -t myown/immudb:latest -f Dockerfile "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v("\n")])])]),e("h3",{attrs:{id:"run-immugw-in-a-container"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw-in-a-container"}},[a._v("#")]),a._v(" run immugw in a container")]),a._v(" "),e("p",[a._v("Make sure to point to the immudb system using the environment variable IMMUGW_IMMUDB_ADDRESS")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("9497")]),a._v(":9497 --name immudb codenotary/immugw:latest\n")])])]),e("p",[a._v("or listen on all interfaces")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("9497")]),a._v(":9497 --name immudb -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.0.0.0"')]),a._v(" codenotary/immudb\n")])])]),e("p",[a._v("listen on all interfaces, persistent data")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker volume create immudb-data\ndocker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("9497")]),a._v(":9497 -v immudb-data:/var/lib/immudb --name immudb -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.0.0.0"')]),a._v(" codenotary/immudb\n")])])]),e("h2",{attrs:{id:"run-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb"}},[a._v("#")]),a._v(" Run immudb")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# run immudb in the foreground")]),a._v("\n./immudb\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# run immudb in the background")]),a._v("\n./immudb -d\n")])])]),e("h2",{attrs:{id:"configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[a._v("#")]),a._v(" Configuration")]),a._v(" "),e("p",[a._v("immudb can be configured using environment variables, flags or a config file.")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("immudb --help")]),a._v(" shows you all available flags and environment variables.")]),a._v(" "),e("li",[e("code",[a._v("/etc/immudb/immudb.toml")]),a._v(" is used as a default configuration file")])]),a._v(" "),e("h3",{attrs:{id:"environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[a._v("#")]),a._v(" Environment variables")]),a._v(" "),e("p",[a._v("The environment variables are the most popular way to configure Docker container:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DIR")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(".\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_NETWORK")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("tcp\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("0.0")]),a._v(".0.0\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_PORT")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DBNAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("immudb\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_PIDFILE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_LOGFILE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_MTLS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_AUTH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DETACHED")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_CONSISTENCY_CHECK")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_PKEY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/3_application/private/localhost.key.pem\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_CERTIFICATE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/3_application/certs/localhost.cert.pem\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_CLIENTCAS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DEVMODE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_MAINTENANCE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADMIN_PASSWORD")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("immudb\n\n")])])]),e("h2",{attrs:{id:"immuadmin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[a._v("#")]),a._v(" immuadmin")]),a._v(" "),e("p",[a._v("immuadmin can be used to install and manage the immudb service for Windows and Linux")]),a._v(" "),e("h3",{attrs:{id:"linux-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux-2"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static \n")])])]),e("h3",{attrs:{id:"windows-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows-by-component"}},[a._v("#")]),a._v(" Windows (by component)")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),e("h2",{attrs:{id:"immudb-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immudb-service"}},[a._v("#")]),a._v(" immudb service")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# install immudb service")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# check current immudb service status")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" status\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# stop immudb service")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" stop\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# start immudb service")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" start\n")])])]),e("p",[a._v("The linux service is using the following defaults:")]),a._v(" "),e("table",[e("thead",[e("tr",[e("th",[a._v("File or configuration")]),a._v(" "),e("th",[a._v("location")])])]),a._v(" "),e("tbody",[e("tr",[e("td",[a._v("all configuration files")]),a._v(" "),e("td",[a._v("/etc/immudb")])]),a._v(" "),e("tr",[e("td",[a._v("all data files")]),a._v(" "),e("td",[a._v("/var/lib/immudb")])]),a._v(" "),e("tr",[e("td",[a._v("pid file")]),a._v(" "),e("td",[a._v("/var/lib/immudb/immudb.pid")])]),a._v(" "),e("tr",[e("td",[a._v("log files")]),a._v(" "),e("td",[a._v("/var/log/immudb")])])])]),a._v(" "),e("h2",{attrs:{id:"authentication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#authentication"}},[a._v("#")]),a._v(" Authentication")]),a._v(" "),e("p",[a._v("immudb supports multiple user accounts that can have admin, read-only or read-write permission.\nAll permissions are stored in a different database and each gRPC call has an associated minimum permissions.")]),a._v(" "),e("p",[a._v("To enable authentication you need to change the configuration file "),e("code",[a._v("/etc/immudb/immudb.toml")])]),a._v(" "),e("p",[a._v("Example:")]),a._v(" "),e("div",{staticClass:"language-toml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-toml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("dir")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/var/lib/immudb"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("network")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tcp"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("address")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.0.0.0"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("port")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("dbname")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"data"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("pidfile")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/var/lib/immudb/immudb.pid"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("logfile")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/var/log/immudb/immudb.log"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("mtls")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("detached")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("auth")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("pkey")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/immudb/mtls/3_application/private/localhost.key.pem"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("certificate")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/immudb/mtls/3_application/certs/localhost.cert.pem"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("clientcas")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/immudb/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a._v("\n")])])]),e("p",[a._v("The important lines to change are "),e("code",[a._v("auth = true")]),a._v(" and "),e("code",[a._v('address = "0.0.0.0"')]),a._v(" to enable authentication and listening on all interfaces.")]),a._v(" "),e("p",[a._v("Then restart/start immudb.")]),a._v(" "),e("h3",{attrs:{id:"get-the-admin-credentials"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#get-the-admin-credentials"}},[a._v("#")]),a._v(" Get the admin credentials")]),a._v(" "),e("p",[a._v("You need to run "),e("code",[a._v("immuadmin")]),a._v(" locally on the same system as immudb (for security reasons) and connect to immudb:")]),a._v(" "),e("p",[e("code",[a._v("immuadmin login immudb")])]),a._v(" "),e("p",[a._v("You^ll receive the following message:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("Using config file: /etc/immudb/immudb.toml\n"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\nThis looks like the very first admin login attempt, hence the following credentials have been generated:\n---\nusername: immudb\npassword: immudb\n---\nIMPORTANT: This is the only "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("time")]),a._v(" they are shown, so "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" sure you remember them.\nNOTE: You have not been automatically logged in. To login please run the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'immuadmin login immu'")]),a._v(" with the above-mentioned password. You can change your password at any "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("time")]),a._v(" with one of your liking using the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'immuadmin user change-password immu'")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n")])])]),e("p",[e("strong",[a._v("Please note that the password for the immudb user is the master password")])]),a._v(" "),e("h3",{attrs:{id:"user-management"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#user-management"}},[a._v("#")]),a._v(" User management")]),a._v(" "),e("p",[a._v("To manage user, run "),e("code",[a._v("immuadmin user")]),a._v(" after you logged in "),e("code",[a._v("immuadmin login immudb")])]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("Please specify a user action.\nUsage: immuadmin user list"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("create"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("change-password"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("set-permission"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("deactivate "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("username"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("read"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("readwrite"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\nHelp "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" immuadmin user -h\n")])])]),e("h4",{attrs:{id:"list-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#list-user"}},[a._v("#")]),a._v(" List user")]),a._v(" "),e("p",[a._v("To get a list of all existing user including their permissions, run "),e("code",[a._v("immuadmin user list")])]),a._v(" "),e("h4",{attrs:{id:"add-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#add-user"}},[a._v("#")]),a._v(" Add user")]),a._v(" "),e("p",[a._v("Let's create a read-only user, called ro "),e("code",[a._v("immuadmin user create read")])]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("immuadmin user create ro "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("read")]),a._v("\nNOTE: password must have between "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("8")]),a._v(" and "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("32")]),a._v(" letters, digits and special characters of "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("which")]),a._v(" at least "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" uppercase letter, "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" digit and "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" special character.\nChoose a password "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" ro:\nConfirm password:\nUser ro created\n")])])]),e("p",[a._v("and a read-write user, called rw "),e("code",[a._v("immuadmin user create rw readwrite")])]),a._v(" "),e("h4",{attrs:{id:"change-user-permission"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-user-permission"}},[a._v("#")]),a._v(" Change user permission")]),a._v(" "),e("p",[a._v("To change the ro user permission from read-only to read-write, run "),e("code",[a._v("immuadmin user set-permission ro readwrite")]),a._v("\nCheck the change, using "),e("code",[a._v("immuadmin user list")])]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("immuadmin user list\nUsing config file: /etc/immudb/immudb.toml\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),a._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("s"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(":\n- -------- ---- -----------\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Username Role Permissions")]),a._v("\n- -------- ---- -----------\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" immu admin admin\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" ro client readwrite\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),a._v(" rw client readwrite\n- -------- ---- -----------\n")])])]),e("h4",{attrs:{id:"deactivate-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#deactivate-user"}},[a._v("#")]),a._v(" Deactivate user")]),a._v(" "),e("p",[a._v("To deactivate an existing user, run "),e("code",[a._v("immuadmin user deactivate ro")])]),a._v(" "),e("h4",{attrs:{id:"reactivate-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#reactivate-user"}},[a._v("#")]),a._v(" Reactivate user")]),a._v(" "),e("p",[a._v("To reactivate a deactivated user account, you can simply set user permission again. Run "),e("code",[a._v("immuadmin user set-permission ro readwrite")])]),a._v(" "),e("h2",{attrs:{id:"backup-and-restore"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#backup-and-restore"}},[a._v("#")]),a._v(" Backup and Restore")]),a._v(" "),e("p",[a._v("The simplest way to backup immudb is to use your operating system tools like tar or zip.\nYou can stop immudb and backup the data directory (default: "),e("code",[a._v("/var/lib/immudb")]),a._v(") and start immudb again.")]),a._v(" "),e("p",[a._v("The other alternative is using the "),e("code",[a._v("immuadmin backup")]),a._v(" command. Please keep in mind, that "),e("code",[a._v("immuadmin backup")]),a._v(" is stopping immudb as well and a manual start is required.")]),a._v(" "),e("h2",{attrs:{id:"multi-database"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-database"}},[a._v("#")]),a._v(" Multi-Database")]),a._v(" "),e("p",[a._v("Starting immudb version 0.7.0 we introduced a multi-database support. By default the first database is either called defaultdb or based on the environment variable "),e("code",[a._v("IMMUDB_DBNAME")]),a._v(".")]),a._v(" "),e("h3",{attrs:{id:"database-management"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#database-management"}},[a._v("#")]),a._v(" Database management")]),a._v(" "),e("p",[a._v("We recommend using "),e("code",[a._v("immuadmin")]),a._v(" to create additional users and databases.")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("immuadmin login immudb # Authentication is enabled by default, default user is immudb and password immudb; \n # first login asks for a password change and must contain upper and lower case letters, digits, punctuation mark or symbol\n\nimmuadmin database list # show all existing databases\nimmuadmin database create testdb # database testdb created\n")])])]),e("p",[a._v("immuclient can be used to test the setup or in scripts. Of course the API supports multi-db handling as well.")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("immuclient login immudb # login to immudb with user immudb\nimmuclient use testdb # use testdb for all following commands\nimmuclient safeset k0 v0 # set a key value in testdb\n")])])]),e("h3",{attrs:{id:"database-user-management"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#database-user-management"}},[a._v("#")]),a._v(" Database user management")]),a._v(" "),e("p",[a._v("You can create additional user using the immuadmin and grant database permissions automatically.")]),a._v(" "),e("p",[e("code",[a._v("immuadmin user help")]),a._v(" shows you all information about the command usage.")]),a._v(" "),e("p",[a._v("Permissions are: "),e("em",[a._v("read")]),a._v(", "),e("em",[a._v("readwrite")]),a._v(" and "),e("em",[a._v("admin")])]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("# create an user for the newly created database\nimmuadmin user create myuser readwrite testdb # create user myuser (password will be requested) and grant readwrite permissions to testdb\n\nimmuadmin user permission grant myuser admin testdb # change permissions to admin for user myuser on testdb\nimmuadmin user permission grant myuser readwrite testdb # change permissions to readwrite for user myuser on testdb\nimmuadmin user permission revoke myuser readwrite testdb # revoke permissions for user myuser on testdb\n")])])]),e("p",[a._v("To check all database permissions use "),e("code",[a._v("immuadmin user list")])]),a._v(" "),e("h3",{attrs:{id:"api-examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#api-examples"}},[a._v("#")]),a._v(" API examples")]),a._v(" "),e("p",[a._v("work in progress")]),a._v(" "),e("h2",{attrs:{id:"clients"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#clients"}},[a._v("#")]),a._v(" Clients")]),a._v(" "),e("p",[a._v("Starting version 0.6.0 of immudb, you can use immugw (REST API), immuclient (interactive) or GoLang as immudb database clients.\nDepending on the user settings and permissions, you can have read-only and read-write clients.")]),a._v(" "),e("p",[e("RouterLink",{attrs:{to:"/apis-and-interfaces.html"}},[a._v("APIs and interfaces")]),a._v(" - API reference and code examples")],1),a._v(" "),e("p",[a._v("More driver libraries are coming soon (Java, Node.js, Python, .net aso.)")]),a._v(" "),e("h2",{attrs:{id:"auditors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#auditors"}},[a._v("#")]),a._v(" Auditors")]),a._v(" "),e("p",[a._v("Auditors make sure that the data consistency is guaranteed inside immudb. They do a random key value verification and an interval-based Merkle-tree consistency check (5 minutes default). The immugw and the immuclient provide auditor functionality that runs as a daemon process. It is recommended to run immugw and immuclient on different machines than immudb, so any tampering on the immudb server is automatically detected.")]),a._v(" "),e("p",[a._v("The results of the auditors are provided by a Prometheus end point.")]),a._v(" "),e("h3",{attrs:{id:"immugw-auditor"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immugw-auditor"}},[a._v("#")]),a._v(" immugw auditor")]),a._v(" "),e("p",[a._v("You can find immugw in the following repository: "),e("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[a._v("immugw"),e("OutboundLink")],1)]),a._v(" "),e("p",[a._v("Start interactive:\n"),e("code",[a._v("immugw --audit")])]),a._v(" "),e("p",[a._v("Service configuration:\nTo enable auditor, you need to edit /etc/immudb/immugw.toml and add the following section:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("audit "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# false is default")]),a._v("\naudit-interval "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"5m"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# suffixes: "s", "m", "h", examples: 10s, 5m 1h')]),a._v("\naudit-username "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# when immudb authentication is enabled, use read-only user credentials here")]),a._v("\naudit-password "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# and the password")]),a._v("\n")])])]),e("p",[a._v("Restart the immugw service afterwards - "),e("code",[a._v("immuadmin service immugw restart")])]),a._v(" "),e("p",[e("strong",[a._v("immugw Port: 9476 - http://immugw-auditor:9476/metrics")])]),a._v(" "),e("p",[a._v("example output:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_curr_root_per_server Current root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_curr_root_per_server gauge")]),a._v("\nimmugw_audit_curr_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_prev_root_per_server Previous root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_prev_root_per_server gauge")]),a._v("\nimmugw_audit_prev_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_result_per_server gauge")]),a._v("\nimmugw_audit_result_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_run_at_per_server gauge")]),a._v("\nimmugw_audit_run_at_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(".590757033502689e+09\n")])])]),e("h3",{attrs:{id:"immuclient-auditor"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immuclient-auditor"}},[a._v("#")]),a._v(" immuclient auditor")]),a._v(" "),e("p",[a._v("Start interactive:\n"),e("code",[a._v("immuclient audit-mode")])]),a._v(" "),e("p",[a._v("Install service:\n"),e("code",[a._v("immuclient audit-mode install")])]),a._v(" "),e("p",[a._v("**immuclient Port: 9477 - http://immuclient-auditor:9477/metrics **")]),a._v(" "),e("p",[a._v("example output:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_curr_root_per_server Current root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_curr_root_per_server gauge")]),a._v("\nimmuclient_audit_curr_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_prev_root_per_server Previous root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_prev_root_per_server gauge")]),a._v("\nimmuclient_audit_prev_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" -1\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_result_per_server gauge")]),a._v("\nimmuclient_audit_result_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" -1\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_run_at_per_server gauge")]),a._v("\nimmuclient_audit_run_at_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(".5907565337454605e+09\n")])])]),e("h2",{attrs:{id:"architecture"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[a._v("#")]),a._v(" Architecture")]),a._v(" "),e("p",[a._v("The different components of immudb are communicating as follows:\n"),e("img",{attrs:{src:"https://github.com/codenotary/immudb-docs/raw/master/src/immudb/component-diagram.png",alt:"immudb component overview"}})]),a._v(" "),e("p",[a._v("Please check How it works, to learn more about the data structure and the Merkle-tree:")]),a._v(" "),e("p",[e("RouterLink",{attrs:{to:"/how-it-works.html"}},[a._v("How it works")])],1),a._v(" "),e("h2",{attrs:{id:"consistency-checker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#consistency-checker"}},[a._v("#")]),a._v(" Consistency checker")]),a._v(" "),e("h3",{attrs:{id:"how-do-you-run-it"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#how-do-you-run-it"}},[a._v("#")]),a._v(" How do you run it?")]),a._v(" "),e("p",[a._v("It is part of immudb, enabled by default and runs as a thread of immudb.\nThe routine can be disabled as follows:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("./immudb --consistency-check"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n")])])]),e("h3",{attrs:{id:"what-does-it-check"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-does-it-check"}},[a._v("#")]),a._v(" What does it check?")]),a._v(" "),e("p",[a._v("Consistency checker runs in a loop and continuously checks if the elements stored inside the immudb Merkle-tree are also physically stored correctly on the disk (the digest of the disk elements is the same digest stored in the related Merkle-tree leaf)")]),a._v(" "),e("h3",{attrs:{id:"how-does-it-run-its-check"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#how-does-it-run-its-check"}},[a._v("#")]),a._v(" How does it run its check?")]),a._v(" "),e("p",[e("strong",[a._v("Steps:")])]),a._v(" "),e("ol",[e("li",[a._v("reading the last root and last index stored in immudb")]),a._v(" "),e("li",[a._v("generate a range between 0 and the length of the Merkle-tree level 0 (total number of elements stored)")]),a._v(" "),e("li",[a._v("shuffles the range to get a random scan list (to be unpredictable)")]),a._v(" "),e("li",[a._v("check if every element is correctly inserted in the Merkle-tree and if the Merkle-tree leaves correctly represent the elements stored on hard disk")]),a._v(" "),e("li",[a._v("after completing the loop, the process sleeps ten seconds and restarts from scratch with a new root and index")]),a._v(" "),e("li",[a._v("in case an element does not pass the check correctly, immudb is immediately stopped and prints out a log message")])]),a._v(" "),e("p",[a._v("In order to produce a corrupted entry that is only on disk and not in the Merkle-tree, stop the immudb process and use the "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/tools/nimmu/nimmu.go",target:"_blank",rel:"noopener noreferrer"}},[a._v("nimmu"),e("OutboundLink")],1),a._v(" command:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("go build tools/nimmu/nimmu.go \n./nimmu rawset key1 tamper\n")])])]),e("p",[a._v("Then restart immudb and you should see the consistency check printing an error.")]),a._v(" "),e("h2",{attrs:{id:"license"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),e("p",[a._v("immudb is "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),e("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/34.56042ed8.js b/docs/assets/js/35.494f41d1.js similarity index 99% rename from docs/assets/js/34.56042ed8.js rename to docs/assets/js/35.494f41d1.js index 59dfe826e5..9b07ad6b3b 100644 --- a/docs/assets/js/34.56042ed8.js +++ b/docs/assets/js/35.494f41d1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{445:function(t,e,s){"use strict";s.r(e);var a=s(46),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"immuclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immuclient"}},[t._v("#")]),t._v(" immuclient")]),t._v(" "),s("p",[t._v("work in progress")]),t._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#latest-binaries"}},[t._v("Latest binaries")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#build"}},[t._v("Build")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#docker"}},[t._v("Docker")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#use-immuclient"}},[t._v("Use immuclient")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#examples"}},[t._v("Examples")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#auditor"}},[t._v("Auditor")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#license"}},[t._v("License")])])]),t._v(" "),s("h2",{attrs:{id:"latest-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[t._v("#")]),t._v(" Latest binaries")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the latest builds"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[t._v("#")]),t._v(" Build")]),t._v(" "),s("p",[t._v("clone the immudb repository locally")]),t._v(" "),s("p",[s("code",[t._v("git clone https://github.com/codenotary/immudb.git")])]),t._v(" "),s("h3",{attrs:{id:"linux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[t._v("#")]),t._v(" Linux")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static\n")])])]),s("h3",{attrs:{id:"macos"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[t._v("#")]),t._v(" MacOS")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static\n")])])]),s("h3",{attrs:{id:"windows"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[t._v("#")]),t._v(" Windows")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static\n")])])]),s("h2",{attrs:{id:"docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[t._v("#")]),t._v(" Docker")]),t._v(" "),s("h3",{attrs:{id:"build-your-own-docker-container-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[t._v("#")]),t._v(" build your own Docker container image")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker build -t myown/immuclient:latest -f Dockerfile.immuclient "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])]),s("h3",{attrs:{id:"run-immuclient-in-a-container"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immuclient-in-a-container"}},[t._v("#")]),t._v(" run immuclient in a container")]),t._v(" "),s("p",[t._v("As immuclient has a direct command and interactive, you can simply add the immuclient command after docker run.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker run -it --rm -name immuclient codenotary/immuclient:latest -a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("immudb host"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),s("p",[t._v("You can now use the interactive mode of immuclient and type commands until you type exit. Use help to get a command reference.")]),t._v(" "),s("h2",{attrs:{id:"use-immuclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-immuclient"}},[t._v("#")]),t._v(" Use immuclient")]),t._v(" "),s("p",[s("code",[t._v("immuclient help")]),t._v(" is a good starting point")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("CLI client "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\nEnvironment variables:\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_AUTH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immuclient "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n audit-mode Starts immuclient as daemon "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" auditor mode. Run "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immuclient audit-mode help'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details\n check-consistency Check consistency "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the specified index and "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("hash")]),t._v("\n count Count keys having the specified prefix\n current Return the last merkle tree root and index stored locally\n get Get item having the specified key\n getByIndex Return an element by index\n getRawBySafeIndex Return an element by index\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" Fetch "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key\n inclusion Check "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" specified index is included "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" the current tree\n iscan Iterate over all elements by insertion order\n login Login using the specified username and password\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("logout")]),t._v("\n rawsafeget Get item having the specified key, without parsing structured values\n rawsafeset Set a value "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key, without setup structured values\n reference Add new reference to an existing key\n safeget Get and verify item having the specified key\n safereference Add and verify new reference to an existing key\n safeset Add and verify new item having the specified key and value\n safezadd Add and verify new key with score to a new or existing sorted "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n scan Iterate over keys having the specified prefix\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" Add new item having the specified key and value\n status Ping to check "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" server connection is alive\n version Show the immuclient version\n zadd Add new key with score to a new or existing sorted "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n zscan Iterate over a sorted "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n\nFlags:\n --audit-password string immudb password used to login during audit\n --audit-username string immudb username used to login during audit\n --certificate string server certificate "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immuclient.toml"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --dir string Main directory "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" audit process tool to initialize "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immuclient\n -a, --immudb-address string immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --immudb-port int immudb port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -m, --mtls "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pkey string server private key path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-host string Launch "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" of the Prometheus server. "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-port string Launch port of the Prometheus server. "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"9477"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --roots-filepath string Filepath "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" storing root hashes after every successful audit loop. Default is tempdir of every OS. "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp/"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --tokenfile string authentication token "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),t._v(" or binary location"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is token"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"token"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --value-only returning only values "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" get operations\n\nUse "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuclient [command] --help"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),s("h2",{attrs:{id:"examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),s("h2",{attrs:{id:"auditor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#auditor"}},[t._v("#")]),t._v(" Auditor")]),t._v(" "),s("p",[t._v("Start interactive:\n"),s("code",[t._v("immuclient audit-mode")])]),t._v(" "),s("p",[t._v("Install service:\n"),s("code",[t._v("immuclient audit-mode install")])]),t._v(" "),s("p",[t._v("When installing audit-mode as a service, all parameters are written into the "),s("code",[t._v("immuclient")]),t._v(" configuration file:")]),t._v(" "),s("ul",[s("li",[t._v("Linux: "),s("code",[t._v("/etc/immudb/immuclient.toml")])]),t._v(" "),s("li",[t._v("Windows: "),s("code",[t._v("C:\\ProgramData\\ImmuClient\\config\\immuclient.toml")])])]),t._v(" "),s("p",[t._v("**immuclient Port: 9477 - http://immuclient-auditor:9477/metrics **")]),t._v(" "),s("p",[t._v("example output:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_curr_root_per_server Current root index used for the latest audit.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_curr_root_per_server gauge")]),t._v("\nimmuclient_audit_curr_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_prev_root_per_server Previous root index used for the latest audit.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_prev_root_per_server gauge")]),t._v("\nimmuclient_audit_prev_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" -1\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_result_per_server gauge")]),t._v("\nimmuclient_audit_result_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" -1\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_run_at_per_server gauge")]),t._v("\nimmuclient_audit_run_at_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(".5907565337454605e+09\n")])])]),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),s("p",[t._v("immuclient is "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),s("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{452:function(t,e,s){"use strict";s.r(e);var a=s(10),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"immuclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immuclient"}},[t._v("#")]),t._v(" immuclient")]),t._v(" "),s("p",[t._v("work in progress")]),t._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#latest-binaries"}},[t._v("Latest binaries")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#build"}},[t._v("Build")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#docker"}},[t._v("Docker")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#use-immuclient"}},[t._v("Use immuclient")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#examples"}},[t._v("Examples")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#auditor"}},[t._v("Auditor")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#license"}},[t._v("License")])])]),t._v(" "),s("h2",{attrs:{id:"latest-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[t._v("#")]),t._v(" Latest binaries")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the latest builds"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[t._v("#")]),t._v(" Build")]),t._v(" "),s("p",[t._v("clone the immudb repository locally")]),t._v(" "),s("p",[s("code",[t._v("git clone https://github.com/codenotary/immudb.git")])]),t._v(" "),s("h3",{attrs:{id:"linux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[t._v("#")]),t._v(" Linux")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static\n")])])]),s("h3",{attrs:{id:"macos"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[t._v("#")]),t._v(" MacOS")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static\n")])])]),s("h3",{attrs:{id:"windows"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[t._v("#")]),t._v(" Windows")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static\n")])])]),s("h2",{attrs:{id:"docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[t._v("#")]),t._v(" Docker")]),t._v(" "),s("h3",{attrs:{id:"build-your-own-docker-container-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[t._v("#")]),t._v(" build your own Docker container image")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker build -t myown/immuclient:latest -f Dockerfile.immuclient "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])]),s("h3",{attrs:{id:"run-immuclient-in-a-container"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immuclient-in-a-container"}},[t._v("#")]),t._v(" run immuclient in a container")]),t._v(" "),s("p",[t._v("As immuclient has a direct command and interactive, you can simply add the immuclient command after docker run.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker run -it --rm -name immuclient codenotary/immuclient:latest -a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("immudb host"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),s("p",[t._v("You can now use the interactive mode of immuclient and type commands until you type exit. Use help to get a command reference.")]),t._v(" "),s("h2",{attrs:{id:"use-immuclient"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-immuclient"}},[t._v("#")]),t._v(" Use immuclient")]),t._v(" "),s("p",[s("code",[t._v("immuclient help")]),t._v(" is a good starting point")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("CLI client "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immudb - the lightweight, high-speed immutable database "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" systems and applications.\nEnvironment variables:\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("127.0")]),t._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_AUTH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUCLIENT_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n\nUsage:\n immuclient "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("command"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nAvailable Commands:\n audit-mode Starts immuclient as daemon "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" auditor mode. Run "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immuclient audit-mode help'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" details\n check-consistency Check consistency "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the specified index and "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("hash")]),t._v("\n count Count keys having the specified prefix\n current Return the last merkle tree root and index stored locally\n get Get item having the specified key\n getByIndex Return an element by index\n getRawBySafeIndex Return an element by index\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Help about any "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" Fetch "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key\n inclusion Check "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" specified index is included "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" the current tree\n iscan Iterate over all elements by insertion order\n login Login using the specified username and password\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("logout")]),t._v("\n rawsafeget Get item having the specified key, without parsing structured values\n rawsafeset Set a value "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" the item having the specified key, without setup structured values\n reference Add new reference to an existing key\n safeget Get and verify item having the specified key\n safereference Add and verify new reference to an existing key\n safeset Add and verify new item having the specified key and value\n safezadd Add and verify new key with score to a new or existing sorted "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n scan Iterate over keys having the specified prefix\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" Add new item having the specified key and value\n status Ping to check "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" server connection is alive\n version Show the immuclient version\n zadd Add new key with score to a new or existing sorted "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n zscan Iterate over a sorted "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v("\n\nFlags:\n --audit-password string immudb password used to login during audit\n --audit-username string immudb username used to login during audit\n --certificate string server certificate "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --clientcas string clients certificates list. Aka certificate authority "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --config string config "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path are configs or "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" Default filename is immuclient.toml"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --dir string Main directory "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" audit process tool to initialize "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -h, --help "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" immuclient\n -a, --immudb-address string immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -p, --immudb-port int immudb port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n -m, --mtls "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mutual tls\n --pkey string server private key path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-host string Launch "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("host")]),t._v(" of the Prometheus server. "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --prometheus-port string Launch port of the Prometheus server. "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"9477"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --roots-filepath string Filepath "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" storing root hashes after every successful audit loop. Default is tempdir of every OS. "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tmp/"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --servername string used to verify the "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("hostname")]),t._v(" on the returned certificates "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --tokenfile string authentication token "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default path is "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$HOME")]),t._v(" or binary location"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" default filename is token"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"token"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n --value-only returning only values "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" get operations\n\nUse "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuclient [command] --help"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information about a command.\n")])])]),s("h2",{attrs:{id:"examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),s("h2",{attrs:{id:"auditor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#auditor"}},[t._v("#")]),t._v(" Auditor")]),t._v(" "),s("p",[t._v("Start interactive:\n"),s("code",[t._v("immuclient audit-mode")])]),t._v(" "),s("p",[t._v("Install service:\n"),s("code",[t._v("immuclient audit-mode install")])]),t._v(" "),s("p",[t._v("When installing audit-mode as a service, all parameters are written into the "),s("code",[t._v("immuclient")]),t._v(" configuration file:")]),t._v(" "),s("ul",[s("li",[t._v("Linux: "),s("code",[t._v("/etc/immudb/immuclient.toml")])]),t._v(" "),s("li",[t._v("Windows: "),s("code",[t._v("C:\\ProgramData\\ImmuClient\\config\\immuclient.toml")])])]),t._v(" "),s("p",[t._v("**immuclient Port: 9477 - http://immuclient-auditor:9477/metrics **")]),t._v(" "),s("p",[t._v("example output:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_curr_root_per_server Current root index used for the latest audit.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_curr_root_per_server gauge")]),t._v("\nimmuclient_audit_curr_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_prev_root_per_server Previous root index used for the latest audit.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_prev_root_per_server gauge")]),t._v("\nimmuclient_audit_prev_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" -1\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_result_per_server gauge")]),t._v("\nimmuclient_audit_result_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" -1\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# HELP immuclient_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# TYPE immuclient_audit_run_at_per_server gauge")]),t._v("\nimmuclient_audit_run_at_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:3322"')]),t._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(".5907565337454605e+09\n")])])]),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),s("p",[t._v("immuclient is "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),s("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/36.3051e090.js b/docs/assets/js/36.3051e090.js new file mode 100644 index 0000000000..d2aa3f974f --- /dev/null +++ b/docs/assets/js/36.3051e090.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{453:function(t,a,n){"use strict";n.r(a);var e=n(10),r=Object(e.a)({},(function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"immudb-concepts"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#immudb-concepts"}},[t._v("#")]),t._v(" Immudb concepts")]),t._v(" "),n("h2",{attrs:{id:"root-management"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#root-management"}},[t._v("#")]),t._v(" root management")]),t._v(" "),n("h2",{attrs:{id:"token-routing-and-authorizing"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#token-routing-and-authorizing"}},[t._v("#")]),t._v(" token(routing and authorizing)")])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/37.959fb349.js b/docs/assets/js/37.959fb349.js new file mode 100644 index 0000000000..7455d90165 --- /dev/null +++ b/docs/assets/js/37.959fb349.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{454:function(a,t,e){"use strict";e.r(t);var s=e(10),r=Object(s.a)({},(function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immudb"}},[a._v("#")]),a._v(" immudb")]),a._v(" "),e("h2",{attrs:{id:"contents"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[a._v("#")]),a._v(" Contents")]),a._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"#latest-binaries"}},[a._v("Latest binaries")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#build"}},[a._v("Build")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#docker"}},[a._v("Docker")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#run-immudb"}},[a._v("Run immudb")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#configuration"}},[a._v("Configuration")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#immuadmin"}},[a._v("immuadmin")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#immudb-service"}},[a._v("immudb service")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#authentication"}},[a._v("Authentication")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#backup-and-restore"}},[a._v("Backup and Restore")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#multi-database"}},[a._v("Multi-Database")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#clients"}},[a._v("Clients")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#auditors"}},[a._v("Auditors")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#architecture"}},[a._v("Architecture")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#consistency-checker"}},[a._v("Consistency Checker")])]),a._v(" "),e("li",[e("a",{attrs:{href:"#license"}},[a._v("License")])])]),a._v(" "),e("h2",{attrs:{id:"latest-binaries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[a._v("#")]),a._v(" Latest binaries")]),a._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[a._v("Get the latest builds"),e("OutboundLink")],1)]),a._v(" "),e("p",[a._v("If you run macOS you can also use Homebrew:")]),a._v(" "),e("p",[e("code",[a._v("brew install immudb")])]),a._v(" "),e("h2",{attrs:{id:"build"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[a._v("#")]),a._v(" Build")]),a._v(" "),e("p",[a._v("clone the immudb repository locally")]),a._v(" "),e("p",[a._v("'git clone https://github.com/codenotary/immudb.git'")]),a._v(" "),e("h3",{attrs:{id:"linux"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immudb-static\n")])])]),e("h3",{attrs:{id:"macos"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[a._v("#")]),a._v(" MacOS")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("darwin "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immudb-static\n")])])]),e("h3",{attrs:{id:"windows"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[a._v("#")]),a._v(" Windows")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immudb-static\n")])])]),e("h2",{attrs:{id:"docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[a._v("#")]),a._v(" Docker")]),a._v(" "),e("h3",{attrs:{id:"build-your-own-docker-container-image"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[a._v("#")]),a._v(" build your own Docker container image")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker build -t myown/immudb:latest -f Dockerfile "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v("\n")])])]),e("h3",{attrs:{id:"run-immugw-in-a-container"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw-in-a-container"}},[a._v("#")]),a._v(" run immugw in a container")]),a._v(" "),e("p",[a._v("Make sure to point to the immudb system using the environment variable IMMUGW_IMMUDB_ADDRESS")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("9497")]),a._v(":9497 --name immudb codenotary/immugw:latest\n")])])]),e("p",[a._v("or listen on all interfaces")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("9497")]),a._v(":9497 --name immudb -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.0.0.0"')]),a._v(" codenotary/immudb\n")])])]),e("p",[a._v("listen on all interfaces, persistent data")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("docker volume create immudb-data\ndocker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("9497")]),a._v(":9497 -v immudb-data:/var/lib/immudb --name immudb -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.0.0.0"')]),a._v(" codenotary/immudb\n")])])]),e("h2",{attrs:{id:"run-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb"}},[a._v("#")]),a._v(" Run immudb")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# run immudb in the foreground")]),a._v("\n./immudb\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# run immudb in the background")]),a._v("\n./immudb -d\n")])])]),e("h2",{attrs:{id:"configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[a._v("#")]),a._v(" Configuration")]),a._v(" "),e("p",[a._v("immudb can be configured using environment variables, flags or a config file.")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("immudb --help")]),a._v(" shows you all available flags and environment variables.")]),a._v(" "),e("li",[e("code",[a._v("/etc/immudb/immudb.toml")]),a._v(" is used as a default configuration file")])]),a._v(" "),e("h3",{attrs:{id:"environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[a._v("#")]),a._v(" Environment variables")]),a._v(" "),e("p",[a._v("The environment variables are the most popular way to configure Docker container:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DIR")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(".\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_NETWORK")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("tcp\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("0.0")]),a._v(".0.0\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_PORT")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DBNAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("immudb\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_PIDFILE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_LOGFILE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_MTLS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_AUTH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DETACHED")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_CONSISTENCY_CHECK")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_PKEY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/3_application/private/localhost.key.pem\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_CERTIFICATE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/3_application/certs/localhost.cert.pem\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_CLIENTCAS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_DEVMODE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_MAINTENANCE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUDB_ADMIN_PASSWORD")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("immudb\n\n")])])]),e("h2",{attrs:{id:"immuadmin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[a._v("#")]),a._v(" immuadmin")]),a._v(" "),e("p",[a._v("immuadmin can be used to install and manage the immudb service for Windows and Linux")]),a._v(" "),e("h3",{attrs:{id:"linux-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux-2"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),e("h3",{attrs:{id:"windows-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows-by-component"}},[a._v("#")]),a._v(" Windows (by component)")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),e("h2",{attrs:{id:"immudb-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immudb-service"}},[a._v("#")]),a._v(" immudb service")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# install immudb service")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# check current immudb service status")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" status\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# stop immudb service")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" stop\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# start immudb service")]),a._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("service")]),a._v(" start\n")])])]),e("p",[a._v("The linux service is using the following defaults:")]),a._v(" "),e("table",[e("thead",[e("tr",[e("th",[a._v("File or configuration")]),a._v(" "),e("th",[a._v("location")])])]),a._v(" "),e("tbody",[e("tr",[e("td",[a._v("all configuration files")]),a._v(" "),e("td",[a._v("/etc/immudb")])]),a._v(" "),e("tr",[e("td",[a._v("all data files")]),a._v(" "),e("td",[a._v("/var/lib/immudb")])]),a._v(" "),e("tr",[e("td",[a._v("pid file")]),a._v(" "),e("td",[a._v("/var/lib/immudb/immudb.pid")])]),a._v(" "),e("tr",[e("td",[a._v("log files")]),a._v(" "),e("td",[a._v("/var/log/immudb")])])])]),a._v(" "),e("h2",{attrs:{id:"authentication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#authentication"}},[a._v("#")]),a._v(" Authentication")]),a._v(" "),e("p",[a._v("immudb supports multiple user accounts that can have admin, read-only or read-write permission.\nAll permissions are stored in a different database and each gRPC call has an associated minimum permissions.")]),a._v(" "),e("p",[a._v("To enable authentication you need to change the configuration file "),e("code",[a._v("/etc/immudb/immudb.toml")])]),a._v(" "),e("p",[a._v("Example:")]),a._v(" "),e("div",{staticClass:"language-toml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-toml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("dir")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/var/lib/immudb"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("network")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tcp"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("address")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0.0.0.0"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("port")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("dbname")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"data"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("pidfile")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/var/lib/immudb/immudb.pid"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("logfile")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/var/log/immudb/immudb.log"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("mtls")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("detached")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("auth")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("pkey")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/immudb/mtls/3_application/private/localhost.key.pem"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("certificate")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/immudb/mtls/3_application/certs/localhost.cert.pem"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key property"}},[a._v("clientcas")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/immudb/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a._v("\n")])])]),e("p",[a._v("The important lines to change are "),e("code",[a._v("auth = true")]),a._v(" and "),e("code",[a._v('address = "0.0.0.0"')]),a._v(" to enable authentication and listening on all interfaces.")]),a._v(" "),e("p",[a._v("Then restart/start immudb.")]),a._v(" "),e("h3",{attrs:{id:"get-the-admin-credentials"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#get-the-admin-credentials"}},[a._v("#")]),a._v(" Get the admin credentials")]),a._v(" "),e("p",[a._v("You need to run "),e("code",[a._v("immuadmin")]),a._v(" locally on the same system as immudb (for security reasons) and connect to immudb:")]),a._v(" "),e("p",[e("code",[a._v("immuadmin login immudb")])]),a._v(" "),e("p",[a._v("You^ll receive the following message:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("Using config file: /etc/immudb/immudb.toml\n"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\nThis looks like the very first admin login attempt, hence the following credentials have been generated:\n---\nusername: immudb\npassword: immudb\n---\nIMPORTANT: This is the only "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("time")]),a._v(" they are shown, so "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" sure you remember them.\nNOTE: You have not been automatically logged in. To login please run the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'immuadmin login immu'")]),a._v(" with the above-mentioned password. You can change your password at any "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("time")]),a._v(" with one of your liking using the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'immuadmin user change-password immu'")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n")])])]),e("p",[e("strong",[a._v("Please note that the password for the immudb user is the master password")])]),a._v(" "),e("h3",{attrs:{id:"user-management"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#user-management"}},[a._v("#")]),a._v(" User management")]),a._v(" "),e("p",[a._v("To manage user, run "),e("code",[a._v("immuadmin user")]),a._v(" after you logged in "),e("code",[a._v("immuadmin login immudb")])]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("Please specify a user action.\nUsage: immuadmin user list"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("create"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("change-password"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("set-permission"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("deactivate "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("username"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("read"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v("readwrite"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\nHelp "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" immuadmin user -h\n")])])]),e("h4",{attrs:{id:"list-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#list-user"}},[a._v("#")]),a._v(" List user")]),a._v(" "),e("p",[a._v("To get a list of all existing user including their permissions, run "),e("code",[a._v("immuadmin user list")])]),a._v(" "),e("h4",{attrs:{id:"add-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#add-user"}},[a._v("#")]),a._v(" Add user")]),a._v(" "),e("p",[a._v("Let's create a read-only user, called ro "),e("code",[a._v("immuadmin user create read")])]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("immuadmin user create ro "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("read")]),a._v("\nNOTE: password must have between "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("8")]),a._v(" and "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("32")]),a._v(" letters, digits and special characters of "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("which")]),a._v(" at least "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" uppercase letter, "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" digit and "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" special character.\nChoose a password "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" ro:\nConfirm password:\nUser ro created\n")])])]),e("p",[a._v("and a read-write user, called rw "),e("code",[a._v("immuadmin user create rw readwrite")])]),a._v(" "),e("h4",{attrs:{id:"change-user-permission"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-user-permission"}},[a._v("#")]),a._v(" Change user permission")]),a._v(" "),e("p",[a._v("To change the ro user permission from read-only to read-write, run "),e("code",[a._v("immuadmin user set-permission ro readwrite")]),a._v("\nCheck the change, using "),e("code",[a._v("immuadmin user list")])]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("immuadmin user list\nUsing config file: /etc/immudb/immudb.toml\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),a._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("s"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(":\n- -------- ---- -----------\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Username Role Permissions")]),a._v("\n- -------- ---- -----------\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" immu admin admin\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v(" ro client readwrite\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),a._v(" rw client readwrite\n- -------- ---- -----------\n")])])]),e("h4",{attrs:{id:"deactivate-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#deactivate-user"}},[a._v("#")]),a._v(" Deactivate user")]),a._v(" "),e("p",[a._v("To deactivate an existing user, run "),e("code",[a._v("immuadmin user deactivate ro")])]),a._v(" "),e("h4",{attrs:{id:"reactivate-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#reactivate-user"}},[a._v("#")]),a._v(" Reactivate user")]),a._v(" "),e("p",[a._v("To reactivate a deactivated user account, you can simply set user permission again. Run "),e("code",[a._v("immuadmin user set-permission ro readwrite")])]),a._v(" "),e("h2",{attrs:{id:"backup-and-restore"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#backup-and-restore"}},[a._v("#")]),a._v(" Backup and Restore")]),a._v(" "),e("p",[a._v("The simplest way to backup immudb is to use your operating system tools like tar or zip.\nYou can stop immudb and backup the data directory (default: "),e("code",[a._v("/var/lib/immudb")]),a._v(") and start immudb again.")]),a._v(" "),e("p",[a._v("The other alternative is using the "),e("code",[a._v("immuadmin backup")]),a._v(" command. Please keep in mind, that "),e("code",[a._v("immuadmin backup")]),a._v(" is stopping immudb as well and a manual start is required.")]),a._v(" "),e("h2",{attrs:{id:"multi-database"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-database"}},[a._v("#")]),a._v(" Multi-Database")]),a._v(" "),e("p",[a._v("Starting immudb version 0.7.0 we introduced a multi-database support. By default the first database is either called defaultdb or based on the environment variable "),e("code",[a._v("IMMUDB_DBNAME")]),a._v(".")]),a._v(" "),e("h3",{attrs:{id:"database-management"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#database-management"}},[a._v("#")]),a._v(" Database management")]),a._v(" "),e("p",[a._v("We recommend using "),e("code",[a._v("immuadmin")]),a._v(" to create additional users and databases.")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("immuadmin login immudb # Authentication is enabled by default, default user is immudb and password immudb;\n # first login asks for a password change and must contain upper and lower case letters, digits, punctuation mark or symbol\n\nimmuadmin database list # show all existing databases\nimmuadmin database create testdb # database testdb created\n")])])]),e("p",[a._v("immuclient can be used to test the setup or in scripts. Of course the API supports multi-db handling as well.")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("immuclient login immudb # login to immudb with user immudb\nimmuclient use testdb # use testdb for all following commands\nimmuclient safeset k0 v0 # set a key value in testdb\n")])])]),e("h3",{attrs:{id:"database-user-management"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#database-user-management"}},[a._v("#")]),a._v(" Database user management")]),a._v(" "),e("p",[a._v("You can create additional user using the immuadmin and grant database permissions automatically.")]),a._v(" "),e("p",[e("code",[a._v("immuadmin user help")]),a._v(" shows you all information about the command usage.")]),a._v(" "),e("p",[a._v("Permissions are: "),e("em",[a._v("read")]),a._v(", "),e("em",[a._v("readwrite")]),a._v(" and "),e("em",[a._v("admin")])]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("# create an user for the newly created database\nimmuadmin user create myuser readwrite testdb # create user myuser (password will be requested) and grant readwrite permissions to testdb\n\nimmuadmin user permission grant myuser admin testdb # change permissions to admin for user myuser on testdb\nimmuadmin user permission grant myuser readwrite testdb # change permissions to readwrite for user myuser on testdb\nimmuadmin user permission revoke myuser readwrite testdb # revoke permissions for user myuser on testdb\n")])])]),e("p",[a._v("To check all database permissions use "),e("code",[a._v("immuadmin user list")])]),a._v(" "),e("h3",{attrs:{id:"api-examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#api-examples"}},[a._v("#")]),a._v(" API examples")]),a._v(" "),e("p",[a._v("work in progress")]),a._v(" "),e("h2",{attrs:{id:"clients"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#clients"}},[a._v("#")]),a._v(" Clients")]),a._v(" "),e("p",[a._v("Starting version 0.6.0 of immudb, you can use immugw (REST API), immuclient (interactive) or GoLang as immudb database clients.\nDepending on the user settings and permissions, you can have read-only and read-write clients.")]),a._v(" "),e("p",[e("RouterLink",{attrs:{to:"/apis-references.html"}},[a._v("APIs and interfaces")]),a._v(" - API reference and code examples")],1),a._v(" "),e("p",[a._v("More driver libraries are coming soon (Java, Node.js, Python, .net aso.)")]),a._v(" "),e("h2",{attrs:{id:"auditors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#auditors"}},[a._v("#")]),a._v(" Auditors")]),a._v(" "),e("p",[a._v("Auditors make sure that the data consistency is guaranteed inside immudb. They do a random key value verification and an interval-based Merkle-tree consistency check (5 minutes default). The immugw and the immuclient provide auditor functionality that runs as a daemon process. It is recommended to run immugw and immuclient on different machines than immudb, so any tampering on the immudb server is automatically detected.")]),a._v(" "),e("p",[a._v("The results of the auditors are provided by a Prometheus end point.")]),a._v(" "),e("h3",{attrs:{id:"immugw-auditor"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immugw-auditor"}},[a._v("#")]),a._v(" immugw auditor")]),a._v(" "),e("p",[a._v("You can find immugw in the following repository: "),e("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[a._v("immugw"),e("OutboundLink")],1)]),a._v(" "),e("p",[a._v("Start interactive:\n"),e("code",[a._v("immugw --audit")])]),a._v(" "),e("p",[a._v("Service configuration:\nTo enable auditor, you need to edit /etc/immudb/immugw.toml and add the following section:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("audit "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# false is default")]),a._v("\naudit-interval "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"5m"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# suffixes: "s", "m", "h", examples: 10s, 5m 1h')]),a._v("\naudit-username "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# when immudb authentication is enabled, use read-only user credentials here")]),a._v("\naudit-password "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# and the password")]),a._v("\n")])])]),e("p",[a._v("Restart the immugw service afterwards - "),e("code",[a._v("immuadmin service immugw restart")])]),a._v(" "),e("p",[e("strong",[a._v("immugw Port: 9476 - http://immugw-auditor:9476/metrics")])]),a._v(" "),e("p",[a._v("example output:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_curr_root_per_server Current root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_curr_root_per_server gauge")]),a._v("\nimmugw_audit_curr_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_prev_root_per_server Previous root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_prev_root_per_server gauge")]),a._v("\nimmugw_audit_prev_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_result_per_server gauge")]),a._v("\nimmugw_audit_result_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_run_at_per_server gauge")]),a._v("\nimmugw_audit_run_at_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(".590757033502689e+09\n")])])]),e("h3",{attrs:{id:"immuclient-auditor"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#immuclient-auditor"}},[a._v("#")]),a._v(" immuclient auditor")]),a._v(" "),e("p",[a._v("Start interactive:\n"),e("code",[a._v("immuclient audit-mode")])]),a._v(" "),e("p",[a._v("Install service:\n"),e("code",[a._v("immuclient audit-mode install")])]),a._v(" "),e("p",[a._v("**immuclient Port: 9477 - http://immuclient-auditor:9477/metrics **")]),a._v(" "),e("p",[a._v("example output:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_curr_root_per_server Current root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_curr_root_per_server gauge")]),a._v("\nimmuclient_audit_curr_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_prev_root_per_server Previous root index used for the latest audit.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_prev_root_per_server gauge")]),a._v("\nimmuclient_audit_prev_root_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" -1\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_result_per_server gauge")]),a._v("\nimmuclient_audit_result_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" -1\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immuclient_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immuclient_audit_run_at_per_server gauge")]),a._v("\nimmuclient_audit_run_at_per_server"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(".5907565337454605e+09\n")])])]),e("h2",{attrs:{id:"architecture"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[a._v("#")]),a._v(" Architecture")]),a._v(" "),e("p",[a._v("The different components of immudb are communicating as follows:\n"),e("img",{attrs:{src:"https://github.com/codenotary/immudb-docs/raw/master/src/immudb/component-diagram.png",alt:"immudb component overview"}})]),a._v(" "),e("p",[a._v("Please check How it works, to learn more about the data structure and the Merkle-tree:")]),a._v(" "),e("p",[e("RouterLink",{attrs:{to:"/how-it-works.html"}},[a._v("How it works")])],1),a._v(" "),e("h2",{attrs:{id:"consistency-checker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#consistency-checker"}},[a._v("#")]),a._v(" Consistency checker")]),a._v(" "),e("h3",{attrs:{id:"how-do-you-run-it"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#how-do-you-run-it"}},[a._v("#")]),a._v(" How do you run it?")]),a._v(" "),e("p",[a._v("It is part of immudb, enabled by default and runs as a thread of immudb.\nThe routine can be disabled as follows:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("./immudb --consistency-check"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n")])])]),e("h3",{attrs:{id:"what-does-it-check"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-does-it-check"}},[a._v("#")]),a._v(" What does it check?")]),a._v(" "),e("p",[a._v("Consistency checker runs in a loop and continuously checks if the elements stored inside the immudb Merkle-tree are also physically stored correctly on the disk (the digest of the disk elements is the same digest stored in the related Merkle-tree leaf)")]),a._v(" "),e("h3",{attrs:{id:"how-does-it-run-its-check"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#how-does-it-run-its-check"}},[a._v("#")]),a._v(" How does it run its check?")]),a._v(" "),e("p",[e("strong",[a._v("Steps:")])]),a._v(" "),e("ol",[e("li",[a._v("reading the last root and last index stored in immudb")]),a._v(" "),e("li",[a._v("generate a range between 0 and the length of the Merkle-tree level 0 (total number of elements stored)")]),a._v(" "),e("li",[a._v("shuffles the range to get a random scan list (to be unpredictable)")]),a._v(" "),e("li",[a._v("check if every element is correctly inserted in the Merkle-tree and if the Merkle-tree leaves correctly represent the elements stored on hard disk")]),a._v(" "),e("li",[a._v("after completing the loop, the process sleeps ten seconds and restarts from scratch with a new root and index")]),a._v(" "),e("li",[a._v("in case an element does not pass the check correctly, immudb is immediately stopped and prints out a log message")])]),a._v(" "),e("p",[a._v("In order to produce a corrupted entry that is only on disk and not in the Merkle-tree, stop the immudb process and use the "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/tools/nimmu/nimmu.go",target:"_blank",rel:"noopener noreferrer"}},[a._v("nimmu"),e("OutboundLink")],1),a._v(" command:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("go build tools/nimmu/nimmu.go\n./nimmu rawset key1 tamper\n")])])]),e("p",[a._v("Then restart immudb and you should see the consistency check printing an error.")]),a._v(" "),e("h2",{attrs:{id:"license"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),e("p",[a._v("immudb is "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),e("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/36.10a9a166.js b/docs/assets/js/38.fcbbb336.js similarity index 95% rename from docs/assets/js/36.10a9a166.js rename to docs/assets/js/38.fcbbb336.js index 326524904f..574bf4667e 100644 --- a/docs/assets/js/36.10a9a166.js +++ b/docs/assets/js/38.fcbbb336.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{447:function(e,t,s){"use strict";s.r(t);var a=s(46),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"consistency-checker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#consistency-checker"}},[e._v("#")]),e._v(" Consistency checker")]),e._v(" "),s("h2",{attrs:{id:"how-do-you-run-it"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#how-do-you-run-it"}},[e._v("#")]),e._v(" How do you run it?")]),e._v(" "),s("p",[e._v("It is part of immudb, enabled by default and runs as a thread of immudb.\nThe routine can be disabled as follows:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("./immudb --consistency-check"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("false\n")])])]),s("h2",{attrs:{id:"what-does-it-check"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-does-it-check"}},[e._v("#")]),e._v(" What does it check?")]),e._v(" "),s("p",[e._v("Consistency checker runs in a loop and continuously checks if the elements stored inside the immudb Merkle-tree are also physically stored correctly on the disk (the digest of the disk elements is the same digest stored in the related Merkle-tree leaf)")]),e._v(" "),s("h2",{attrs:{id:"how-does-it-run-its-check"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#how-does-it-run-its-check"}},[e._v("#")]),e._v(" How does it run its check?")]),e._v(" "),s("h3",{attrs:{id:"steps"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#steps"}},[e._v("#")]),e._v(" Steps:")]),e._v(" "),s("ol",[s("li",[e._v("reading the last root and last index stored in immudb")]),e._v(" "),s("li",[e._v("generate a range between 0 and the length of the Merkle-tree level 0 (total number of elements stored)")]),e._v(" "),s("li",[e._v("shuffles the range to get a random scan list (to be unpredictable)")]),e._v(" "),s("li",[e._v("check if every element is correctly inserted in the Merkle-tree and if the Merkle-tree leaves correctly represent the elements stored on hard disk")]),e._v(" "),s("li",[e._v("after completing the loop, the process sleeps ten seconds and restarts from scratch with a new root and index")]),e._v(" "),s("li",[e._v("in case an element does not pass the check correctly, immudb is immediately stopped and prints out a log message")])]),e._v(" "),s("p",[e._v("In order to produce a corrupted entry that is only on disk and not in the Merkle-tree, stop the immudb process and use the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/tools/nimmu/nimmu.go",target:"_blank",rel:"noopener noreferrer"}},[e._v("nimmu"),s("OutboundLink")],1),e._v(" command:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("go build tools/nimmu/nimmu.go \n./nimmu rawset key1 tamper\n")])])]),s("p",[e._v("Then restart immudb and should see the consistency check printing an error.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{455:function(e,t,s){"use strict";s.r(t);var a=s(10),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"consistency-checker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#consistency-checker"}},[e._v("#")]),e._v(" Consistency checker")]),e._v(" "),s("h2",{attrs:{id:"how-do-you-run-it"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#how-do-you-run-it"}},[e._v("#")]),e._v(" How do you run it?")]),e._v(" "),s("p",[e._v("It is part of immudb, enabled by default and runs as a thread of immudb.\nThe routine can be disabled as follows:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("./immudb --consistency-check"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("false\n")])])]),s("h2",{attrs:{id:"what-does-it-check"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-does-it-check"}},[e._v("#")]),e._v(" What does it check?")]),e._v(" "),s("p",[e._v("Consistency checker runs in a loop and continuously checks if the elements stored inside the immudb Merkle-tree are also physically stored correctly on the disk (the digest of the disk elements is the same digest stored in the related Merkle-tree leaf)")]),e._v(" "),s("h2",{attrs:{id:"how-does-it-run-its-check"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#how-does-it-run-its-check"}},[e._v("#")]),e._v(" How does it run its check?")]),e._v(" "),s("h3",{attrs:{id:"steps"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#steps"}},[e._v("#")]),e._v(" Steps:")]),e._v(" "),s("ol",[s("li",[e._v("reading the last root and last index stored in immudb")]),e._v(" "),s("li",[e._v("generate a range between 0 and the length of the Merkle-tree level 0 (total number of elements stored)")]),e._v(" "),s("li",[e._v("shuffles the range to get a random scan list (to be unpredictable)")]),e._v(" "),s("li",[e._v("check if every element is correctly inserted in the Merkle-tree and if the Merkle-tree leaves correctly represent the elements stored on hard disk")]),e._v(" "),s("li",[e._v("after completing the loop, the process sleeps ten seconds and restarts from scratch with a new root and index")]),e._v(" "),s("li",[e._v("in case an element does not pass the check correctly, immudb is immediately stopped and prints out a log message")])]),e._v(" "),s("p",[e._v("In order to produce a corrupted entry that is only on disk and not in the Merkle-tree, stop the immudb process and use the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/tools/nimmu/nimmu.go",target:"_blank",rel:"noopener noreferrer"}},[e._v("nimmu"),s("OutboundLink")],1),e._v(" command:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("go build tools/nimmu/nimmu.go \n./nimmu rawset key1 tamper\n")])])]),s("p",[e._v("Then restart immudb and should see the consistency check printing an error.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/37.59012bc1.js b/docs/assets/js/39.7ab29c9c.js similarity index 99% rename from docs/assets/js/37.59012bc1.js rename to docs/assets/js/39.7ab29c9c.js index a7f876f4cc..2bf71f26b2 100644 --- a/docs/assets/js/37.59012bc1.js +++ b/docs/assets/js/39.7ab29c9c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{448:function(t,s,n){"use strict";n.r(s);var a=n(46),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"golang-examples"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#golang-examples"}},[t._v("#")]),t._v(" Golang Examples")]),t._v(" "),n("h2",{attrs:{id:"contents"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),n("ul",[n("li",[n("a",{attrs:{href:"#import"}},[t._v("Import")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#start-immudb"}},[t._v("Start immudb")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#connect-a-new-client"}},[t._v("Connect a new client")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#write-transactions-without-verification"}},[t._v("Write transactions without verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#write-transactions-with-verification"}},[t._v("Write transactions with verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#structured-values"}},[t._v("Structured values")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#add-reference-to-existing-entries"}},[t._v("Add reference to existing entries")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#add-secondary-index"}},[t._v("Add secondary index")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#read-entries-without-verification"}},[t._v("Read entries without verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#read-entries-with-verification"}},[t._v("Read entries with verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#scan-entries"}},[t._v("Scan entries")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#count-entries"}},[t._v("Count entries")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#get-current-root"}},[t._v("Get current root")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#check-consistency"}},[t._v("Check consistency")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#check-inclusion"}},[t._v("Check inclusion")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#error-handling-and-cleanup"}},[t._v("Error handling and cleanup")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#hello-world-example"}},[t._v("Hello World Example")])])]),t._v(" "),n("p",[t._v("The following code snippets explain how to work with immudb from start to finish using Golang:")]),t._v(" "),n("h2",{attrs:{id:"import"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#import"}},[t._v("#")]),t._v(" Import")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" main\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"context"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fmt"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"os"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path/filepath"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"time"')]),t._v("\n\n\timmuapi "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/api"')]),t._v("\n\timmuschema "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/api/schema"')]),t._v("\n\timmuclient "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/client"')]),t._v("\n\timmulogger "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/logger"')]),t._v("\n\timmuserver "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/server"')]),t._v("\n\timmustore "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/store"')]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"start-immudb"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#start-immudb"}},[t._v("#")]),t._v(" Start immudb")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//===> 1. Start a new server")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1. Start immudb server ..."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" logfile "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuserver.log"')]),t._v("\n\tflogger"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" file"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v("\n\t\timmulogger"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewFileLogger")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuserver "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("defer")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" file"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Close")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tserverOptions "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuserver"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithLogfile")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tserver "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuserver"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultServer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("serverOptions"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithLogger")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("flogger"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("go")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Start")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("defer")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\terr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Stop")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NOTE: this cleanup must NOT be done in a real-world scenario!")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cleanup")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Dir"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// wait for server to start")]),t._v("\n\ttime"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Sleep")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" time"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Millisecond"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\n")])])]),n("h2",{attrs:{id:"connect-a-new-client"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#connect-a-new-client"}},[t._v("#")]),t._v(" Connect a new client")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2. Connect immudb client ..."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\tctx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("h2",{attrs:{id:"write-transactions-without-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-without-verification"}},[t._v("#")]),t._v(" Write transactions without verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Set")]),t._v("\n\tkey1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms. Noelia Jaskolski"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Visa 1514284849020756 09/21"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Set - add entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"write-transactions-with-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-with-verification"}},[t._v("#")]),t._v(" Write transactions with verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeSet")]),t._v("\n\tkey2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr. Archibald Beatty"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Visa 6679499384784022 11/23"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - add and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tkey3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms. Maci Schuppe"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 2232703813463070 12/19"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - add and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tvalue3 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 8069498678459876 10/22"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - update and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h3",{attrs:{id:"structured-values"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#structured-values"}},[t._v("#")]),t._v(" Structured values")]),t._v(" "),n("p",[t._v("Whenever we use golang sdk to set data in immudb we adding also other extra data to the request. Currently we store at the same level of the payload also the timestamp.\nThe server should not set the timestamp, to avoid relying on a not verifiable “single source of truth”. This is the reason why is the client in charge of that.\nFollowing the related structures:")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("message StructuredKeyValue "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tbytes key "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tContent value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nmessage Content "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v(" timestamp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tbytes payload "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("Though content is never unmarshal by the server, current definition are located in protobuffer schema and they can be easily extended.")]),t._v(" "),n("p",[t._v("In convert.go there is the logic used by the client:")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("Item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("ToSItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("StructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tc "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" Content"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\terr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" proto"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unmarshal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("StructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tKey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("h2",{attrs:{id:"add-reference-to-existing-entries"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-reference-to-existing-entries"}},[t._v("#")]),t._v(" Add reference to existing entries")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeReference")]),t._v("\n\tkey3Ref "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"reference:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Ref"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeReference - add and verify a reference key to an existing entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3Ref"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"add-secondary-index"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-secondary-index"}},[t._v("#")]),t._v(" Add secondary index")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeZAdd")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeZAdd - add and verify scores for existing keys to a new or existing sorted set:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tset1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SetOfClientsThatAreWomen"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey1Score "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeZAdd")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey3Score "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeZAdd")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"read-entries-without-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-without-verification"}},[t._v("#")]),t._v(" Read entries without verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"4. Read entries ..."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Get")]),t._v("\n\titem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Get - fetch entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"read-entries-with-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-with-verification"}},[t._v("#")]),t._v(" Read entries with verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeGet")]),t._v("\n\tverifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeGet - fetch and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tverifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Ref"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeGet - fetch and verify entry by reference key:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"scan-entries"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#scan-entries"}},[t._v("#")]),t._v(" Scan entries")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// zscan Iterate over a sorted set")]),t._v("\n\tstructuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZScan")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" ZScan - iterate over a sorted set:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" structuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Scan")]),t._v("\n\tprefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tstructuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Scan - iterate over keys having the specified prefix (e.g. \\"%s\\"):\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" structuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"count-entries"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#count-entries"}},[t._v("#")]),t._v(" Count entries")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Count")]),t._v("\n\tprefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\titemsCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Count - count keys having the specified prefix (e.g. \\"%s\\"):\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tcount:\t\t%d\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" itemsCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Count"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"get-current-root"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#get-current-root"}},[t._v("#")]),t._v(" Get current root")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Current tree root")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Current root - return the last merkle tree root and index stored locally"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tcurrentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("CurrentRoot")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"no root found: immudb is empty"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\thash:\t\t%x\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h3",{attrs:{id:"add-a-new-entry-after-getting-current-root"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-a-new-entry-after-getting-current-root"}},[t._v("#")]),t._v(" Add a new entry after getting current root")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Add a new entry after getting current root:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr. Valentin Padurean"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 2232703813463070 01/24"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - add and verify an entry after getting the current root:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"check-consistency"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#check-consistency"}},[t._v("#")]),t._v(" Check consistency")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Consistency - check consistency between the previous root and latest root:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Consistency")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tverified:\t%t\\n\tfirstRoot:\t%x at index: %d\\n\tsecondRoot:\t%x at index: %d\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FirstRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("First"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SecondRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Second"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"check-inclusion"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#check-inclusion"}},[t._v("#")]),t._v(" Check inclusion")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Inclusion - check if specified index is included in the current tree:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tstructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inclusion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" structuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" structuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tverified:\t%t\\n\thash:\t\t%x at index: %d\\n\troot:\t\t%x at index: %d\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("structuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Leaf"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("At"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\nDONE. ¯\\\\_(ツ)_/¯"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"error-handling-and-cleanup"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#error-handling-and-cleanup"}},[t._v("#")]),t._v(" Error handling and cleanup")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fprintln")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("os"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Stderr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cleanup")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dbDir "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logfile "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove db")]),t._v("\n\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("RemoveAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dbDir"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove log file")]),t._v("\n\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove root")]),t._v("\n\tfiles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" filepath"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Glob")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./\\\\.root*"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" f "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" files "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("f"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" message "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v("\n\tts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("uint64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("time"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Now")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" verified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isVerified "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" hash "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("switch")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" message"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tdig "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tdig "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\tverified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\tisVerified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tkey "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\tvalue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("StructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tkey "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\tvalue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Payload\n\t\tts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Timestamp\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tkey "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\tvalue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Time\n\t\tverified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\tisVerified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t\tme"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tdig "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" me"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("isVerified "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tkey:\t\t%s\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n\ttime:\t\t%s\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tvalue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\ttime"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("int64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tkey:\t\t%s\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n\ttime:\t\t%s\\n\tverified:\t%t\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tvalue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\ttime"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("int64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tverified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" score "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" message "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" verified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isVerified "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("switch")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" message"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tverified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\tisVerified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immustore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetKey")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Print")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("isVerified "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tset:\t\t%s\\n\tkey:\t\t%s\\n\tscore:\t\t%f\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tset"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tscore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\trkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\timmuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tset:\t\t%s\\n\tkey:\t\t%s\\n\tscore:\t\t%f\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n\tverified:\t%t\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tset"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tscore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\trkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\timmuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tverified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("h2",{attrs:{id:"hello-world-example"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#hello-world-example"}},[t._v("#")]),t._v(" Hello World example")]),t._v(" "),n("p",[t._v("You can find a Hello World example here: "),n("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/tree/master/go",target:"_blank",rel:"noopener noreferrer"}},[t._v("Go client example"),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"license"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),n("p",[t._v("immudb is "),n("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),n("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{456:function(t,s,n){"use strict";n.r(s);var a=n(10),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"golang-examples"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#golang-examples"}},[t._v("#")]),t._v(" Golang Examples")]),t._v(" "),n("h2",{attrs:{id:"contents"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),n("ul",[n("li",[n("a",{attrs:{href:"#import"}},[t._v("Import")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#start-immudb"}},[t._v("Start immudb")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#connect-a-new-client"}},[t._v("Connect a new client")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#write-transactions-without-verification"}},[t._v("Write transactions without verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#write-transactions-with-verification"}},[t._v("Write transactions with verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#structured-values"}},[t._v("Structured values")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#add-reference-to-existing-entries"}},[t._v("Add reference to existing entries")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#add-secondary-index"}},[t._v("Add secondary index")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#read-entries-without-verification"}},[t._v("Read entries without verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#read-entries-with-verification"}},[t._v("Read entries with verification")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#scan-entries"}},[t._v("Scan entries")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#count-entries"}},[t._v("Count entries")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#get-current-root"}},[t._v("Get current root")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#check-consistency"}},[t._v("Check consistency")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#check-inclusion"}},[t._v("Check inclusion")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#error-handling-and-cleanup"}},[t._v("Error handling and cleanup")])]),t._v(" "),n("li",[n("a",{attrs:{href:"#hello-world-example"}},[t._v("Hello World Example")])])]),t._v(" "),n("p",[t._v("The following code snippets explain how to work with immudb from start to finish using Golang:")]),t._v(" "),n("h2",{attrs:{id:"import"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#import"}},[t._v("#")]),t._v(" Import")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" main\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"context"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fmt"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"os"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path/filepath"')]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"time"')]),t._v("\n\n\timmuapi "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/api"')]),t._v("\n\timmuschema "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/api/schema"')]),t._v("\n\timmuclient "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/client"')]),t._v("\n\timmulogger "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/logger"')]),t._v("\n\timmuserver "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/server"')]),t._v("\n\timmustore "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/store"')]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"start-immudb"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#start-immudb"}},[t._v("#")]),t._v(" Start immudb")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//===> 1. Start a new server")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1. Start immudb server ..."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" logfile "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuserver.log"')]),t._v("\n\tflogger"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" file"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v("\n\t\timmulogger"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewFileLogger")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuserver "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("defer")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" file"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Close")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tserverOptions "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuserver"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithLogfile")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tserver "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuserver"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultServer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("serverOptions"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithLogger")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("flogger"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("go")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Start")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("defer")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\terr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Stop")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NOTE: this cleanup must NOT be done in a real-world scenario!")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cleanup")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Dir"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// wait for server to start")]),t._v("\n\ttime"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Sleep")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" time"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Millisecond"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\n")])])]),n("h2",{attrs:{id:"connect-a-new-client"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#connect-a-new-client"}},[t._v("#")]),t._v(" Connect a new client")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2. Connect immudb client ..."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\tctx "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("h2",{attrs:{id:"write-transactions-without-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-without-verification"}},[t._v("#")]),t._v(" Write transactions without verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Set")]),t._v("\n\tkey1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms. Noelia Jaskolski"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Visa 1514284849020756 09/21"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Set - add entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"write-transactions-with-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-with-verification"}},[t._v("#")]),t._v(" Write transactions with verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeSet")]),t._v("\n\tkey2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr. Archibald Beatty"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Visa 6679499384784022 11/23"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - add and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tkey3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms. Maci Schuppe"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 2232703813463070 12/19"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - add and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tvalue3 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 8069498678459876 10/22"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - update and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h3",{attrs:{id:"structured-values"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#structured-values"}},[t._v("#")]),t._v(" Structured values")]),t._v(" "),n("p",[t._v("Whenever we use golang sdk to set data in immudb we adding also other extra data to the request. Currently we store at the same level of the payload also the timestamp.\nThe server should not set the timestamp, to avoid relying on a not verifiable “single source of truth”. This is the reason why is the client in charge of that.\nFollowing the related structures:")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("message StructuredKeyValue "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tbytes key "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tContent value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nmessage Content "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v(" timestamp "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tbytes payload "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("Though content is never unmarshal by the server, current definition are located in protobuffer schema and they can be easily extended.")]),t._v(" "),n("p",[t._v("In convert.go there is the logic used by the client:")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("Item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("ToSItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("StructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tc "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" Content"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\terr "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" proto"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unmarshal")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("StructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tKey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tValue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("h2",{attrs:{id:"add-reference-to-existing-entries"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-reference-to-existing-entries"}},[t._v("#")]),t._v(" Add reference to existing entries")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeReference")]),t._v("\n\tkey3Ref "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"reference:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Ref"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeReference - add and verify a reference key to an existing entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3Ref"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"add-secondary-index"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-secondary-index"}},[t._v("#")]),t._v(" Add secondary index")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeZAdd")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeZAdd - add and verify scores for existing keys to a new or existing sorted set:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tset1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SetOfClientsThatAreWomen"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey1Score "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeZAdd")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey3Score "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeZAdd")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"read-entries-without-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-without-verification"}},[t._v("#")]),t._v(" Read entries without verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"4. Read entries ..."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Get")]),t._v("\n\titem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Get - fetch entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"read-entries-with-verification"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-with-verification"}},[t._v("#")]),t._v(" Read entries with verification")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeGet")]),t._v("\n\tverifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeGet - fetch and verify entry:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tverifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Ref"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeGet - fetch and verify entry by reference key:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"scan-entries"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#scan-entries"}},[t._v("#")]),t._v(" Scan entries")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// zscan Iterate over a sorted set")]),t._v("\n\tstructuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZScan")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" ZScan - iterate over a sorted set:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" structuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Scan")]),t._v("\n\tprefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tstructuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Scan - iterate over keys having the specified prefix (e.g. \\"%s\\"):\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" structuredItemList"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"count-entries"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#count-entries"}},[t._v("#")]),t._v(" Count entries")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Count")]),t._v("\n\tprefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\titemsCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Count - count keys having the specified prefix (e.g. \\"%s\\"):\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tcount:\t\t%d\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" itemsCount"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Count"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"get-current-root"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#get-current-root"}},[t._v("#")]),t._v(" Get current root")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Current tree root")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Current root - return the last merkle tree root and index stored locally"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tcurrentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("CurrentRoot")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"no root found: immudb is empty"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\thash:\t\t%x\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h3",{attrs:{id:"add-a-new-entry-after-getting-current-root"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-a-new-entry-after-getting-current-root"}},[t._v("#")]),t._v(" Add a new entry after getting current root")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Add a new entry after getting current root:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr. Valentin Padurean"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 2232703813463070 01/24"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" SafeSet - add and verify an entry after getting the current root:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"check-consistency"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#check-consistency"}},[t._v("#")]),t._v(" Check consistency")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Consistency - check consistency between the previous root and latest root:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Consistency")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tverified:\t%t\\n\tfirstRoot:\t%x at index: %d\\n\tsecondRoot:\t%x at index: %d\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FirstRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("First"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SecondRoot"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Second"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"check-inclusion"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#check-inclusion"}},[t._v("#")]),t._v(" Check inclusion")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" Inclusion - check if specified index is included in the current tree:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tstructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inclusion")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" structuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" structuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tverified:\t%t\\n\thash:\t\t%x at index: %d\\n\troot:\t\t%x at index: %d\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("structuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Leaf"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("At"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\nDONE. ¯\\\\_(ツ)_/¯"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),n("h2",{attrs:{id:"error-handling-and-cleanup"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#error-handling-and-cleanup"}},[t._v("#")]),t._v(" Error handling and cleanup")]),t._v(" "),n("div",{staticClass:"language-go extra-class"},[n("pre",{pre:!0,attrs:{class:"language-go"}},[n("code",[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fprintln")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("os"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Stderr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Exit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cleanup")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dbDir "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logfile "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove db")]),t._v("\n\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("RemoveAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dbDir"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove log file")]),t._v("\n\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("logfile"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove root")]),t._v("\n\tfiles"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" filepath"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Glob")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./\\\\.root*"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" f "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" files "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tos"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("f"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" message "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v("\n\tts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("uint64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("time"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Now")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" verified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isVerified "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" hash "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("switch")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" message"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tdig "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tdig "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\tverified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\tisVerified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tkey "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\tvalue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("StructuredItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tkey "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\tvalue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Payload\n\t\tts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Timestamp\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedItem"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tkey "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\tvalue "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Time\n\t\tverified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\tisVerified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t\tme"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tdig "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" me"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\thash "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("isVerified "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tkey:\t\t%s\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n\ttime:\t\t%s\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tvalue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\ttime"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("int64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tkey:\t\t%s\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n\ttime:\t\t%s\\n\tverified:\t%t\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tvalue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\thash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\ttime"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("int64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tverified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" score "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" message "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" index "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" verified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isVerified "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("switch")]),t._v(" m "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" message"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedIndex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\tindex "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\tverified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\tisVerified "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immustore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetKey")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" score"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Print")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("isVerified "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tset:\t\t%s\\n\tkey:\t\t%s\\n\tscore:\t\t%f\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tset"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tscore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\trkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\timmuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\t"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\tindex:\t\t%d\\n\tset:\t\t%s\\n\tkey:\t\t%s\\n\tscore:\t\t%f\\n\tvalue:\t\t%s\\n\thash:\t\t%x\\n\tverified:\t%t\\n"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tindex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tset"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tscore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\trkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\timmuapi"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tverified"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("h2",{attrs:{id:"hello-world-example"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#hello-world-example"}},[t._v("#")]),t._v(" Hello World example")]),t._v(" "),n("p",[t._v("You can find a Hello World example here: "),n("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/tree/master/go",target:"_blank",rel:"noopener noreferrer"}},[t._v("Go client example"),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"license"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),n("p",[t._v("immudb is "),n("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache v2.0 License"),n("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/38.6b6d24fb.js b/docs/assets/js/40.a4c52c27.js similarity index 99% rename from docs/assets/js/38.6b6d24fb.js rename to docs/assets/js/40.a4c52c27.js index edbd7442c8..9b07d854d5 100644 --- a/docs/assets/js/38.6b6d24fb.js +++ b/docs/assets/js/40.a4c52c27.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{449:function(t,e,v){"use strict";v.r(e);var a=v(46),_=Object(a.a)({},(function(){var t=this,e=t.$createElement,v=t._self._c||e;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"protocol-documentation"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#protocol-documentation"}},[t._v("#")]),t._v(" Protocol Documentation")]),t._v(" "),v("p",[v("a",{attrs:{name:"top"}})]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ImmuService"}})]),t._v(" "),v("h3",{attrs:{id:"immuservice"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#immuservice"}},[t._v("#")]),t._v(" ImmuService")]),t._v(" "),v("p",[t._v("Here a list of services exposed by immudb GRPc interface")]),t._v(" "),v("h4",{attrs:{id:"database-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database-services"}},[t._v("#")]),t._v(" Database services")]),t._v(" "),v("p",[t._v("immudb gRPC & REST service\nIMPORTANT: All get and safeget functions return base64-encoded keys and values, while all set and safeset functions expect base64-encoded inputs.")]),t._v(" "),v("h4",{attrs:{id:"database-operational-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database-operational-services"}},[t._v("#")]),t._v(" Database operational services")]),t._v(" "),v("p",[t._v("Following methods grant the basic immudb capabilities.\n"),v("code",[t._v("Set")]),t._v(" and "),v("code",[t._v("Get")]),t._v(" are the primitive.\n"),v("code",[t._v("SafeSet")]),t._v(" and "),v("code",[t._v("SafeGet")]),t._v(" counterparts do the primitive job but in addition they produce also inclusion and consistency proofs.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Set")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeSet")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeSetOptions"}},[t._v("SafeSetOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Get")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeGet")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeGetOptions"}},[t._v("SafeGetOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeItem"}},[t._v("SafeItem")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"insertion-order-index-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#insertion-order-index-services"}},[t._v("#")]),t._v(" Insertion order index services")]),t._v(" "),v("p",[t._v("Following methods rely on internal immudb insertion order index.\nInsertion order index is a special index appended on every leaf in the merkle tree. With this we benefit of the internal merkle tree natural insertion order index.\nWhen we retrieve elements by index a first lookup is made on the leaf at the same index to discover the element key, then a second lookup is realized to retrieve the value.\n"),v("code",[t._v("BySafeIndex")]),t._v(" counterpart produces also the inclusion and consistency proofs.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("ByIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("BySafeIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeIndexOptions"}},[t._v("SafeIndexOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeItem"}},[t._v("SafeItem")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"secondary-indexes-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#secondary-indexes-services"}},[t._v("#")]),t._v(" Secondary indexes services")]),t._v(" "),v("p",[t._v("Thanks to the lexicographical order in which internal data is structured we exposed following methods.\n"),v("code",[t._v("Reference")]),t._v(' is like a "tag" operation, it append a reference on a key. As a consequence when we retrieve that reference/key with a '),v("code",[t._v("Get")]),t._v(" or "),v("code",[t._v("SafeGet")]),t._v(" the value retrieved will be the original value associated to the original key.\n"),v("code",[t._v("SafeReference")]),t._v(" counterpart is the same but in addition it produces also the inclusion and consistency proofs.\n"),v("code",[t._v("ZAdd")]),t._v(" operates internally in a similar manner to "),v("code",[t._v("Reference")]),t._v(" but it introduces the concept of set. Inside a set we can organize collection of similar elements.\nWhen we add an elements to a collection we can specify his score using a float value.\nIn "),v("code",[t._v("ZAdd")]),t._v(" It's possible to specify also the index of the reference. In this way if there are multiple equals keys it will be inserted in the set the specified version.\nTo retrieve elements we can use "),v("code",[t._v("Zscan")]),t._v(" methods with return elements sorted by their score. If elements are inserted with same score they are returned in a lexicographical order.\n"),v("code",[t._v("SafeZAdd")]),t._v(" counterpart produces also the inclusion and consistency proofs.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Reference")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ReferenceOptions"}},[t._v("ReferenceOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeReference")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeReferenceOptions"}},[t._v("SafeReferenceOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ZAdd")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ZAddOptions"}},[t._v("ZAddOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ZScan")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ZScanOptions"}},[t._v("ZScanOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeZAdd")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeZAddOptions"}},[t._v("SafeZAddOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"tamperproofing-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#tamperproofing-services"}},[t._v("#")]),t._v(" Tamperproofing services")]),t._v(" "),v("p",[v("code",[t._v("Inclusion")]),t._v(" returns a path of nodes that can be used to prove that a node was correctly inserted inside the merkle tree.\n"),v("code",[t._v("Consistency")]),t._v(" returns a path of nodes that can be used to prove that a subtree contained in the main merkle tree is still the same.\n"),v("code",[t._v("CurrentRoot")]),t._v(" the last root of the tree.\nThe suggest approach to detect malicious action is to use an SDK and safe* family methods.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Inclusion")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.InclusionProof"}},[t._v("InclusionProof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Consistency")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ConsistencyProof"}},[t._v("ConsistencyProof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("CurrentRoot")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Root"}},[t._v("Root")])]),t._v(" "),v("td")])])]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("IScan")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.IScanOptions"}},[t._v("IScanOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Page"}},[t._v("Page")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Scan")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ScanOptions"}},[t._v("ScanOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Count")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyPrefix"}},[t._v("KeyPrefix")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemsCount"}},[t._v("ItemsCount")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("History")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"administrative-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#administrative-services"}},[t._v("#")]),t._v(" Administrative services")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Health")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.HealthResponse"}},[t._v("HealthResponse")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ListUsers")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.UserList"}},[t._v("UserList")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("CreateUser")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.CreateUserRequest"}},[t._v("CreateUserRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.UserResponse"}},[t._v("UserResponse")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ChangePassword")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ChangePasswordRequest"}},[t._v("ChangePasswordRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("UpdateAuthConfig")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.AuthConfig"}},[t._v("AuthConfig")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("UpdateMTLSConfig")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.MTLSConfig"}},[t._v("MTLSConfig")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("PrintTree")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Tree"}},[t._v("Tree")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Login")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.LoginRequest"}},[t._v("LoginRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.LoginResponse"}},[t._v("LoginResponse")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Logout")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Dump")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#pb.KVList"}},[t._v(".pb.KVList")]),t._v(" stream")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("CreateDatabase")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.CreateDatabaseReply"}},[t._v("CreateDatabaseReply")])]),t._v(" "),v("td",[t._v('todo(joe-dz): Enable restore when the feature is required again \trpc Restore(stream pb.KVList) returns (ItemsCount) { \t\toption (google.api.http) = { \t\t\tpost: "/v1/immurestproxy/restore" \t\t\tbody: "*" \t\t}; \t}')])]),t._v(" "),v("tr",[v("td",[t._v("UseDatabase")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.UseDatabaseReply"}},[t._v("UseDatabaseReply")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ChangePermission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ChangePermissionRequest"}},[t._v("ChangePermissionRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SetActiveUser")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SetActiveUserRequest"}},[t._v("SetActiveUserRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("DatabaseList")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.DatabaseListResponse"}},[t._v("DatabaseListResponse")])]),t._v(" "),v("td")])])]),t._v(" "),v("h2",{attrs:{id:"table-of-contents"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#table-of-contents"}},[t._v("#")]),t._v(" Table of Contents")]),t._v(" "),v("ul",[v("li",[v("p",[v("a",{attrs:{href:"#schema.proto"}},[t._v("schema.proto")])]),t._v(" "),v("ul",[v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.AuthConfig"}},[t._v("AuthConfig")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ChangePasswordRequest"}},[t._v("ChangePasswordRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ChangePermissionRequest"}},[t._v("ChangePermissionRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ConsistencyProof"}},[t._v("ConsistencyProof")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Content"}},[t._v("Content")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.CreateDatabaseReply"}},[t._v("CreateDatabaseReply")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.CreateUserRequest"}},[t._v("CreateUserRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.DatabaseListResponse"}},[t._v("DatabaseListResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.HealthResponse"}},[t._v("HealthResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.IScanOptions"}},[t._v("IScanOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.InclusionProof"}},[t._v("InclusionProof")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ItemsCount"}},[t._v("ItemsCount")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KVList"}},[t._v("KVList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KeyList"}},[t._v("KeyList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KeyPrefix"}},[t._v("KeyPrefix")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Layer"}},[t._v("Layer")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.LoginRequest"}},[t._v("LoginRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.LoginResponse"}},[t._v("LoginResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.MTLSConfig"}},[t._v("MTLSConfig")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Node"}},[t._v("Node")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Page"}},[t._v("Page")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Permission"}},[t._v("Permission")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ReferenceOptions"}},[t._v("ReferenceOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Root"}},[t._v("Root")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SKVList"}},[t._v("SKVList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SPage"}},[t._v("SPage")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeGetOptions"}},[t._v("SafeGetOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeIndexOptions"}},[t._v("SafeIndexOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeItem"}},[t._v("SafeItem")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeReferenceOptions"}},[t._v("SafeReferenceOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeSetOptions"}},[t._v("SafeSetOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeSetSVOptions"}},[t._v("SafeSetSVOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeStructuredItem"}},[t._v("SafeStructuredItem")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeZAddOptions"}},[t._v("SafeZAddOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ScanOptions"}},[t._v("ScanOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SetActiveUserRequest"}},[t._v("SetActiveUserRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.StructuredItemList"}},[t._v("StructuredItemList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.StructuredKeyValue"}},[t._v("StructuredKeyValue")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Tree"}},[t._v("Tree")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UseDatabaseReply"}},[t._v("UseDatabaseReply")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.User"}},[t._v("User")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UserList"}},[t._v("UserList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UserRequest"}},[t._v("UserRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UserResponse"}},[t._v("UserResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ZAddOptions"}},[t._v("ZAddOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ZScanOptions"}},[t._v("ZScanOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ErrorCodes"}},[t._v("ErrorCodes")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.PermissionAction"}},[t._v("PermissionAction")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ImmuService"}},[t._v("ImmuService")])])])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#scalar-value-types"}},[t._v("Scalar Value Types")])])])]),t._v(" "),v("p",[v("a",{attrs:{name:"schema.proto"}})]),v("p",{attrs:{align:"right"}},[v("a",{attrs:{href:"#top"}},[t._v("Top")])]),v("p"),t._v(" "),v("h2",{attrs:{id:"schema-proto"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#schema-proto"}},[t._v("#")]),t._v(" schema.proto")]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.AuthConfig"}})]),t._v(" "),v("h3",{attrs:{id:"authconfig"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#authconfig"}},[t._v("#")]),t._v(" AuthConfig")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("kind")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ChangePasswordRequest"}})]),t._v(" "),v("h3",{attrs:{id:"changepasswordrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#changepasswordrequest"}},[t._v("#")]),t._v(" ChangePasswordRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("oldPassword")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("newPassword")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ChangePermissionRequest"}})]),t._v(" "),v("h3",{attrs:{id:"changepermissionrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#changepermissionrequest"}},[t._v("#")]),t._v(" ChangePermissionRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("action")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.PermissionAction"}},[t._v("PermissionAction")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("database")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ConsistencyProof"}})]),t._v(" "),v("h3",{attrs:{id:"consistencyproof"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#consistencyproof"}},[t._v("#")]),t._v(" ConsistencyProof")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("first")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("second")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("firstRoot")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("secondRoot")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("path")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Content"}})]),t._v(" "),v("h3",{attrs:{id:"content"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#content"}},[t._v("#")]),t._v(" Content")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("timestamp")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("payload")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.CreateDatabaseReply"}})]),t._v(" "),v("h3",{attrs:{id:"createdatabasereply"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#createdatabasereply"}},[t._v("#")]),t._v(" CreateDatabaseReply")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("error")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.CreateUserRequest"}})]),t._v(" "),v("h3",{attrs:{id:"createuserrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#createuserrequest"}},[t._v("#")]),t._v(" CreateUserRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("password")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("database")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Database"}})]),t._v(" "),v("h3",{attrs:{id:"database"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database"}},[t._v("#")]),t._v(" Database")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("databasename")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.DatabaseListResponse"}})]),t._v(" "),v("h3",{attrs:{id:"databaselistresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#databaselistresponse"}},[t._v("#")]),t._v(" DatabaseListResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("databases")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Error"}})]),t._v(" "),v("h3",{attrs:{id:"error"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#error"}},[t._v("#")]),t._v(" Error")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("errorcode")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ErrorCodes"}},[t._v("ErrorCodes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("errormessage")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.HealthResponse"}})]),t._v(" "),v("h3",{attrs:{id:"healthresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#healthresponse"}},[t._v("#")]),t._v(" HealthResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("version")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.IScanOptions"}})]),t._v(" "),v("h3",{attrs:{id:"iscanoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#iscanoptions"}},[t._v("#")]),t._v(" IScanOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("pageSize")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("pageNumber")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.InclusionProof"}})]),t._v(" "),v("h3",{attrs:{id:"inclusionproof"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#inclusionproof"}},[t._v("#")]),t._v(" InclusionProof")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("at")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("leaf")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("path")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Index"}})]),t._v(" "),v("h3",{attrs:{id:"index"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#index"}},[t._v("#")]),t._v(" Index")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Item"}})]),t._v(" "),v("h3",{attrs:{id:"item"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#item"}},[t._v("#")]),t._v(" Item")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ItemList"}})]),t._v(" "),v("h3",{attrs:{id:"itemlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#itemlist"}},[t._v("#")]),t._v(" ItemList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ItemsCount"}})]),t._v(" "),v("h3",{attrs:{id:"itemscount"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#itemscount"}},[t._v("#")]),t._v(" ItemsCount")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("count")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KVList"}})]),t._v(" "),v("h3",{attrs:{id:"kvlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#kvlist"}},[t._v("#")]),t._v(" KVList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("KVs")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Key"}})]),t._v(" "),v("h3",{attrs:{id:"key"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#key"}},[t._v("#")]),t._v(" Key")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KeyList"}})]),t._v(" "),v("h3",{attrs:{id:"keylist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#keylist"}},[t._v("#")]),t._v(" KeyList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("keys")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KeyPrefix"}})]),t._v(" "),v("h3",{attrs:{id:"keyprefix"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#keyprefix"}},[t._v("#")]),t._v(" KeyPrefix")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("prefix")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KeyValue"}})]),t._v(" "),v("h3",{attrs:{id:"keyvalue"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#keyvalue"}},[t._v("#")]),t._v(" KeyValue")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Layer"}})]),t._v(" "),v("h3",{attrs:{id:"layer"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#layer"}},[t._v("#")]),t._v(" Layer")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("l")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Node"}},[t._v("Node")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.LoginRequest"}})]),t._v(" "),v("h3",{attrs:{id:"loginrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#loginrequest"}},[t._v("#")]),t._v(" LoginRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("password")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.LoginResponse"}})]),t._v(" "),v("h3",{attrs:{id:"loginresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#loginresponse"}},[t._v("#")]),t._v(" LoginResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("token")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("warning")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.MTLSConfig"}})]),t._v(" "),v("h3",{attrs:{id:"mtlsconfig"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#mtlsconfig"}},[t._v("#")]),t._v(" MTLSConfig")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("enabled")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Node"}})]),t._v(" "),v("h3",{attrs:{id:"node"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#node"}},[t._v("#")]),t._v(" Node")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("i")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("h")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("refk")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ref")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("cache")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Page"}})]),t._v(" "),v("h3",{attrs:{id:"page"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#page"}},[t._v("#")]),t._v(" Page")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("more")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Permission"}})]),t._v(" "),v("h3",{attrs:{id:"permission"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#permission"}},[t._v("#")]),t._v(" Permission")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("database")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Proof"}})]),t._v(" "),v("h3",{attrs:{id:"proof"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#proof"}},[t._v("#")]),t._v(" Proof")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("leaf")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("at")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("inclusionPath")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("consistencyPath")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ReferenceOptions"}})]),t._v(" "),v("h3",{attrs:{id:"referenceoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#referenceoptions"}},[t._v("#")]),t._v(" ReferenceOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("reference")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Root"}})]),t._v(" "),v("h3",{attrs:{id:"root"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#root"}},[t._v("#")]),t._v(" Root")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SKVList"}})]),t._v(" "),v("h3",{attrs:{id:"skvlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#skvlist"}},[t._v("#")]),t._v(" SKVList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("SKVs")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredKeyValue"}},[t._v("StructuredKeyValue")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SPage"}})]),t._v(" "),v("h3",{attrs:{id:"spage"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#spage"}},[t._v("#")]),t._v(" SPage")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("pageNum")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("more")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeGetOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safegetoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safegetoptions"}},[t._v("#")]),t._v(" SafeGetOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeIndexOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safeindexoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safeindexoptions"}},[t._v("#")]),t._v(" SafeIndexOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeItem"}})]),t._v(" "),v("h3",{attrs:{id:"safeitem"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safeitem"}},[t._v("#")]),t._v(" SafeItem")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("item")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("proof")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeReferenceOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safereferenceoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safereferenceoptions"}},[t._v("#")]),t._v(" SafeReferenceOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("ro")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ReferenceOptions"}},[t._v("ReferenceOptions")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeSetOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safesetoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safesetoptions"}},[t._v("#")]),t._v(" SafeSetOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("kv")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeSetSVOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safesetsvoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safesetsvoptions"}},[t._v("#")]),t._v(" SafeSetSVOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("skv")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredKeyValue"}},[t._v("StructuredKeyValue")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeStructuredItem"}})]),t._v(" "),v("h3",{attrs:{id:"safestructureditem"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safestructureditem"}},[t._v("#")]),t._v(" SafeStructuredItem")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("item")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("proof")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeZAddOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safezaddoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safezaddoptions"}},[t._v("#")]),t._v(" SafeZAddOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("zopts")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ZAddOptions"}},[t._v("ZAddOptions")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ScanOptions"}})]),t._v(" "),v("h3",{attrs:{id:"scanoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#scanoptions"}},[t._v("#")]),t._v(" ScanOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("prefix")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("offset")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("limit")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("reverse")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("deep")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SetActiveUserRequest"}})]),t._v(" "),v("h3",{attrs:{id:"setactiveuserrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#setactiveuserrequest"}},[t._v("#")]),t._v(" SetActiveUserRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("active")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.StructuredItem"}})]),t._v(" "),v("h3",{attrs:{id:"structureditem"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#structureditem"}},[t._v("#")]),t._v(" StructuredItem")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Content"}},[t._v("Content")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.StructuredItemList"}})]),t._v(" "),v("h3",{attrs:{id:"structureditemlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#structureditemlist"}},[t._v("#")]),t._v(" StructuredItemList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.StructuredKeyValue"}})]),t._v(" "),v("h3",{attrs:{id:"structuredkeyvalue"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#structuredkeyvalue"}},[t._v("#")]),t._v(" StructuredKeyValue")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Content"}},[t._v("Content")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Tree"}})]),t._v(" "),v("h3",{attrs:{id:"tree"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#tree"}},[t._v("#")]),t._v(" Tree")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("t")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Layer"}},[t._v("Layer")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UseDatabaseReply"}})]),t._v(" "),v("h3",{attrs:{id:"usedatabasereply"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#usedatabasereply"}},[t._v("#")]),t._v(" UseDatabaseReply")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("error")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("token")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.User"}})]),t._v(" "),v("h3",{attrs:{id:"user"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#user"}},[t._v("#")]),t._v(" User")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permissions")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Permission"}},[t._v("Permission")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("createdby")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("createdat")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("active")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UserList"}})]),t._v(" "),v("h3",{attrs:{id:"userlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#userlist"}},[t._v("#")]),t._v(" UserList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("users")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.User"}},[t._v("User")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UserRequest"}})]),t._v(" "),v("h3",{attrs:{id:"userrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#userrequest"}},[t._v("#")]),t._v(" UserRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UserResponse"}})]),t._v(" "),v("h3",{attrs:{id:"userresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#userresponse"}},[t._v("#")]),t._v(" UserResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ZAddOptions"}})]),t._v(" "),v("h3",{attrs:{id:"zaddoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#zaddoptions"}},[t._v("#")]),t._v(" ZAddOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("set")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("score")]),t._v(" "),v("td",[v("a",{attrs:{href:"#double"}},[t._v("double")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ZScanOptions"}})]),t._v(" "),v("h3",{attrs:{id:"zscanoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#zscanoptions"}},[t._v("#")]),t._v(" ZScanOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("set")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("offset")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("limit")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("reverse")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ErrorCodes"}})]),t._v(" "),v("h3",{attrs:{id:"errorcodes"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#errorcodes"}},[t._v("#")]),t._v(" ErrorCodes")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Name")]),t._v(" "),v("th",[t._v("Number")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Ok")]),t._v(" "),v("td",[t._v("0")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_SELECTING_DATABASE")]),t._v(" "),v("td",[t._v("1")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_NO_PERMISSION_FOR_THIS_DATABASE")]),t._v(" "),v("td",[t._v("2")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_USER_HAS_NOT_LOGGED_IN")]),t._v(" "),v("td",[t._v("3")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_DB_DOES_NOT_EXIST")]),t._v(" "),v("td",[t._v("4")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.PermissionAction"}})]),t._v(" "),v("h3",{attrs:{id:"permissionaction"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#permissionaction"}},[t._v("#")]),t._v(" PermissionAction")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Name")]),t._v(" "),v("th",[t._v("Number")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("GRANT")]),t._v(" "),v("td",[t._v("0")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("REVOKE")]),t._v(" "),v("td",[t._v("1")]),t._v(" "),v("td")])])]),t._v(" "),v("h2",{attrs:{id:"scalar-value-types"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#scalar-value-types"}},[t._v("#")]),t._v(" Scalar Value Types")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v(".proto Type")]),t._v(" "),v("th",[t._v("Notes")]),t._v(" "),v("th",[t._v("C++")]),t._v(" "),v("th",[t._v("Java")]),t._v(" "),v("th",[t._v("Python")]),t._v(" "),v("th",[t._v("Go")]),t._v(" "),v("th",[t._v("C#")]),t._v(" "),v("th",[t._v("PHP")]),t._v(" "),v("th",[t._v("Ruby")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[v("a",{attrs:{name:"double"}}),t._v(" double")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("double")]),t._v(" "),v("td",[t._v("double")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float64")]),t._v(" "),v("td",[t._v("double")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("Float")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"float"}}),t._v(" float")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float32")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("Float")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"int32"}}),t._v(" int32")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"int64"}}),t._v(" int64")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"uint32"}}),t._v(" uint32")]),t._v(" "),v("td",[t._v("Uses variable-length encoding.")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("uint")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"uint64"}}),t._v(" uint64")]),t._v(" "),v("td",[t._v("Uses variable-length encoding.")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("ulong")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sint32"}}),t._v(" sint32")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sint64"}}),t._v(" sint64")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"fixed32"}}),t._v(" fixed32")]),t._v(" "),v("td",[t._v("Always four bytes. More efficient than uint32 if values are often greater than 2^28.")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("uint")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"fixed64"}}),t._v(" fixed64")]),t._v(" "),v("td",[t._v("Always eight bytes. More efficient than uint64 if values are often greater than 2^56.")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("ulong")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sfixed32"}}),t._v(" sfixed32")]),t._v(" "),v("td",[t._v("Always four bytes.")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sfixed64"}}),t._v(" sfixed64")]),t._v(" "),v("td",[t._v("Always eight bytes.")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"bool"}}),t._v(" bool")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("bool")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td",[t._v("bool")]),t._v(" "),v("td",[t._v("bool")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td",[t._v("TrueClass/FalseClass")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"string"}}),t._v(" string")]),t._v(" "),v("td",[t._v("A string must always contain UTF-8 encoded or 7-bit ASCII text.")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("str/unicode")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("String (UTF-8)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"bytes"}}),t._v(" bytes")]),t._v(" "),v("td",[t._v("May contain any arbitrary sequence of bytes.")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("ByteString")]),t._v(" "),v("td",[t._v("str")]),t._v(" "),v("td",[t._v("[]byte")]),t._v(" "),v("td",[t._v("ByteString")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("String (ASCII-8BIT)")])])])])])}),[],!1,null,null,null);e.default=_.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{461:function(t,e,v){"use strict";v.r(e);var a=v(10),_=Object(a.a)({},(function(){var t=this,e=t.$createElement,v=t._self._c||e;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"protocol-documentation"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#protocol-documentation"}},[t._v("#")]),t._v(" Protocol Documentation")]),t._v(" "),v("p",[v("a",{attrs:{name:"top"}})]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ImmuService"}})]),t._v(" "),v("h3",{attrs:{id:"immuservice"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#immuservice"}},[t._v("#")]),t._v(" ImmuService")]),t._v(" "),v("p",[t._v("Here a list of services exposed by immudb GRPc interface")]),t._v(" "),v("h4",{attrs:{id:"database-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database-services"}},[t._v("#")]),t._v(" Database services")]),t._v(" "),v("p",[t._v("immudb gRPC & REST service\nIMPORTANT: All get and safeget functions return base64-encoded keys and values, while all set and safeset functions expect base64-encoded inputs.")]),t._v(" "),v("h4",{attrs:{id:"database-operational-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database-operational-services"}},[t._v("#")]),t._v(" Database operational services")]),t._v(" "),v("p",[t._v("Following methods grant the basic immudb capabilities.\n"),v("code",[t._v("Set")]),t._v(" and "),v("code",[t._v("Get")]),t._v(" are the primitive.\n"),v("code",[t._v("SafeSet")]),t._v(" and "),v("code",[t._v("SafeGet")]),t._v(" counterparts do the primitive job but in addition they produce also inclusion and consistency proofs.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Set")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeSet")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeSetOptions"}},[t._v("SafeSetOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Get")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeGet")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeGetOptions"}},[t._v("SafeGetOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeItem"}},[t._v("SafeItem")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"insertion-order-index-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#insertion-order-index-services"}},[t._v("#")]),t._v(" Insertion order index services")]),t._v(" "),v("p",[t._v("Following methods rely on internal immudb insertion order index.\nInsertion order index is a special index appended on every leaf in the merkle tree. With this we benefit of the internal merkle tree natural insertion order index.\nWhen we retrieve elements by index a first lookup is made on the leaf at the same index to discover the element key, then a second lookup is realized to retrieve the value.\n"),v("code",[t._v("BySafeIndex")]),t._v(" counterpart produces also the inclusion and consistency proofs.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("ByIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("BySafeIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeIndexOptions"}},[t._v("SafeIndexOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeItem"}},[t._v("SafeItem")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"secondary-indexes-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#secondary-indexes-services"}},[t._v("#")]),t._v(" Secondary indexes services")]),t._v(" "),v("p",[t._v("Thanks to the lexicographical order in which internal data is structured we exposed following methods.\n"),v("code",[t._v("Reference")]),t._v(' is like a "tag" operation, it append a reference on a key. As a consequence when we retrieve that reference/key with a '),v("code",[t._v("Get")]),t._v(" or "),v("code",[t._v("SafeGet")]),t._v(" the value retrieved will be the original value associated to the original key.\n"),v("code",[t._v("SafeReference")]),t._v(" counterpart is the same but in addition it produces also the inclusion and consistency proofs.\n"),v("code",[t._v("ZAdd")]),t._v(" operates internally in a similar manner to "),v("code",[t._v("Reference")]),t._v(" but it introduces the concept of set. Inside a set we can organize collection of similar elements.\nWhen we add an elements to a collection we can specify his score using a float value.\nIn "),v("code",[t._v("ZAdd")]),t._v(" It's possible to specify also the index of the reference. In this way if there are multiple equals keys it will be inserted in the set the specified version.\nTo retrieve elements we can use "),v("code",[t._v("Zscan")]),t._v(" methods with return elements sorted by their score. If elements are inserted with same score they are returned in a lexicographical order.\n"),v("code",[t._v("SafeZAdd")]),t._v(" counterpart produces also the inclusion and consistency proofs.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Reference")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ReferenceOptions"}},[t._v("ReferenceOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeReference")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeReferenceOptions"}},[t._v("SafeReferenceOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ZAdd")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ZAddOptions"}},[t._v("ZAddOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ZScan")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ZScanOptions"}},[t._v("ZScanOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SafeZAdd")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SafeZAddOptions"}},[t._v("SafeZAddOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"tamperproofing-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#tamperproofing-services"}},[t._v("#")]),t._v(" Tamperproofing services")]),t._v(" "),v("p",[v("code",[t._v("Inclusion")]),t._v(" returns a path of nodes that can be used to prove that a node was correctly inserted inside the merkle tree.\n"),v("code",[t._v("Consistency")]),t._v(" returns a path of nodes that can be used to prove that a subtree contained in the main merkle tree is still the same.\n"),v("code",[t._v("CurrentRoot")]),t._v(" the last root of the tree.\nThe suggest approach to detect malicious action is to use an SDK and safe* family methods.")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Inclusion")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.InclusionProof"}},[t._v("InclusionProof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Consistency")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ConsistencyProof"}},[t._v("ConsistencyProof")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("CurrentRoot")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Root"}},[t._v("Root")])]),t._v(" "),v("td")])])]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("IScan")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.IScanOptions"}},[t._v("IScanOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Page"}},[t._v("Page")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Scan")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ScanOptions"}},[t._v("ScanOptions")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Count")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyPrefix"}},[t._v("KeyPrefix")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemsCount"}},[t._v("ItemsCount")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("History")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])]),t._v(" "),v("td")])])]),t._v(" "),v("h4",{attrs:{id:"administrative-services"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#administrative-services"}},[t._v("#")]),t._v(" Administrative services")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Method Name")]),t._v(" "),v("th",[t._v("Request Type")]),t._v(" "),v("th",[t._v("Response Type")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Health")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.HealthResponse"}},[t._v("HealthResponse")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ListUsers")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.UserList"}},[t._v("UserList")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("CreateUser")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.CreateUserRequest"}},[t._v("CreateUserRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.UserResponse"}},[t._v("UserResponse")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ChangePassword")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ChangePasswordRequest"}},[t._v("ChangePasswordRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("UpdateAuthConfig")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.AuthConfig"}},[t._v("AuthConfig")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("UpdateMTLSConfig")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.MTLSConfig"}},[t._v("MTLSConfig")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("PrintTree")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Tree"}},[t._v("Tree")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Login")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.LoginRequest"}},[t._v("LoginRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.LoginResponse"}},[t._v("LoginResponse")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Logout")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("Dump")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#pb.KVList"}},[t._v(".pb.KVList")]),t._v(" stream")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("CreateDatabase")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.CreateDatabaseReply"}},[t._v("CreateDatabaseReply")])]),t._v(" "),v("td",[t._v('todo(joe-dz): Enable restore when the feature is required again \trpc Restore(stream pb.KVList) returns (ItemsCount) { \t\toption (google.api.http) = { \t\t\tpost: "/v1/immurestproxy/restore" \t\t\tbody: "*" \t\t}; \t}')])]),t._v(" "),v("tr",[v("td",[t._v("UseDatabase")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.UseDatabaseReply"}},[t._v("UseDatabaseReply")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ChangePermission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ChangePermissionRequest"}},[t._v("ChangePermissionRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("SetActiveUser")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.SetActiveUserRequest"}},[t._v("SetActiveUserRequest")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("DatabaseList")]),t._v(" "),v("td",[v("a",{attrs:{href:"#google.protobuf.Empty"}},[t._v(".google.protobuf.Empty")])]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.DatabaseListResponse"}},[t._v("DatabaseListResponse")])]),t._v(" "),v("td")])])]),t._v(" "),v("h2",{attrs:{id:"table-of-contents"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#table-of-contents"}},[t._v("#")]),t._v(" Table of Contents")]),t._v(" "),v("ul",[v("li",[v("p",[v("a",{attrs:{href:"#schema.proto"}},[t._v("schema.proto")])]),t._v(" "),v("ul",[v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.AuthConfig"}},[t._v("AuthConfig")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ChangePasswordRequest"}},[t._v("ChangePasswordRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ChangePermissionRequest"}},[t._v("ChangePermissionRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ConsistencyProof"}},[t._v("ConsistencyProof")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Content"}},[t._v("Content")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.CreateDatabaseReply"}},[t._v("CreateDatabaseReply")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.CreateUserRequest"}},[t._v("CreateUserRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.DatabaseListResponse"}},[t._v("DatabaseListResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.HealthResponse"}},[t._v("HealthResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.IScanOptions"}},[t._v("IScanOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.InclusionProof"}},[t._v("InclusionProof")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ItemList"}},[t._v("ItemList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ItemsCount"}},[t._v("ItemsCount")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KVList"}},[t._v("KVList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KeyList"}},[t._v("KeyList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KeyPrefix"}},[t._v("KeyPrefix")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Layer"}},[t._v("Layer")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.LoginRequest"}},[t._v("LoginRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.LoginResponse"}},[t._v("LoginResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.MTLSConfig"}},[t._v("MTLSConfig")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Node"}},[t._v("Node")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Page"}},[t._v("Page")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Permission"}},[t._v("Permission")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ReferenceOptions"}},[t._v("ReferenceOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Root"}},[t._v("Root")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SKVList"}},[t._v("SKVList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SPage"}},[t._v("SPage")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeGetOptions"}},[t._v("SafeGetOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeIndexOptions"}},[t._v("SafeIndexOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeItem"}},[t._v("SafeItem")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeReferenceOptions"}},[t._v("SafeReferenceOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeSetOptions"}},[t._v("SafeSetOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeSetSVOptions"}},[t._v("SafeSetSVOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeStructuredItem"}},[t._v("SafeStructuredItem")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SafeZAddOptions"}},[t._v("SafeZAddOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ScanOptions"}},[t._v("ScanOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.SetActiveUserRequest"}},[t._v("SetActiveUserRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.StructuredItemList"}},[t._v("StructuredItemList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.StructuredKeyValue"}},[t._v("StructuredKeyValue")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.Tree"}},[t._v("Tree")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UseDatabaseReply"}},[t._v("UseDatabaseReply")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.User"}},[t._v("User")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UserList"}},[t._v("UserList")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UserRequest"}},[t._v("UserRequest")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.UserResponse"}},[t._v("UserResponse")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ZAddOptions"}},[t._v("ZAddOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ZScanOptions"}},[t._v("ZScanOptions")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ErrorCodes"}},[t._v("ErrorCodes")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.PermissionAction"}},[t._v("PermissionAction")])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#immudb.schema.ImmuService"}},[t._v("ImmuService")])])])])]),t._v(" "),v("li",[v("p",[v("a",{attrs:{href:"#scalar-value-types"}},[t._v("Scalar Value Types")])])])]),t._v(" "),v("p",[v("a",{attrs:{name:"schema.proto"}})]),v("p",{attrs:{align:"right"}},[v("a",{attrs:{href:"#top"}},[t._v("Top")])]),v("p"),t._v(" "),v("h2",{attrs:{id:"schema-proto"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#schema-proto"}},[t._v("#")]),t._v(" schema.proto")]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.AuthConfig"}})]),t._v(" "),v("h3",{attrs:{id:"authconfig"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#authconfig"}},[t._v("#")]),t._v(" AuthConfig")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("kind")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ChangePasswordRequest"}})]),t._v(" "),v("h3",{attrs:{id:"changepasswordrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#changepasswordrequest"}},[t._v("#")]),t._v(" ChangePasswordRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("oldPassword")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("newPassword")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ChangePermissionRequest"}})]),t._v(" "),v("h3",{attrs:{id:"changepermissionrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#changepermissionrequest"}},[t._v("#")]),t._v(" ChangePermissionRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("action")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.PermissionAction"}},[t._v("PermissionAction")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("database")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ConsistencyProof"}})]),t._v(" "),v("h3",{attrs:{id:"consistencyproof"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#consistencyproof"}},[t._v("#")]),t._v(" ConsistencyProof")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("first")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("second")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("firstRoot")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("secondRoot")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("path")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Content"}})]),t._v(" "),v("h3",{attrs:{id:"content"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#content"}},[t._v("#")]),t._v(" Content")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("timestamp")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("payload")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.CreateDatabaseReply"}})]),t._v(" "),v("h3",{attrs:{id:"createdatabasereply"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#createdatabasereply"}},[t._v("#")]),t._v(" CreateDatabaseReply")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("error")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.CreateUserRequest"}})]),t._v(" "),v("h3",{attrs:{id:"createuserrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#createuserrequest"}},[t._v("#")]),t._v(" CreateUserRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("password")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("database")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Database"}})]),t._v(" "),v("h3",{attrs:{id:"database"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database"}},[t._v("#")]),t._v(" Database")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("databasename")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.DatabaseListResponse"}})]),t._v(" "),v("h3",{attrs:{id:"databaselistresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#databaselistresponse"}},[t._v("#")]),t._v(" DatabaseListResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("databases")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Database"}},[t._v("Database")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Error"}})]),t._v(" "),v("h3",{attrs:{id:"error"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#error"}},[t._v("#")]),t._v(" Error")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("errorcode")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ErrorCodes"}},[t._v("ErrorCodes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("errormessage")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.HealthResponse"}})]),t._v(" "),v("h3",{attrs:{id:"healthresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#healthresponse"}},[t._v("#")]),t._v(" HealthResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("status")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("version")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.IScanOptions"}})]),t._v(" "),v("h3",{attrs:{id:"iscanoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#iscanoptions"}},[t._v("#")]),t._v(" IScanOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("pageSize")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("pageNumber")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.InclusionProof"}})]),t._v(" "),v("h3",{attrs:{id:"inclusionproof"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#inclusionproof"}},[t._v("#")]),t._v(" InclusionProof")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("at")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("leaf")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("path")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Index"}})]),t._v(" "),v("h3",{attrs:{id:"index"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#index"}},[t._v("#")]),t._v(" Index")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Item"}})]),t._v(" "),v("h3",{attrs:{id:"item"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#item"}},[t._v("#")]),t._v(" Item")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ItemList"}})]),t._v(" "),v("h3",{attrs:{id:"itemlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#itemlist"}},[t._v("#")]),t._v(" ItemList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ItemsCount"}})]),t._v(" "),v("h3",{attrs:{id:"itemscount"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#itemscount"}},[t._v("#")]),t._v(" ItemsCount")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("count")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KVList"}})]),t._v(" "),v("h3",{attrs:{id:"kvlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#kvlist"}},[t._v("#")]),t._v(" KVList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("KVs")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Key"}})]),t._v(" "),v("h3",{attrs:{id:"key"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#key"}},[t._v("#")]),t._v(" Key")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KeyList"}})]),t._v(" "),v("h3",{attrs:{id:"keylist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#keylist"}},[t._v("#")]),t._v(" KeyList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("keys")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Key"}},[t._v("Key")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KeyPrefix"}})]),t._v(" "),v("h3",{attrs:{id:"keyprefix"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#keyprefix"}},[t._v("#")]),t._v(" KeyPrefix")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("prefix")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.KeyValue"}})]),t._v(" "),v("h3",{attrs:{id:"keyvalue"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#keyvalue"}},[t._v("#")]),t._v(" KeyValue")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Layer"}})]),t._v(" "),v("h3",{attrs:{id:"layer"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#layer"}},[t._v("#")]),t._v(" Layer")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("l")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Node"}},[t._v("Node")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.LoginRequest"}})]),t._v(" "),v("h3",{attrs:{id:"loginrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#loginrequest"}},[t._v("#")]),t._v(" LoginRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("password")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.LoginResponse"}})]),t._v(" "),v("h3",{attrs:{id:"loginresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#loginresponse"}},[t._v("#")]),t._v(" LoginResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("token")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("warning")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.MTLSConfig"}})]),t._v(" "),v("h3",{attrs:{id:"mtlsconfig"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#mtlsconfig"}},[t._v("#")]),t._v(" MTLSConfig")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("enabled")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Node"}})]),t._v(" "),v("h3",{attrs:{id:"node"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#node"}},[t._v("#")]),t._v(" Node")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("i")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("h")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("refk")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ref")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("cache")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Page"}})]),t._v(" "),v("h3",{attrs:{id:"page"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#page"}},[t._v("#")]),t._v(" Page")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("more")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Permission"}})]),t._v(" "),v("h3",{attrs:{id:"permission"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#permission"}},[t._v("#")]),t._v(" Permission")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("database")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Proof"}})]),t._v(" "),v("h3",{attrs:{id:"proof"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#proof"}},[t._v("#")]),t._v(" Proof")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("leaf")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("at")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("inclusionPath")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("consistencyPath")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ReferenceOptions"}})]),t._v(" "),v("h3",{attrs:{id:"referenceoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#referenceoptions"}},[t._v("#")]),t._v(" ReferenceOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("reference")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Root"}})]),t._v(" "),v("h3",{attrs:{id:"root"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#root"}},[t._v("#")]),t._v(" Root")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("root")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SKVList"}})]),t._v(" "),v("h3",{attrs:{id:"skvlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#skvlist"}},[t._v("#")]),t._v(" SKVList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("SKVs")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredKeyValue"}},[t._v("StructuredKeyValue")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SPage"}})]),t._v(" "),v("h3",{attrs:{id:"spage"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#spage"}},[t._v("#")]),t._v(" SPage")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("pageNum")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("more")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeGetOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safegetoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safegetoptions"}},[t._v("#")]),t._v(" SafeGetOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeIndexOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safeindexoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safeindexoptions"}},[t._v("#")]),t._v(" SafeIndexOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeItem"}})]),t._v(" "),v("h3",{attrs:{id:"safeitem"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safeitem"}},[t._v("#")]),t._v(" SafeItem")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("item")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Item"}},[t._v("Item")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("proof")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeReferenceOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safereferenceoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safereferenceoptions"}},[t._v("#")]),t._v(" SafeReferenceOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("ro")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ReferenceOptions"}},[t._v("ReferenceOptions")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeSetOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safesetoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safesetoptions"}},[t._v("#")]),t._v(" SafeSetOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("kv")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.KeyValue"}},[t._v("KeyValue")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeSetSVOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safesetsvoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safesetsvoptions"}},[t._v("#")]),t._v(" SafeSetSVOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("skv")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredKeyValue"}},[t._v("StructuredKeyValue")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeStructuredItem"}})]),t._v(" "),v("h3",{attrs:{id:"safestructureditem"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safestructureditem"}},[t._v("#")]),t._v(" SafeStructuredItem")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("item")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("proof")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Proof"}},[t._v("Proof")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SafeZAddOptions"}})]),t._v(" "),v("h3",{attrs:{id:"safezaddoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#safezaddoptions"}},[t._v("#")]),t._v(" SafeZAddOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("zopts")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.ZAddOptions"}},[t._v("ZAddOptions")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("rootIndex")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Index"}},[t._v("Index")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ScanOptions"}})]),t._v(" "),v("h3",{attrs:{id:"scanoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#scanoptions"}},[t._v("#")]),t._v(" ScanOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("prefix")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("offset")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("limit")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("reverse")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("deep")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.SetActiveUserRequest"}})]),t._v(" "),v("h3",{attrs:{id:"setactiveuserrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#setactiveuserrequest"}},[t._v("#")]),t._v(" SetActiveUserRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("active")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("username")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.StructuredItem"}})]),t._v(" "),v("h3",{attrs:{id:"structureditem"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#structureditem"}},[t._v("#")]),t._v(" StructuredItem")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Content"}},[t._v("Content")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("index")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.StructuredItemList"}})]),t._v(" "),v("h3",{attrs:{id:"structureditemlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#structureditemlist"}},[t._v("#")]),t._v(" StructuredItemList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("items")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.StructuredItem"}},[t._v("StructuredItem")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.StructuredKeyValue"}})]),t._v(" "),v("h3",{attrs:{id:"structuredkeyvalue"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#structuredkeyvalue"}},[t._v("#")]),t._v(" StructuredKeyValue")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("value")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Content"}},[t._v("Content")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.Tree"}})]),t._v(" "),v("h3",{attrs:{id:"tree"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#tree"}},[t._v("#")]),t._v(" Tree")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("t")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Layer"}},[t._v("Layer")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UseDatabaseReply"}})]),t._v(" "),v("h3",{attrs:{id:"usedatabasereply"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#usedatabasereply"}},[t._v("#")]),t._v(" UseDatabaseReply")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("error")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Error"}},[t._v("Error")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("token")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.User"}})]),t._v(" "),v("h3",{attrs:{id:"user"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#user"}},[t._v("#")]),t._v(" User")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permissions")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.Permission"}},[t._v("Permission")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("createdby")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("createdat")]),t._v(" "),v("td",[v("a",{attrs:{href:"#string"}},[t._v("string")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("active")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UserList"}})]),t._v(" "),v("h3",{attrs:{id:"userlist"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#userlist"}},[t._v("#")]),t._v(" UserList")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("users")]),t._v(" "),v("td",[v("a",{attrs:{href:"#immudb.schema.User"}},[t._v("User")])]),t._v(" "),v("td",[t._v("repeated")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UserRequest"}})]),t._v(" "),v("h3",{attrs:{id:"userrequest"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#userrequest"}},[t._v("#")]),t._v(" UserRequest")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.UserResponse"}})]),t._v(" "),v("h3",{attrs:{id:"userresponse"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#userresponse"}},[t._v("#")]),t._v(" UserResponse")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("user")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("permission")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint32"}},[t._v("uint32")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ZAddOptions"}})]),t._v(" "),v("h3",{attrs:{id:"zaddoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#zaddoptions"}},[t._v("#")]),t._v(" ZAddOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("set")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("score")]),t._v(" "),v("td",[v("a",{attrs:{href:"#double"}},[t._v("double")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("key")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ZScanOptions"}})]),t._v(" "),v("h3",{attrs:{id:"zscanoptions"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#zscanoptions"}},[t._v("#")]),t._v(" ZScanOptions")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Field")]),t._v(" "),v("th",[t._v("Type")]),t._v(" "),v("th",[t._v("Label")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("set")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("offset")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bytes"}},[t._v("bytes")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("limit")]),t._v(" "),v("td",[v("a",{attrs:{href:"#uint64"}},[t._v("uint64")])]),t._v(" "),v("td"),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("reverse")]),t._v(" "),v("td",[v("a",{attrs:{href:"#bool"}},[t._v("bool")])]),t._v(" "),v("td"),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.ErrorCodes"}})]),t._v(" "),v("h3",{attrs:{id:"errorcodes"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#errorcodes"}},[t._v("#")]),t._v(" ErrorCodes")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Name")]),t._v(" "),v("th",[t._v("Number")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("Ok")]),t._v(" "),v("td",[t._v("0")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_SELECTING_DATABASE")]),t._v(" "),v("td",[t._v("1")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_NO_PERMISSION_FOR_THIS_DATABASE")]),t._v(" "),v("td",[t._v("2")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_USER_HAS_NOT_LOGGED_IN")]),t._v(" "),v("td",[t._v("3")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("ERROR_DB_DOES_NOT_EXIST")]),t._v(" "),v("td",[t._v("4")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("a",{attrs:{name:"immudb.schema.PermissionAction"}})]),t._v(" "),v("h3",{attrs:{id:"permissionaction"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#permissionaction"}},[t._v("#")]),t._v(" PermissionAction")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Name")]),t._v(" "),v("th",[t._v("Number")]),t._v(" "),v("th",[t._v("Description")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("GRANT")]),t._v(" "),v("td",[t._v("0")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("REVOKE")]),t._v(" "),v("td",[t._v("1")]),t._v(" "),v("td")])])]),t._v(" "),v("h2",{attrs:{id:"scalar-value-types"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#scalar-value-types"}},[t._v("#")]),t._v(" Scalar Value Types")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v(".proto Type")]),t._v(" "),v("th",[t._v("Notes")]),t._v(" "),v("th",[t._v("C++")]),t._v(" "),v("th",[t._v("Java")]),t._v(" "),v("th",[t._v("Python")]),t._v(" "),v("th",[t._v("Go")]),t._v(" "),v("th",[t._v("C#")]),t._v(" "),v("th",[t._v("PHP")]),t._v(" "),v("th",[t._v("Ruby")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[v("a",{attrs:{name:"double"}}),t._v(" double")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("double")]),t._v(" "),v("td",[t._v("double")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float64")]),t._v(" "),v("td",[t._v("double")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("Float")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"float"}}),t._v(" float")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float32")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("float")]),t._v(" "),v("td",[t._v("Float")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"int32"}}),t._v(" int32")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"int64"}}),t._v(" int64")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"uint32"}}),t._v(" uint32")]),t._v(" "),v("td",[t._v("Uses variable-length encoding.")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("uint")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"uint64"}}),t._v(" uint64")]),t._v(" "),v("td",[t._v("Uses variable-length encoding.")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("ulong")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sint32"}}),t._v(" sint32")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sint64"}}),t._v(" sint64")]),t._v(" "),v("td",[t._v("Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"fixed32"}}),t._v(" fixed32")]),t._v(" "),v("td",[t._v("Always four bytes. More efficient than uint32 if values are often greater than 2^28.")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("uint32")]),t._v(" "),v("td",[t._v("uint")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"fixed64"}}),t._v(" fixed64")]),t._v(" "),v("td",[t._v("Always eight bytes. More efficient than uint64 if values are often greater than 2^56.")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("uint64")]),t._v(" "),v("td",[t._v("ulong")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sfixed32"}}),t._v(" sfixed32")]),t._v(" "),v("td",[t._v("Always four bytes.")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("int32")]),t._v(" "),v("td",[t._v("int")]),t._v(" "),v("td",[t._v("integer")]),t._v(" "),v("td",[t._v("Bignum or Fixnum (as required)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"sfixed64"}}),t._v(" sfixed64")]),t._v(" "),v("td",[t._v("Always eight bytes.")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("int/long")]),t._v(" "),v("td",[t._v("int64")]),t._v(" "),v("td",[t._v("long")]),t._v(" "),v("td",[t._v("integer/string")]),t._v(" "),v("td",[t._v("Bignum")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"bool"}}),t._v(" bool")]),t._v(" "),v("td"),t._v(" "),v("td",[t._v("bool")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td",[t._v("bool")]),t._v(" "),v("td",[t._v("bool")]),t._v(" "),v("td",[t._v("boolean")]),t._v(" "),v("td",[t._v("TrueClass/FalseClass")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"string"}}),t._v(" string")]),t._v(" "),v("td",[t._v("A string must always contain UTF-8 encoded or 7-bit ASCII text.")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("String")]),t._v(" "),v("td",[t._v("str/unicode")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("String (UTF-8)")])]),t._v(" "),v("tr",[v("td",[v("a",{attrs:{name:"bytes"}}),t._v(" bytes")]),t._v(" "),v("td",[t._v("May contain any arbitrary sequence of bytes.")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("ByteString")]),t._v(" "),v("td",[t._v("str")]),t._v(" "),v("td",[t._v("[]byte")]),t._v(" "),v("td",[t._v("ByteString")]),t._v(" "),v("td",[t._v("string")]),t._v(" "),v("td",[t._v("String (ASCII-8BIT)")])])])])])}),[],!1,null,null,null);e.default=_.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/41.6019fb35.js b/docs/assets/js/41.6019fb35.js deleted file mode 100644 index 2cd6fd4cc1..0000000000 --- a/docs/assets/js/41.6019fb35.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{452:function(t,a,s){"use strict";s.r(a);var n=s(46),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"developer-jumpstart-for-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#developer-jumpstart-for-immudb"}},[t._v("#")]),t._v(" Developer Jumpstart for immudb")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://slack.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[s("img",{attrs:{src:"https://img.shields.io/badge/join%20slack-%23immutability-brightgreen.svg",alt:"Slack"}}),s("OutboundLink")],1),t._v(" "),s("a",{attrs:{href:"https://groups.google.com/group/immudb",target:"_blank",rel:"noopener noreferrer"}},[s("img",{attrs:{src:"https://img.shields.io/badge/discuss-immudb%40googlegroups.com-blue.svg",alt:"Discuss at immudb@googlegroups.com"}}),s("OutboundLink")],1),t._v(" "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[s("img",{attrs:{src:"https://img.shields.io/github/license/codenotary/immudb4j",alt:"License"}}),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#introduction"}},[t._v("Introduction")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#what-is-immudb"}},[t._v("What is immudb")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#why-use-immudb"}},[t._v("Why use immudb")])])])]),t._v(" "),s("li",[s("a",{attrs:{href:"#installing-the-immudb-database-server"}},[t._v("Installing the immudb database server")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#get-the-docker-image"}},[t._v("Get the Docker Image")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#download-the-installer-for-the-latest-release"}},[t._v("Download the installer for the latest release")])])])]),t._v(" "),s("li",[s("a",{attrs:{href:"#creating-an-immudb-client-instance-in-your-chosen-programming-language"}},[t._v("Creating an immudb client instance in your chosen programming language")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#go"}},[t._v("Go")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#python"}},[t._v("Python")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#java"}},[t._v("Java")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#node-js"}},[t._v("Node.js")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#net"}},[t._v(".Net")])])])]),t._v(" "),s("li",[s("a",{attrs:{href:"#conclusion"}},[t._v("Conclusion")])])]),t._v(" "),s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("This guide helps developers quickly start with CodeNotary's immudb database and client. It guides you from start to finish with code samples in Node.js, Java, Python, Go, and .Net. After completing the guide, you will have the basic concepts necessary to begin using immudb within your organization.")]),t._v(" "),s("p",[t._v("Note: If you're using another development language, please read up on our "),s("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),s("OutboundLink")],1),t._v(" option.")]),t._v(" "),s("img",{attrs:{src:"https://github.com/codenotary/immudb-docs/raw/master/src/immudb/component-diagram.png"}}),t._v(" "),s("h3",{attrs:{id:"what-is-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-is-immudb"}},[t._v("#")]),t._v(" What is immudb?")]),t._v(" "),s("p",[t._v("A lightweight, high-speed, immutable database solution capable of processing millions of transactions a second. It provides cryptographic verification of your data integrity without the cost and complexity associated with classic blockchain. You have the flexibility to host immudb on-premise or in the cloud.")]),t._v(" "),s("table",{attrs:{border:"0"}},[s("tr",[s("td",{attrs:{width:"33%",valign:"top",align:"center"}},[s("h3",[t._v("Immutable")]),t._v("\n\t\t\tData is never overwritten. See the history of data updates.\n\t\t")]),t._v(" "),s("td",{attrs:{width:"33%",valign:"top",align:"center"}},[s("h3",[t._v("Auditable")]),t._v("\n\t\t\tTamper-evident history system ensures data authenticity.\n\t\t")]),t._v(" "),s("td",{attrs:{width:"33%",valign:"top",align:"center"}},[s("h3",[t._v("Secure")]),t._v("\n\t\t\tData ownership is verifiable by clients and auditors.\n\t\t")])]),t._v(" "),s("tr",[s("td",{attrs:{align:"center"}},[s("img",{attrs:{src:"https://codenotary.io/images/jumpstart/immutable.svg",width:"80px"}})]),t._v(" "),s("td",{attrs:{align:"center"}},[s("img",{attrs:{src:"https://codenotary.io/images/jumpstart/auditable.svg",width:"80px"}})]),t._v(" "),s("td",{attrs:{align:"center"}},[s("img",{attrs:{src:"https://codenotary.io/images/jumpstart/secure.svg",width:"80px"}})])])]),t._v(" "),s("p",[t._v("The immudb is a non-relational, NoSQL database. Data is a collection of key-values with time stamps. You can add records, but deletion or modification isn’t allowed making your data immutable. When a record's value changes over time (such as a bank balance), you can get multiple instances with different time stamps to give you the complete change history of that record. Store a variety of common data types, verification checksums, or JSONs.")]),t._v(" "),s("p",[t._v("Depending on your use case, immudb might function as your application's primary or as a secondary database. As a secondary, complimentary database, use immudb to cross-check the data integrity of your important data (by verifying checksums or comparing stored data values). A secondary database enables you to quickly use immudb without completely re-engineering your existing application.")]),t._v(" "),s("ul",[s("li",[t._v("For additional technical background on immudb and its performance, see the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/README.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Readme"),s("OutboundLink")],1),t._v(" within CodeNotary's immudb GitHub Project.")]),t._v(" "),s("li",[t._v("For additional information on immudb, see our "),s("a",{attrs:{href:"https://docs.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),s("OutboundLink")],1),t._v(".")])]),t._v(" "),s("h3",{attrs:{id:"why-use-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#why-use-immudb"}},[t._v("#")]),t._v(" Why use immudb?")]),t._v(" "),s("p",[s("img",{attrs:{align:"right",src:"https://codenotary.io/images/immudb/mascot.png",width:"240px"}}),t._v("It ensures the integrity of your organization's data. While Cyber Security is an important part of your organization’s business plan, immudb provides another layer of security to ensure data integrity even in the event your perimeter is breached during an attack. Data cannot be deleted or modified once stored into immudb. Additions of new data are logged and auditable, enabling you to view any suspect additions made during the intrusion.")]),t._v(" "),s("p",[t._v("Use cases:")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Integration with your DevOps ensures code security throughout the development and deployment process. Embed immudb into your "),s("a",{attrs:{href:"https://codenotary.io/blog/securing-your-azure-devops-ecosystem-jenkins-and-kubernetes-aks/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Azure DevOps"),s("OutboundLink")],1),t._v(" with Jenkins and Kubernetes. Use just "),s("a",{attrs:{href:"https://codenotary.io/blog/jenkins-build-deployment-pipeline-a-how-to-for-ensuring-integrity/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Jenkins"),s("OutboundLink")],1),t._v(". Alternatively, integrate with "),s("a",{attrs:{href:"https://codenotary.io/blog/fully-trusted-gitlab-pipeline/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Git Lab"),s("OutboundLink")],1),t._v(" or "),s("a",{attrs:{href:"https://codenotary.io/blog/use-github-actions-for-validated-builds/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),s("OutboundLink")],1),t._v(".")])]),t._v(" "),s("li",[s("p",[t._v("Guarantee "),s("a",{attrs:{href:"https://codenotary.io/blog/file-integrity-monitoring-change-management/",target:"_blank",rel:"noopener noreferrer"}},[t._v("File Integrity"),s("OutboundLink")],1),t._v(" of your critical data. Examples include storing your organization's sensitive financial, credit card transactional, invoices, contracts, educational transcripts, and other important data.")])]),t._v(" "),s("li",[s("p",[t._v("Ensure integrity of your legal "),s("a",{attrs:{href:"https://codenotary.io/blog/immutably-store-or-guarantee-the-immutability-of-documents-and-invoices-for-compliance-reasons/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Documents and Invoices"),s("OutboundLink")],1),t._v(", contracts, forms, and your downloads and emails.")])]),t._v(" "),s("li",[s("p",[t._v("Save your Internet of Things (IoT) sensor data as a failsafe plan for loss of data.")])]),t._v(" "),s("li",[s("p",[t._v("Keep your investment guidelines or stock market data tamperproof for your investment bank or client financial portfolios.")])]),t._v(" "),s("li",[s("p",[t._v("Store important log files to keep them tamperproof to meet regulations like PCI compliance.")])]),t._v(" "),s("li",[s("p",[t._v("Protect medical data, test results, or recipes from alteration.")])])]),t._v(" "),s("h2",{attrs:{id:"installing-the-immudb-database-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-immudb-database-server"}},[t._v("#")]),t._v(" Installing the immudb database server")]),t._v(" "),s("p",[t._v("In this section, you will install the immudb database server. You have the following options for running immudb database server:")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("For those using Docker, get and launch our image from Docker Hub.")])]),t._v(" "),s("li",[s("p",[t._v("Download our latest immudb release from GitHub.")])]),t._v(" "),s("li",[s("p",[t._v("For the sake of brevity, this Quick Start leaves out getting and compiling the immudb source (refer to the Readme "),s("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(" to use this method).")])])]),t._v(" "),s("h3",{attrs:{id:"get-the-docker-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-the-docker-image"}},[t._v("#")]),t._v(" Get the Docker Image")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("Pull the immudb Docker Image from "),s("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("Docker Hub"),s("OutboundLink")],1),t._v(". Below are the commands when using a Linux shell.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker pull codenotary/immudb:latest\n")])])])]),t._v(" "),s("li",[s("p",[t._v("You can run immudb in a container using the code that follows.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker run -it -d -p "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 --name immudb codenotary/immudb:latest\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Your immudb should now be up and running. Check your container logs to verify this.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("docker logs immudb\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Skip down to the section about "),s("a",{attrs:{href:"#creating-an-immudb-client-instance-in-your-chosen-programming-language"}},[t._v("Creating an immudb client instance in your chosen programming language")]),t._v(".")])])]),t._v(" "),s("h3",{attrs:{id:"download-the-installer-for-the-latest-release"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-the-installer-for-the-latest-release"}},[t._v("#")]),t._v(" Download the installer for the latest release")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("Download the latest release from our "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),s("OutboundLink")],1),t._v(".")])]),t._v(" "),s("li",[s("p",[t._v("Run immudb. Linux shell commands are shown below.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("./immudb "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Runs immudb in the foreground\t")]),t._v("\n./immudb -d "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Runs immudb in the background")]),t._v("\n")])])]),s("ul",[s("li",[t._v("immudb also runs as a service which is explained in this "),s("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("Readme"),s("OutboundLink")],1),t._v(" to use this method).")])])]),t._v(" "),s("li",[s("p",[t._v("To stop immudb, find the process "),s("code",[t._v("ps -ax | grep immudb")]),t._v(" and then "),s("code",[t._v("kill -15 ")]),t._v(". Alternatively, the Windows PowerShell commands are "),s("code",[t._v("Get-Process immudb* | Stop-Process")]),t._v(".")])]),t._v(" "),s("li",[s("p",[t._v("Continue with the section that follows.")])])]),t._v(" "),s("h2",{attrs:{id:"creating-an-immudb-client-instance-in-your-chosen-programming-language"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client-instance-in-your-chosen-programming-language"}},[t._v("#")]),t._v(" Creating an immudb client instance in your chosen programming language")]),t._v(" "),s("ol",[s("li",[t._v("Integrate the immudb Client into your application using the official Software Development Kits (SDKs). Get your SDK using the links that follow:")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.immudb.io/immudb/golang.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Go SDK documentation"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-py",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python SDK repository"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb4j",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java SDK repository"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js SDK repository"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net SDK repository"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("If you're using another language, then read up on our "),s("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),s("OutboundLink")],1),t._v(" option.")])]),t._v(" "),s("ol",{attrs:{start:"2"}},[s("li",[t._v("To get going quickly:")])]),t._v(" "),s("ul",[s("li",[t._v("Get the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb-client-example code"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("li",[t._v("Learn about the basic coding you will use to interact with your immudb client and database. This guide goes from start to finish, in creating a new client instance, writing and reading data, and then closing the client in each of the following.\n"),s("ul",[s("li",[s("a",{attrs:{href:"#go"}},[t._v("Go - Initiating and using Client")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#python"}},[t._v("Python - Initiating and using Client")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#java"}},[t._v("Java - Initiating and using Client")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#node-js"}},[t._v("Node.js - Initiating and using Client")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#net"}},[t._v(".Net - Initiating and using Client")])])])])]),t._v(" "),s("h2",{attrs:{id:"go"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#go"}},[t._v("#")]),t._v(" Go")]),t._v(" "),s("p",[s("img",{attrs:{align:"right",src:"https://codenotary.io/images/jumpstart/go-logo.png",width:"150px"}}),t._v("This section provides you with Go code snippets and explains how to work with immudb from start to finish. You will import the immudb dependencies into your Go project, create a new instance of the immudb client and a database. You will go through basic authentication process, and read and write to your new database.")]),t._v(" "),s("h3",{attrs:{id:"importing-immudb-dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-immudb-dependencies"}},[t._v("#")]),t._v(" Importing immudb dependencies")]),t._v(" "),s("p",[t._v("Import the necessary immudb dependencies into your Go project.")]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" main\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"context"')]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fmt"')]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"os"')]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path/filepath"')]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"time"')]),t._v("\n\t\timmuapi "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/api"')]),t._v("\n\t\timmuschema "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/api/schema"')]),t._v("\n\t\timmuclient "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/client"')]),t._v("\n\t\timmulogger "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/logger"')]),t._v("\n\t\timmuserver "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/server"')]),t._v("\n\t\timmustore "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/store"')]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"creating-an-immudb-client-instance-through-go"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client-instance-through-go"}},[t._v("#")]),t._v(" Creating an immudb client instance through Go")]),t._v(" "),s("p",[t._v("This section will walk you through creating the client, database, and user accounts through Go. Afterwards, you'll executing some basic reads and writes to the database.")]),t._v(" "),s("ol",[s("li",[t._v("Start the immudb client.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//===> 1. Start a new server")]),t._v("\n\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1. Start immudb server ..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" logfile "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuserver.log"')]),t._v("\n\t\tflogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v("\n\t\t\timmulogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewFileLogger")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuserver "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logfile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("defer")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Close")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tserverOptions "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuserver"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithLogfile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("logfile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tserver "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuserver"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultServer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("serverOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithLogger")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("flogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("go")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Start")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("defer")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\terr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Stop")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NOTE: this cleanup must NOT be done in a real-world scenario!")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cleanup")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Logfile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// wait for server to start")]),t._v("\n\t\ttime"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Sleep")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Millisecond"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Connect to a new client.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2. Connect immudb client ..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("immuclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"3"}},[s("li",[t._v("Write key-value transactions with and without verification.")])]),t._v(" "),s("ul",[s("li",[t._v("You can write key-values while bypassing the cryptographic verification when it can be postponed.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Set")]),t._v("\n\tkey1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms. Noelia Jaskolski"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Visa 1514284849020756 09/21"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tindex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Set - add entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ul",[s("li",[t._v("You can write with built-in cryptographic verification. The client implements the mathematical validations, while your application uses a traditional read or write function.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeSet")]),t._v("\n\tkey2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr. Archibald Beatty"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Visa 6679499384784022 11/23"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeSet - add and verify entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms. Maci Schuppe"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 2232703813463070 12/19"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeSet - add and verify entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tvalue3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 8069498678459876 10/22"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeSet - update and verify entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"4"}},[s("li",[t._v("About Structured values.")])]),t._v(" "),s("ul",[s("li",[t._v("Whenever the Go SDK sets data in immudb, it also adds a timestamp. The server should not set the timestamp, the client is in charge of adding the time stamp to prevent different values being used for time stamping.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\tmessage StructuredKeyValue "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tbytes key "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\tContent value "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tmessage Content "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v(" timestamp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\tbytes payload "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ul",[s("li",[s("p",[t._v("Though content is never unmarshalled by the server, our current definitions are in the protobuffer schema (you can extend this schema).")])]),t._v(" "),s("li",[s("p",[t._v("In convert.go, here is the Structured Item logic:")])])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("Item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ToSItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("StructuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" Content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\terr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" proto"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unmarshal")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("StructuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tKey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",{attrs:{start:"5"}},[s("li",[t._v("Adding references to existing entries.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeReference")]),t._v("\n\tkey3Ref "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"reference:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Ref"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeReference - add and verify a reference key to an existing entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key3Ref"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"6"}},[s("li",[t._v("Add a secondary index.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeZAdd")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeZAdd - add and verify scores for existing keys to a new or existing sorted set:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tset1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SetOfClientsThatAreWomen"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey1Score "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeZAdd")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1Score"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1Score"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey3Score "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeZAdd")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Score"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Score"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"7"}},[s("li",[t._v("Read entries.")])]),t._v(" "),s("ul",[s("li",[t._v("You can read key-values while bypassing the cryptographic verification.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"4. Read entries ..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Get")]),t._v("\n\titem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Get - fetch entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ul",[s("li",[t._v("You can read with built-in cryptographic verification. The client implements the mathematical validations, while your application uses a traditional read or write function.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e SafeGet")]),t._v("\n\tverifiedItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeGet - fetch and verify entry:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key3Ref"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeGet - fetch and verify entry by reference key:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"8"}},[s("li",[t._v("Scan your data entries.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// zscan Iterate over a sorted set")]),t._v("\n\tstructuredItemList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZScan")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ZScan - iterate over a sorted set:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" structuredItemList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Scan")]),t._v("\n\tprefix "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tstructuredItemList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Scan - iterate over keys having the specified prefix (e.g. \\"%s\\"):\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" structuredItemList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\t------"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",{attrs:{start:"9"}},[s("li",[t._v("Counting your data entries.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Count")]),t._v("\n\tprefix "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Ms."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\titemsCount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Count")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Count - count keys having the specified prefix (e.g. \\"%s\\"):\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"count: %d\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" itemsCount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Count"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"10"}},[s("li",[t._v("Getting the current root.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//------\x3e Current tree root")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Current root - return the last merkle tree root and index stored locally"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tcurrentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("CurrentRoot")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" currentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"no root found: immudb is empty"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index: %d\\n hash: %x\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"11"}},[s("li",[t._v("Adding a new entry, after getting the current root.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Add a new entry after getting current root:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tkey4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client:Mr. Valentin Padurean"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MasterCard 2232703813463070 01/24"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tverifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SafeSet - add and verify an entry after getting the current root:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"12"}},[s("li",[t._v("Checking root consistency.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Consistency - check consistency between the previous root and latest root:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tproof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Consistency")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" currentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Verified: %t\\n firstRoot: %x at index: %d\\n secondRoot: %x at index: %d\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("immuschema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FirstRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("First"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SecondRoot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tproof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Second"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"13"}},[s("li",[t._v("Checking inclusion. This verifies that the specified index is included in the current tree.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Inclusion - check if specified index is included in the current tree:"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tstructuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tinclusionProof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inclusion")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" structuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" structuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"verified: %t\\n hash: %x at index: %d\\n root: %x at index: %d\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("structuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Leaf"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tinclusionProof"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("At"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\nDONE. ¯\\\\_(ツ)_/¯"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",{attrs:{start:"14"}},[s("li",[t._v("Basic error handling and cleanup for your client.")])]),t._v(" "),s("div",{staticClass:"language-Go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" fmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fprintln")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("os"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Stderr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\tos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Exit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cleanup")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dbDir "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logfile "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove db")]),t._v("\n\t\tos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("RemoveAll")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dbDir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove log file")]),t._v("\n\t\tos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("logfile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove root")]),t._v("\n\t\tfiles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" filepath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Glob")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./\\\\.root*"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" f "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("range")]),t._v(" files "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Remove")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("f"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" message "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" index "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v("\n\t\tts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uint64")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Now")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" verified"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isVerified "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" hash "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("switch")]),t._v(" m "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t\tdig "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\thash "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t\tdig "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\thash "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t\tverified "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\t\tisVerified "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tkey "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\t\tvalue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t\thash "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("StructuredItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tkey "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\t\tvalue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Payload\n\t\t\tts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Timestamp\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t\thash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Hash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedItem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tkey "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key\n\t\t\tvalue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t\tts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Time\n\t\t\tverified "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\t\tisVerified "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t\t\tme"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuschema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Merge")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\tdig "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immuapi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" me"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\thash "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" dig"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("isVerified "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index: %d\\n key: %s\\n value: %s\\n hash: %x\\n time: %s\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tindex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tvalue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\thash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\ttime"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("int64")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index: %d\\n key: %s\\n value: %s\\n hash: %x\\n time: %s\\n verified: %t\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tindex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tvalue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\thash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\ttime"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Unix")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("int64")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tverified"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printSetItem")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" score "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("float64")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" message "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" index "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("uint64")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" verified"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isVerified "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("bool")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("switch")]),t._v(" m "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuschema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("immuclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("VerifiedIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t\t\tindex "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index\n\t\t\tverified "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" m"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified\n\t\t\tisVerified "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" immustore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" set"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" score"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Error")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("isVerified "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index: %d\\n set: %s\\n key: %s\\n score: %f\\n value: %s\\n hash: %x\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tindex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\tscore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\trkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\timmuapi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\tfmt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index: %d\\n set: %s\\n key: %s\\n score: %f\\n value: %s\\n hash: %x\\n verified: %t\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tindex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tscore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\trkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\timmuapi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\tverified"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",{attrs:{start:"15"}},[s("li",[t._v("Additional code samples are available:")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/go/helloworld.go",target:"_blank",rel:"noopener noreferrer"}},[t._v("helloworld.go"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/go/safehelloworld.go",target:"_blank",rel:"noopener noreferrer"}},[t._v("safehelloworld.go"),s("OutboundLink")],1)])]),t._v(" "),s("ol",{attrs:{start:"16"}},[s("li",[t._v("You should now have all the basics you need to begin using immudb in your organization within a Go development environment. You have an immudb database server, created a database, and have an instance of the immudb client running. You've gone through basic authentication and reading and writing to your new database. You can expand on this by reviewing the code samples from the above step.")])]),t._v(" "),s("h2",{attrs:{id:"python"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#python"}},[t._v("#")]),t._v(" Python")]),t._v(" "),s("p",[s("img",{attrs:{align:"right",src:"https://codenotary.io/images/jumpstart/python-logo.png",width:"240px"}}),t._v("This section provides you with Python code snippets and explains how to work with immudb from start to finish. You will import the immudb dependencies into your Python project, create a new instance of the immudb client and a database. You will go through basic authentication process, and read and write to your new database.")]),t._v(" "),s("p",[t._v("You can find some quickstart terminal recordings here: "),s("a",{attrs:{href:"https://asciinema.org/~immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("asciinema - immudb"),s("OutboundLink")],1)]),t._v(" "),s("h3",{attrs:{id:"importing-immudb-dependencies-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-immudb-dependencies-2"}},[t._v("#")]),t._v(" Importing immudb dependencies")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("Install the immudb-py package using "),s("a",{attrs:{href:"https://pip.pypa.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("pip"),s("OutboundLink")],1),t._v(" the Python Package Installer.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v(" pip "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" git+https://github.com/codenotary/immu-py.git\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Import the client.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" immudb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("client "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" immudbClient\n")])])])])]),t._v(" "),s("p",[t._v("Note: Immu-py is currently hosted in "),s("a",{attrs:{href:"https://github.com/features/packages",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub Packages"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h3",{attrs:{id:"creating-an-immudb-client-instance-through-python"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client-instance-through-python"}},[t._v("#")]),t._v(" Creating an immudb client instance through Python")]),t._v(" "),s("p",[t._v("This section will walk you through creating the immudb client, database, and user accounts through Python. Afterwards, you'll executing some basic reads and writes to the database.")]),t._v(" "),s("ol",[s("li",[t._v("Creating an immudb Client.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Using the default configuration:")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" immudbClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Setting the "),s("code",[t._v("immudb")]),t._v(" url and port.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" immudbClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mycustomurl:someport"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" immudbClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"10.105.20.32:8899"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Managing user sessions in the immudb Client.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Use "),s("code",[t._v("login")]),t._v(" and "),s("code",[t._v("logout")]),t._v(" functions to start and stop user sessions.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("login"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"usr1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pwd1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("//")]),t._v(" Interact "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("with")]),t._v(" immudb using logged user\n client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"3"}},[s("li",[t._v("Encoding requirements.")])]),t._v(" "),s("p",[t._v("Please note that, to provide maximum flexibility, all functions accept byte arrays as parameters. Therefore, Unicode strings must be properly encoded. It is possible to store structured objects, but they must be serialized (e.g., with "),s("a",{attrs:{href:"https://docs.python.org/3/library/pickle.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pickle"),s("OutboundLink")],1),t._v(" or "),s("a",{attrs:{href:"https://www.json.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JSON"),s("OutboundLink")],1),t._v(").")]),t._v(" "),s("ol",{attrs:{start:"4"}},[s("li",[s("p",[t._v("Creating your immudb database.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("createDatabase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Specifying the active database for this session.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("useDatabase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("p",[t._v("Note: If not specified, the default databased used is "),s("em",[t._v("defaultdb")]),t._v(".")]),t._v(" "),s("ol",{attrs:{start:"6"}},[s("li",[t._v("Reading and writing key-values.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("You can read and write key-values while bypassing the cryptographic verification when it can be postponed.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("set")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"value123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("You can read and write with built-in cryptographic verification. The client implements the mathematical validations, while your application uses a traditional read or write function.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\tclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("safeSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" new byte"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tresults "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("safeGet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n Except VerificationException "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Do something")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Multi-key reading and writing of key-values.")])]),t._v(" "),s("li",[s("p",[t._v("Transactional multi-key read and write functions are available. Atomic multi-key write (all entries are persisted or none).")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" normal_dictionary "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"key1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"value1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"key2"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"value2"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setAll"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("normal_dictionary"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Atomic multi-key read (all entries are retrieved or none).")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" normal_dictionary "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"key1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"value1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"key2"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"value2"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n results_dictionary "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAll"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("normal_dictionary"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Or manually")]),t._v("\n client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"key1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('b"key2"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"7"}},[s("li",[t._v("Managing users and access to the immudb database.\nYou can add users and grant access to databases.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Adding a user.\nThe 'createUser' functions creates a new user and grants the specified permission to your database.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("user"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'newuser'")]),t._v("\npassword"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Pw1:pasdfoiu'")]),t._v("\npermission"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("constants"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("PERMISSION_RW\ndatabase"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defaultdb'")]),t._v("\nclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("createUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" permission"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\t\n")])])])])]),t._v(" "),s("p",[t._v("Notes: You must create the database before creating the user. The password must be between 8 and 32 characters in length, must have at least one upper case letter, a symbol, and a number.")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Permission are defined in immudb.constants and are:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("PERMISSION_SYS_ADMIN")])]),t._v(" "),s("li",[s("code",[t._v("PERMISSION_ADMIN")])]),t._v(" "),s("li",[s("code",[t._v("PERMISSION_NONE")])]),t._v(" "),s("li",[s("code",[t._v("PERMISSION_R")])]),t._v(" "),s("li",[s("code",[t._v("PERMISSION_RW")])])])]),t._v(" "),s("li",[s("p",[t._v("Changing passwords.\nProvide both the user's new and old password.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("newPassword"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pW1:a0s98d7gfy"')]),t._v("\nresp"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("changePassword"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" newPassword"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" oldPassword"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Displaying a list of users.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("resp"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("listUsers"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("users"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("userlist"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("users"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"8"}},[s("li",[t._v("Closing the client.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("To close the connection with immudb server use the "),s("code",[t._v("shutdown")]),t._v(" function.")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("shutdown"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("p",[t._v("Note: After shutdown, a new client must be created to establish a new connection.")]),t._v(" "),s("ol",{attrs:{start:"9"}},[s("li",[t._v("Additional code samples are available:")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/python/hello_world.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("hello_world.py"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/python/massive_operations.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("massive_operations.py"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/python/parallel_massive_operations.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("parallel_massive_operations.py"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/python/safe_operations.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("safe_operations.py"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/python/very_massive_operations.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("very_massive_operations.py"),s("OutboundLink")],1)])]),t._v(" "),s("ol",{attrs:{start:"10"}},[s("li",[t._v("You should now have all the basics you need to begin using immudb in your organization within a Python development environment. You have an immudb database server, created a database, and have an instance of the immudb client running. You've gone through basic authentication and reading and writing to your new database. You can expand on this by reviewing the code samples from the above step.")])]),t._v(" "),s("h2",{attrs:{id:"java"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#java"}},[t._v("#")]),t._v(" Java")]),t._v(" "),s("p",[s("img",{attrs:{align:"right",src:"https://codenotary.io/images/jumpstart/java-logo.png",height:"100px"}}),t._v("This section provides you with Java code snippets and explains how to work with immudb from start to finish. You will import the immudb dependencies into your Java project, create a new instance of the immudb client and a database. You will go through basic authentication process, and read and write to your new database.")]),t._v(" "),s("h3",{attrs:{id:"importing-immudb-dependencies-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#importing-immudb-dependencies-3"}},[t._v("#")]),t._v(" Importing immudb dependencies")]),t._v(" "),s("p",[t._v("Include immudb4j as a dependency in your project.")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Using the "),s("a",{attrs:{href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Maven"),s("OutboundLink")],1),t._v(" build tool:")]),t._v(" "),s("div",{staticClass:"language-xml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-xml"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("io.codenotary"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("immudb4j"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("0.1.8"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n")])])])]),t._v(" "),s("li",[s("p",[t._v("Using the "),s("a",{attrs:{href:"https://gradle.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Gradle"),s("OutboundLink")],1),t._v(" build tool:")]),t._v(" "),s("div",{staticClass:"language-groovy extra-class"},[s("pre",{pre:!0,attrs:{class:"language-groovy"}},[s("code",[t._v(" compile "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'io.codenotary:immudb4j:0.1.8'")]),t._v("\n")])])])])]),t._v(" "),s("h3",{attrs:{id:"creating-an-immudb-client-instance-through-java"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client-instance-through-java"}},[t._v("#")]),t._v(" Creating an immudb client instance through Java")]),t._v(" "),s("p",[t._v("This section will walk you through creating the immudb client, database, and user accounts through Java. Afterwards, you'll executing some basic reads and writes to the database.")]),t._v(" "),s("ol",[s("li",[t._v("Creating an immudb Client.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Using the default configuration:")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Setting an URL and port.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setServerUrl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setServerPort")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Customizing the "),s("code",[t._v("Root Holder")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FileRootHolder")]),t._v(" rootHolder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FileRootHolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRootsFolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./my_immuapp_roots"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),t._v(" immuClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("withRootHolder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rootHolder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\t\t\t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Managing user sessions.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Use the "),s("code",[t._v("login")]),t._v(" and "),s("code",[t._v("logout")]),t._v(" functions to open and close user sessions.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("login")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"usr1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pwd1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with immudb using logged user")]),t._v("\n immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("logout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"3"}},[s("li",[s("p",[t._v("Creating an immudb database.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Setting the active immudb database.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"db1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Reading and writing key-values to your immudb database.")])])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("You can read and write key-values while bypassing the cryptographic verification when it can be postponed.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("You can read and write with built-in cryptographic verification. The client implements the mathematical validations, while your application uses a traditional read or write function.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tclient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("VerificationException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Tampering detected!")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Atomic multi-key write (all entries are persisted or none) follows.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KVList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KVListBuilder")]),t._v(" builder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KVList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("newBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k321"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KVList")]),t._v(" kvList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAll")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("kvList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Atomic multi-key read (all entries are retrieved or none) follows.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" keyList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArrayList")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n keyList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k123"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n keyList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"k321"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("KV"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAll")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("keyList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("KV kv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" key "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" kv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" value "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" kv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\t\t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"6"}},[s("li",[t._v("Closing the immudb client and server connection.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("To close the connection with your immudb server, use the "),s("code",[t._v("shutdown")]),t._v(" function.")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("shutdown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("p",[t._v("Note: After shutdown, you must create a new client for a new connection.")]),t._v(" "),s("ol",{attrs:{start:"7"}},[s("li",[t._v("Additional code sample is available:")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples/blob/master/java/simple-mvn-app/src/io/codenotary/immudb/helloworld/App.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("App.java"),s("OutboundLink")],1),t._v(" includes single and multiple reads and writes.")])]),t._v(" "),s("ol",{attrs:{start:"8"}},[s("li",[t._v("You should now have all the basics you need to begin using immudb in your organization within a Java development environment. You have an immudb database server, created a database, and have an instance of the immudb client running. You've gone through basic authentication and reading and writing to your new database. You can expand on this by reviewing the code samples from the above step.")])]),t._v(" "),s("h2",{attrs:{id:"node-js"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#node-js"}},[t._v("#")]),t._v(" Node.js")]),t._v(" "),s("p",[s("img",{attrs:{align:"right",src:"https://codenotary.io/images/jumpstart/nodejs-logo.svg",width:"150px"}}),t._v("This section provides you with Node.js code snippets and explains how to work with immudb from start to finish. You will import the immudb dependencies into your Node.js project, create a new instance of the immudb client and a database. You will go through basic authentication process, and read and write to your new database.")]),t._v(" "),s("h3",{attrs:{id:"including-immudb-dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#including-immudb-dependencies"}},[t._v("#")]),t._v(" Including immudb dependencies")]),t._v(" "),s("p",[t._v("Include the immudb-node as a dependency in your project.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v("\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" immudbClient "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immudb-node'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"creating-an-immudb-client-instance-through-node-js"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client-instance-through-node-js"}},[t._v("#")]),t._v(" Creating an immudb client instance through Node.js")]),t._v(" "),s("p",[t._v("This section will walk you through creating the immudb client, database, and users with Node.js. Afterwards, you'll executing some basic reads and writes to the database.")]),t._v(" "),s("ol",[s("li",[t._v("Creating an immudb Client using the default configuration."),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'127.0.0.1:3322'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n rootPath"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'.'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("immudbClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" cl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with the client.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[t._v("Managing user sessions.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Use the "),s("code",[t._v("login")]),t._v(" and "),s("code",[t._v("logout")]),t._v(" functions to open and close user sessions.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("login")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" username"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'usr1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'pwd1'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with immudb using logged user.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("logout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Using callbacks for user sessions.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v("cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("login")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" username"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'usr1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'pwd1'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with immudb using logged user.")]),t._v("\n cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("logout")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Logged out.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"3"}},[s("li",[s("p",[t._v("Creating an immudb database.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v("cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'db1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Setting the active immudb database.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v("cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'db1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Reading and writing key values with and without cryptographic verification.")])])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("You can read and write key-values while bypassing the cryptographic verification when it can be postponed.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value1'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nres "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key1'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("You can read and write with built-in cryptographic verification. The client implements the mathematical validations, while your application uses a traditional read or write function:")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeSet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value1'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key1'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clientErr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("proofErr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Proof does not verify.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n console"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Transactional multi-key read and write functions are available. Atomic multi-key write (all entries are persisted or none) is shown below.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v(" req "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n skvList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n payload"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timestamp"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("floor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Date"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("now")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n payload"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timestamp"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("floor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Date"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("now")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBatchSV")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("req"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Atomic multi-key read (all entries are retrieved or none) is shown below.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v(" req "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n keys"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tkey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tkey"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBatchSV")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("req"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"6"}},[s("li",[t._v("Closing the immudb client and closing the server connection.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Use the "),s("code",[t._v("shutdown")]),t._v(" function to close the connection with your immudb server.")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[t._v("cl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("shutdown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])]),t._v(" "),s("p",[t._v("Note: After shutting down, you must create a new client to establish a new connection.")]),t._v(" "),s("ol",{attrs:{start:"7"}},[s("li",[t._v("Additional code samples are available:")])]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node/blob/master/examples/auth-management.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("auth-management.js"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node/blob/master/examples/database-management.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("database-management.js"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node/blob/master/examples/database-ops-structured.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("database-ops-structured.js"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node/blob/master/examples/database-ops-unstructured.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("database-ops-unstructured.js"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node/blob/master/examples/set-batch.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("set-batch.js"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/codenotary/immudb-node/blob/master/examples/user-management.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("user-management.js"),s("OutboundLink")],1)])]),t._v(" "),s("ol",{attrs:{start:"8"}},[s("li",[t._v("You should now have all the basics you need to begin using immudb in your organization within a Node.js development environment. You have an immudb database server, created a database, and have an instance of the immudb client running. You've gone through basic authentication and reading and writing to your new database. You can expand on this by reviewing the code samples from the above step.")])]),t._v(" "),s("h2",{attrs:{id:"net"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#net"}},[t._v("#")]),t._v(" .Net")]),t._v(" "),s("p",[s("img",{attrs:{align:"right",src:"https://codenotary.io/images/jumpstart/net-logo.png",width:"110px"}}),t._v("This section provides you with csharp code snippets for the Microsoft .Net and explains how to work with immudb from start to finish. The immudb4DotNet is developed for .Net Core offering broader platform support than the older .Net Framework. You will import the immudb dependencies into your .Net project, create a new instance of the immudb client and a database. You will go through basic authentication process, and read and write to your new database.")]),t._v(" "),s("h3",{attrs:{id:"including-immudb-dependencies-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#including-immudb-dependencies-2"}},[t._v("#")]),t._v(" Including immudb dependencies")]),t._v(" "),s("p",[t._v("Use Microsoft's "),s("a",{attrs:{href:"https://www.nuget.org/packages/Immudb4DotNet/",target:"_blank",rel:"noopener noreferrer"}},[t._v("NuGet"),s("OutboundLink")],1),t._v(" package manager to get immudb4DotNet.")]),t._v(" "),s("h3",{attrs:{id:"creating-an-immudb-client-instance-through-net"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client-instance-through-net"}},[t._v("#")]),t._v(" Creating an immudb client instance through .Net")]),t._v(" "),s("p",[t._v("This section will walk you through creating the client, database, and user accounts. Afterwards, you'll executing some basic reads and writes to the database.")]),t._v(" "),s("ol",[s("li",[t._v("Creating a Client.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Using the default configuration.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constructor-invocation class-name"}},[t._v("CodeNotary"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuDb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v('The immudb implements IDisposable, so you can wrap it with "using".')]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("using")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constructor-invocation class-name"}},[t._v("CodeNotary"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuDb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuClient")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Managing user sessions.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Use "),s("code",[t._v("LoginAsync")]),t._v(" and "),s("code",[t._v("LogoutAsync")]),t._v(" functions to open and close user sessions. You can specify an optional database name. If the database does not exist then it will be created.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("LoginAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"database"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Interact with immudb using logged user")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("LogoutAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Alternatively, you can call the Close() function to end your connection. After Logout() you can reuse the same client. However, after Close() you have to create a new client. The Close() function automatically disposes of your client.")])])]),t._v(" "),s("ol",{attrs:{start:"3"}},[s("li",[s("p",[t._v("Creating an immudb database.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("CreateDatabaseAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"database"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("Setting the active immudb database.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseDatabaseAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"database"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("ul",[s("li",[t._v("The second, optional parameter indicates whether to create the database if doesn't exist. Default is true.")])]),t._v(" "),s("ol",{attrs:{start:"5"}},[s("li",[t._v("Reading and writing key-values without verification.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("You can read and write key-values while bypassing the cryptographic verification when it can be postponed.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Value"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("You can use generic functions that takes the class as a value. It will be serialized as JSON and written to immudb, and de-serialized when retrieved.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constructor-invocation class-name"}},[t._v("MyClass")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Property "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Value"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token generic-method"}},[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetAsync")]),s("span",{pre:!0,attrs:{class:"token generic class-name"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("MyClass"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("li",[s("p",[t._v("TryGet functions are also available. Although, they will not throw exceptions if the specified key is missing from your database.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("TryGet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("out")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// use value")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"6"}},[s("li",[t._v("Reading and writing key-values with verification.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("You can read and write with built-in cryptographic verification. The client implements the mathematical validations, while your application uses a traditional read or write function.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSetAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token class-name"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGetAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("VerificationException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Tampering detected!")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),s("ol",{attrs:{start:"7"}},[s("li",[t._v("Closing the immudb client.")])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("To close the connection with your immudb server use the "),s("code",[t._v("shutdown")]),t._v(" function.")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[t._v(" immuClient"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Close")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])]),t._v(" "),s("p",[t._v("Note: After shutdown, you must create a new client to establish a new connection.")]),t._v(" "),s("ol",{attrs:{start:"8"}},[s("li",[s("p",[t._v("Downloadable .Net cde samples are not yet available.")])]),t._v(" "),s("li",[s("p",[t._v("You should now have all the basics you need to begin using immudb in your organization within a .Net development environment. You have an immudb database server, created a database, and have an instance of the immudb client running. You've gone through basic authentication and reading and writing to your new database.")])])]),t._v(" "),s("h2",{attrs:{id:"conclusion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[t._v("#")]),t._v(" Conclusion")]),t._v(" "),s("p",[t._v("Congratulations for completing the development quick start guide. You've been guided through the essentials you need to know to begin using CodeNotary's immudb solution.")]),t._v(" "),s("p",[t._v("You now have:")]),t._v(" "),s("ul",[s("li",[t._v("An immudb database server and are familiar with basic authentication.")]),t._v(" "),s("li",[t._v("An immudb client.")]),t._v(" "),s("li",[t._v("A new immudb database.")]),t._v(" "),s("li",[t._v("An instance of the immudb client running.")]),t._v(" "),s("li",[t._v("Gone through reading and writing data with and without cryptographic verification.")])]),t._v(" "),s("p",[t._v("We've only scratched the surface of immudb's capabilities. Here are some additional resources you might find helpful:")]),t._v(" "),s("ul",[s("li",[t._v("Learn more through our "),s("a",{attrs:{href:"https://docs.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),s("OutboundLink")],1),t._v(".\n"),s("ul",[s("li",[t._v("Learn more about the immudb "),s("a",{attrs:{href:"https://docs.immudb.io/immudb/grpc-interface.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("API"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("li",[t._v("Try out "),s("a",{attrs:{href:"https://docs.immudb.io/immuadmin/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immuadmin"),s("OutboundLink")],1)])])]),t._v(" "),s("li",[t._v("Follow CodeNotary's "),s("a",{attrs:{href:"https://codenotary.io/blog",target:"_blank",rel:"noopener noreferrer"}},[t._v("blog"),s("OutboundLink")],1),t._v(" for more immudb articles and release announcements.")]),t._v(" "),s("li",[t._v("Additional technical background on immudb and its performance, see the "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/README.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Readme"),s("OutboundLink")],1),t._v(" within CodeNotary's immudb GitHub Project.\n"),s("img",{attrs:{align:"center",src:"https://codenotary.io/images/word-tree.png"}})])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/39.2fb57f13.js b/docs/assets/js/41.d8d0d383.js similarity index 99% rename from docs/assets/js/39.2fb57f13.js rename to docs/assets/js/41.d8d0d383.js index 180996b0aa..be1e2755b7 100644 --- a/docs/assets/js/39.2fb57f13.js +++ b/docs/assets/js/41.d8d0d383.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{450:function(a,t,s){"use strict";s.r(t);var e=s(46),n=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"curl-examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#curl-examples"}},[a._v("#")]),a._v(" Curl Examples")]),a._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#write-transactions-without-verification"}},[a._v("Write transactions without verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#write-transactions-with-verification"}},[a._v("Write transactions with verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#add-reference-to-existing-entries"}},[a._v("Add reference to existing entries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#add-secondary-index"}},[a._v("Add secondary index")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#read-entries-without-verification"}},[a._v("Read entries without verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#read-entries-with-verification"}},[a._v("Read entries with verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#scan-entries"}},[a._v("Scan entries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#count-entries"}},[a._v("Count entries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#get-current-root"}},[a._v("Get current root")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#check-consistency"}},[a._v("Check consistency")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#check-inclusion"}},[a._v("Check inclusion")])])]),a._v(" "),s("p",[a._v("The following code snippets explain how to work with 'immugw' (REST proxy for immudb) using 'curl'.\nimmugw HTTP API key/value are base64 encoded.")]),a._v(" "),s("p",[s("strong",[a._v("important: all get and safeget functions return base64-encoded keys and values, while all set and get functions expect base64-encoded inputs")])]),a._v(" "),s("h2",{attrs:{id:"login-you-can-either-create-another-user-with-immuadmin-or-user-the-built-in-immudb-user-default-pw-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#login-you-can-either-create-another-user-with-immuadmin-or-user-the-built-in-immudb-user-default-pw-immudb"}},[a._v("#")]),a._v(" Login: you can either create another user with immuadmin or user the built-in immudb user (default pw: immudb)")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/login'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "user": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n immudb "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "password": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n TWdn4TK0ACq8amSeYBW"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v("9E9h3S0am?G"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"write-transactions-without-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-without-verification"}},[a._v("#")]),a._v(" Write transactions without verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "value": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n Visa "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1514284849020756")]),a._v(" 09/21 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"write-transactions-with-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-with-verification"}},[a._v("#")]),a._v(" Write transactions with verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item/safe'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "kv": {\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "value": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n MasterCard "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2232703813463070")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("12")]),a._v("/19 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"add-reference-to-existing-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-reference-to-existing-entries"}},[a._v("#")]),a._v(" Add reference to existing entries")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/safe/reference'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "ro": {\n "reference": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n reference:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"add-secondary-index"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-secondary-index"}},[a._v("#")]),a._v(" Add secondary index")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/safe/zadd'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "zopts": {\n "set": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n SetOfClientsThatAreWomen "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "score": 1.0,\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/safe/zadd'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "zopts": {\n "set": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n SetOfClientsThatAreWomen "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "score": 3.0,\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"read-entries-without-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-without-verification"}},[a._v("#")]),a._v(" Read entries without verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request GET "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item/index/1'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"read-entries-with-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-with-verification"}},[a._v("#")]),a._v(" Read entries with verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item/safe/get'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"scan-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#scan-entries"}},[a._v("#")]),a._v(" Scan entries")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request POST "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immugw:3323/v1/immurestproxy/item/scan "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'content-type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --data "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "prefix": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "offset": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "limit": "2",\n "reverse": true,\n "deep": true\n}\'')]),a._v("\n")])])]),s("h2",{attrs:{id:"count-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#count-entries"}},[a._v("#")]),a._v(" Count entries")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request GET "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immugw:3323/v1/immurestproxy/item/count/Y2xpZW50Mg"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),a._v("\n")])])]),s("h2",{attrs:{id:"get-current-root"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-current-root"}},[a._v("#")]),a._v(" Get current root")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request GET "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/root'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v("\n\n")])])]),s("h3",{attrs:{id:"add-a-new-entry-after-getting-current-root"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-a-new-entry-after-getting-current-root"}},[a._v("#")]),a._v(" Add a new entry after getting current root")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Mr. Valentin Padurean "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "value": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n MasterCard "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2232703813463070")]),a._v(" 01/24 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\",\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"check-consistency"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#check-consistency"}},[a._v("#")]),a._v(" Check consistency")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request GET "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immuwg:3323/v1/immurestproxy/consistencyproof/33\n")])])]),s("h2",{attrs:{id:"check-inclusion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#check-inclusion"}},[a._v("#")]),a._v(" Check inclusion")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request GET "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immugw:3323/v1/immurestproxy/inclusionproof/33\n")])])]),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),s("p",[a._v("immugw is "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),s("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{457:function(a,t,s){"use strict";s.r(t);var e=s(10),n=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"curl-examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#curl-examples"}},[a._v("#")]),a._v(" Curl Examples")]),a._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#write-transactions-without-verification"}},[a._v("Write transactions without verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#write-transactions-with-verification"}},[a._v("Write transactions with verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#add-reference-to-existing-entries"}},[a._v("Add reference to existing entries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#add-secondary-index"}},[a._v("Add secondary index")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#read-entries-without-verification"}},[a._v("Read entries without verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#read-entries-with-verification"}},[a._v("Read entries with verification")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#scan-entries"}},[a._v("Scan entries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#count-entries"}},[a._v("Count entries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#get-current-root"}},[a._v("Get current root")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#check-consistency"}},[a._v("Check consistency")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#check-inclusion"}},[a._v("Check inclusion")])])]),a._v(" "),s("p",[a._v("The following code snippets explain how to work with 'immugw' (REST proxy for immudb) using 'curl'.\nimmugw HTTP API key/value are base64 encoded.")]),a._v(" "),s("p",[s("strong",[a._v("important: all get and safeget functions return base64-encoded keys and values, while all set and get functions expect base64-encoded inputs")])]),a._v(" "),s("h2",{attrs:{id:"login-you-can-either-create-another-user-with-immuadmin-or-user-the-built-in-immudb-user-default-pw-immudb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#login-you-can-either-create-another-user-with-immuadmin-or-user-the-built-in-immudb-user-default-pw-immudb"}},[a._v("#")]),a._v(" Login: you can either create another user with immuadmin or user the built-in immudb user (default pw: immudb)")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/login'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "user": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n immudb "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "password": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n TWdn4TK0ACq8amSeYBW"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v("9E9h3S0am?G"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"write-transactions-without-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-without-verification"}},[a._v("#")]),a._v(" Write transactions without verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "value": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n Visa "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1514284849020756")]),a._v(" 09/21 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"write-transactions-with-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#write-transactions-with-verification"}},[a._v("#")]),a._v(" Write transactions with verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item/safe'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "kv": {\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "value": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n MasterCard "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2232703813463070")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("12")]),a._v("/19 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"add-reference-to-existing-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-reference-to-existing-entries"}},[a._v("#")]),a._v(" Add reference to existing entries")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/safe/reference'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "ro": {\n "reference": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n reference:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"add-secondary-index"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-secondary-index"}},[a._v("#")]),a._v(" Add secondary index")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/safe/zadd'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "zopts": {\n "set": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n SetOfClientsThatAreWomen "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "score": 1.0,\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/safe/zadd'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "zopts": {\n "set": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n SetOfClientsThatAreWomen "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "score": 3.0,\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n }\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"read-entries-without-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-without-verification"}},[a._v("#")]),a._v(" Read entries without verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request GET "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item/index/1'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"read-entries-with-verification"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#read-entries-with-verification"}},[a._v("#")]),a._v(" Read entries with verification")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item/safe/get'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\"\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"scan-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#scan-entries"}},[a._v("#")]),a._v(" Scan entries")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request POST "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immugw:3323/v1/immurestproxy/item/scan "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'content-type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --data "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "prefix": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Noelia Jaskolski "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "offset": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Ms. Maci Schuppe "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "limit": "2",\n "reverse": true,\n "deep": true\n}\'')]),a._v("\n")])])]),s("h2",{attrs:{id:"count-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#count-entries"}},[a._v("#")]),a._v(" Count entries")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request GET "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immugw:3323/v1/immurestproxy/item/count/Y2xpZW50Mg"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("==")]),a._v("\n")])])]),s("h2",{attrs:{id:"get-current-root"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-current-root"}},[a._v("#")]),a._v(" Get current root")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request GET "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/root'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v("\n\n")])])]),s("h3",{attrs:{id:"add-a-new-entry-after-getting-current-root"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-a-new-entry-after-getting-current-root"}},[a._v("#")]),a._v(" Add a new entry after getting current root")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --location --request POST "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'http://immugw:3323/v1/immurestproxy/item'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Content-Type: application/json'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--header "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'Authorization: Bearer {{token}}'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--data-raw "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'{\n "key": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n client:Mr. Valentin Padurean "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('\'",\n "value": "\'')]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" -n MasterCard "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2232703813463070")]),a._v(" 01/24 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\",\n}'")]),a._v("\n")])])]),s("h2",{attrs:{id:"check-consistency"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#check-consistency"}},[a._v("#")]),a._v(" Check consistency")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request GET "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immuwg:3323/v1/immurestproxy/consistencyproof/33\n")])])]),s("h2",{attrs:{id:"check-inclusion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#check-inclusion"}},[a._v("#")]),a._v(" Check inclusion")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" --request GET "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --url http://immugw:3323/v1/immurestproxy/inclusionproof/33\n")])])]),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),s("p",[a._v("immugw is "),s("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),s("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/40.2edcf666.js b/docs/assets/js/42.a9e532a8.js similarity index 99% rename from docs/assets/js/40.2edcf666.js rename to docs/assets/js/42.a9e532a8.js index aa0d317f74..615ed82565 100644 --- a/docs/assets/js/40.2edcf666.js +++ b/docs/assets/js/42.a9e532a8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{451:function(a,t,s){"use strict";s.r(t);var e=s(46),r=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"immugw"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw"}},[a._v("#")]),a._v(" immugw")]),a._v(" "),s("p",[a._v("immugw is the intelligent REST proxy that connects to immudb and provides a RESTful interface for applications. We recommend running immudb and immugw on separate machines to enhance security\nimmugw can be found in a different "),s("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[a._v("repository"),s("OutboundLink")],1)]),a._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[a._v("#")]),a._v(" Contents")]),a._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#latest-binaries"}},[a._v("Latest binaries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#build"}},[a._v("Build")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#docker"}},[a._v("Docker")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#run-immugw"}},[a._v("Run immugw")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#configuration"}},[a._v("Configuration")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#immuadmin"}},[a._v("immuadmin")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#immugw-service"}},[a._v("immugw service")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#use-immugw"}},[a._v("Use immugw")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#api"}},[a._v("API")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#auditor"}},[a._v("Auditor")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#license"}},[a._v("License")])])]),a._v(" "),s("h2",{attrs:{id:"latest-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[a._v("#")]),a._v(" Latest binaries")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immugw/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[a._v("Get the latest builds"),s("OutboundLink")],1)]),a._v(" "),s("h2",{attrs:{id:"build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[a._v("#")]),a._v(" Build")]),a._v(" "),s("p",[a._v("clone the immugw repository locally")]),a._v(" "),s("p",[a._v("'git clone https://github.com/codenotary/immugw.git'")]),a._v(" "),s("h3",{attrs:{id:"linux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immugw-static\n")])])]),s("h3",{attrs:{id:"macos"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[a._v("#")]),a._v(" MacOS")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immugw-static\n")])])]),s("h3",{attrs:{id:"windows"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[a._v("#")]),a._v(" Windows")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immugw-static\n")])])]),s("h2",{attrs:{id:"docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[a._v("#")]),a._v(" Docker")]),a._v(" "),s("h3",{attrs:{id:"build-your-own-docker-container-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[a._v("#")]),a._v(" build your own Docker container image")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker build -t myown/immugw:latest -f Dockerfile "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v("\n")])])]),s("h3",{attrs:{id:"run-immugw-in-a-container"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw-in-a-container"}},[a._v("#")]),a._v(" run immugw in a container")]),a._v(" "),s("p",[a._v("Make sure to point to the immudb system using the environment variable IMMUGW_IMMUDB_ADDRESS")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("docker run -it -d -p 3323:3323 --name immugw --env IMMUGW_IMMUDB_ADDRESS=immudb codenotary/immugw:latest\n")])])]),s("h2",{attrs:{id:"run-immugw"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw"}},[a._v("#")]),a._v(" Run immugw")]),a._v(" "),s("p",[a._v("Simply run "),s("code",[a._v("./immugw -d")]),a._v(" to start immugw on the same machine as immudb (test or dev environment) or pointing to the remote immudb system "),s("code",[a._v('./immugw --immudb-address "immudb-server"')]),a._v(".")]),a._v(" "),s("p",[a._v("If you want to stop immugw în that case you need to find the process "),s("code",[a._v("ps -ax | grep immugw")]),a._v(" and then "),s("code",[a._v("kill -15 ")]),a._v(". Windows PowerShell would be "),s("code",[a._v("Get-Process immugw* | Stop-Process")]),a._v(".")]),a._v(" "),s("h2",{attrs:{id:"configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[a._v("#")]),a._v(" Configuration")]),a._v(" "),s("p",[a._v("immugw can be configured using environment variables, flags or a config file.")]),a._v(" "),s("ul",[s("li",[s("code",[a._v("immugw --help")]),a._v(" shows you all available flags and environment variables.")]),a._v(" "),s("li",[s("code",[a._v("/etc/immudb/immugw.toml")]),a._v(" is used as a default configuration file")])]),a._v(" "),s("h3",{attrs:{id:"environment-variables"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[a._v("#")]),a._v(" Environment variables")]),a._v(" "),s("p",[a._v("The environment variables are the most popular way to configure Docker container:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("0.0")]),a._v(".0.0\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3323")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DIR")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(".\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PIDFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_LOGFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DETACHED")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_INTERVAL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("5m\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_USERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("immugwauditor\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_PASSWORD")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n")])])]),s("h2",{attrs:{id:"immuadmin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[a._v("#")]),a._v(" immuadmin")]),a._v(" "),s("p",[a._v("immuadmin can be used to install and manage the immugw service for Windows and Linux. immuadmin is part of the immugw repository.\n'git clone https://github.com/codenotary/immudb.git'")]),a._v(" "),s("h3",{attrs:{id:"linux-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux-2"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static \n")])])]),s("h3",{attrs:{id:"windows-by-component"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows-by-component"}},[a._v("#")]),a._v(" Windows (by component)")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h2",{attrs:{id:"immugw-service"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw-service"}},[a._v("#")]),a._v(" immugw service")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("# install immugw service\n./immugw service install\n\n# check current immugw service status\n./immugw service status\n\n# stop immugw service\n./immugw service stop\n\n# start immugw service\n./immugw service start\n")])])]),s("p",[a._v("The linux service is using the following defaults:")]),a._v(" "),s("table",[s("thead",[s("tr",[s("th",[a._v("File or configuration")]),a._v(" "),s("th",[a._v("location")])])]),a._v(" "),s("tbody",[s("tr",[s("td",[a._v("all configuration files")]),a._v(" "),s("td",[a._v("/etc/immudb")])]),a._v(" "),s("tr",[s("td",[a._v("pid file")]),a._v(" "),s("td",[a._v("/var/lib/immudb/immugw.pid")])]),a._v(" "),s("tr",[s("td",[a._v("log files")]),a._v(" "),s("td",[a._v("/var/log/immudb")])])])]),a._v(" "),s("h2",{attrs:{id:"use-immugw"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-immugw"}},[a._v("#")]),a._v(" Use immugw")]),a._v(" "),s("p",[s("code",[a._v("immugw help")]),a._v(" is a good starting point")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("immu gateway: a smart REST proxy "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immudb - the lightweight, high-speed immutable database "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" systems and applications.\nIt exposes all gRPC methods with a REST interface "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("while")]),a._v(" wrapping all SAFE endpoints with a verification service.\n\nEnvironment variables:\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3323")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DIR")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(".\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PIDFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_LOGFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DETACHED")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"false"')]),a._v("\n IMMUGW_AUDIT_INTERVAL "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"5m"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_USERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_PASSWORD")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v("\n\nUsage:\n immugw "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("flags"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n immugw "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("command"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\nAvailable Commands:\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" Help about any "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v("\n version Show the immugw version\n\nFlags:\n -a, --address string immugw "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --audit "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" audit mode "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("continuously fetches latest root from server, checks consistency against a "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("local")]),a._v(" root and saves the latest root locally"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --audit-interval duration interval at "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("which")]),a._v(" audit should run "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default 5m0s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --audit-password string immudb password used to login during audit\n --audit-username string immudb username used to login during audit "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"immugwauditor"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --certificate string server certificate "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --clientcas string clients certificates list. Aka certificate authority "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --config string config "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default path are configs or "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v(" Default filename is immugw.toml"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -d, --detached run immudb "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("in")]),a._v(" background\n --dir string program files folder "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -h, --help "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immugw\n -k, --immudb-address string immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -j, --immudb-port int immudb port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --logfile string log path with filename. E.g. /tmp/immugw/immugw.log\n -m, --mtls "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" mutual tls\n --pidfile string pid path with filename. E.g. /var/run/immugw.pid\n --pkey string server private key path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -p, --port int immugw port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3323")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --servername string used to verify the "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("hostname")]),a._v(" on the returned certificates "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n\nUse "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"immugw [command] --help"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("more")]),a._v(" information about a command.\n")])])]),s("h2",{attrs:{id:"api"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api"}},[a._v("#")]),a._v(" API")]),a._v(" "),s("h3",{attrs:{id:"immugw-restful-api-reference"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw-restful-api-reference"}},[a._v("#")]),a._v(" immugw RESTful API reference")]),a._v(" "),s("p",[a._v("You can find the swagger schema here:")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/pkg/api/gw.schema.swagger.json",target:"_blank",rel:"noopener noreferrer"}},[a._v("swagger immugw"),s("OutboundLink")],1)]),a._v(" "),s("p",[a._v("If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker run -d -it -p "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("8081")]),a._v(":8080 --name swagger-immugw -v "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("PWD")]),a._v("}")]),a._v("/pkg/api/gw.schema.swagger.json:/openapi.json -e "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("SWAGGER_JSON")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/openapi.json swaggerapi/swagger-ui\n")])])]),s("h3",{attrs:{id:"curl-examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#curl-examples"}},[a._v("#")]),a._v(" Curl examples")]),a._v(" "),s("p",[s("RouterLink",{attrs:{to:"/immugw/curl.html"}},[a._v("Curl code snippets")])],1),a._v(" "),s("h2",{attrs:{id:"auditor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#auditor"}},[a._v("#")]),a._v(" Auditor")]),a._v(" "),s("p",[a._v("Auditors make sure that the data consistency is guaranteed inside immudb. They do a random key value verification and an interval-based Merkle-tree consistency check (5 minutes default). The immugw and the immuclient provide auditor functionality that runs as a daemon process. It is recommended to run immugw and immuclient on different machines than immudb, so any tampering on the immudb server is automatically detected.")]),a._v(" "),s("p",[a._v("The results of the auditors are provided by a Prometheus end point.")]),a._v(" "),s("h3",{attrs:{id:"immugw-auditor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw-auditor"}},[a._v("#")]),a._v(" immugw auditor")]),a._v(" "),s("p",[a._v("Start interactive:\n"),s("code",[a._v("immugw --audit")])]),a._v(" "),s("p",[a._v("Service configuration:\nTo enable auditor, you need to edit /etc/immudb/immugw.toml and add the following section:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("audit "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# false is default")]),a._v("\naudit-interval "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"5m"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# suffixes: "s", "m", "h", examples: 10s, 5m 1h')]),a._v("\naudit-username "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# when immudb authentication is enabled, use read-only user credentials here")]),a._v("\naudit-password "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# and the password")]),a._v("\n")])])]),s("p",[a._v("Restart the immugw service afterwards - "),s("code",[a._v("immuadmin service immugw restart")])]),a._v(" "),s("p",[s("strong",[a._v("immugw Port: 9476 - http://immugw-auditor:9476/metrics")])]),a._v(" "),s("p",[a._v("example output:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_curr_root_per_server Current root index used for the latest audit.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_curr_root_per_server gauge")]),a._v("\nimmugw_audit_curr_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_prev_root_per_server Previous root index used for the latest audit.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_prev_root_per_server gauge")]),a._v("\nimmugw_audit_prev_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_result_per_server gauge")]),a._v("\nimmugw_audit_result_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_run_at_per_server gauge")]),a._v("\nimmugw_audit_run_at_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(".590757033502689e+09\n")])])]),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),s("p",[a._v("immugw is "),s("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),s("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{458:function(a,t,s){"use strict";s.r(t);var e=s(10),r=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"immugw"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw"}},[a._v("#")]),a._v(" immugw")]),a._v(" "),s("p",[a._v("immugw is the intelligent REST proxy that connects to immudb and provides a RESTful interface for applications. We recommend running immudb and immugw on separate machines to enhance security\nimmugw can be found in a different "),s("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[a._v("repository"),s("OutboundLink")],1)]),a._v(" "),s("h2",{attrs:{id:"contents"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[a._v("#")]),a._v(" Contents")]),a._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#latest-binaries"}},[a._v("Latest binaries")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#build"}},[a._v("Build")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#docker"}},[a._v("Docker")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#run-immugw"}},[a._v("Run immugw")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#configuration"}},[a._v("Configuration")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#immuadmin"}},[a._v("immuadmin")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#immugw-service"}},[a._v("immugw service")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#use-immugw"}},[a._v("Use immugw")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#api"}},[a._v("API")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#auditor"}},[a._v("Auditor")])]),a._v(" "),s("li",[s("a",{attrs:{href:"#license"}},[a._v("License")])])]),a._v(" "),s("h2",{attrs:{id:"latest-binaries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#latest-binaries"}},[a._v("#")]),a._v(" Latest binaries")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immugw/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[a._v("Get the latest builds"),s("OutboundLink")],1)]),a._v(" "),s("h2",{attrs:{id:"build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[a._v("#")]),a._v(" Build")]),a._v(" "),s("p",[a._v("clone the immugw repository locally")]),a._v(" "),s("p",[a._v("'git clone https://github.com/codenotary/immugw.git'")]),a._v(" "),s("h3",{attrs:{id:"linux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immugw-static\n")])])]),s("h3",{attrs:{id:"macos"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[a._v("#")]),a._v(" MacOS")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("darwin "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immugw-static\n")])])]),s("h3",{attrs:{id:"windows"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[a._v("#")]),a._v(" Windows")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immugw-static\n")])])]),s("h2",{attrs:{id:"docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[a._v("#")]),a._v(" Docker")]),a._v(" "),s("h3",{attrs:{id:"build-your-own-docker-container-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-docker-container-image"}},[a._v("#")]),a._v(" build your own Docker container image")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker build -t myown/immugw:latest -f Dockerfile "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v("\n")])])]),s("h3",{attrs:{id:"run-immugw-in-a-container"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw-in-a-container"}},[a._v("#")]),a._v(" run immugw in a container")]),a._v(" "),s("p",[a._v("Make sure to point to the immudb system using the environment variable IMMUGW_IMMUDB_ADDRESS")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("docker run -it -d -p 3323:3323 --name immugw --env IMMUGW_IMMUDB_ADDRESS=immudb codenotary/immugw:latest\n")])])]),s("h2",{attrs:{id:"run-immugw"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw"}},[a._v("#")]),a._v(" Run immugw")]),a._v(" "),s("p",[a._v("Simply run "),s("code",[a._v("./immugw -d")]),a._v(" to start immugw on the same machine as immudb (test or dev environment) or pointing to the remote immudb system "),s("code",[a._v('./immugw --immudb-address "immudb-server"')]),a._v(".")]),a._v(" "),s("p",[a._v("If you want to stop immugw în that case you need to find the process "),s("code",[a._v("ps -ax | grep immugw")]),a._v(" and then "),s("code",[a._v("kill -15 ")]),a._v(". Windows PowerShell would be "),s("code",[a._v("Get-Process immugw* | Stop-Process")]),a._v(".")]),a._v(" "),s("h2",{attrs:{id:"configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[a._v("#")]),a._v(" Configuration")]),a._v(" "),s("p",[a._v("immugw can be configured using environment variables, flags or a config file.")]),a._v(" "),s("ul",[s("li",[s("code",[a._v("immugw --help")]),a._v(" shows you all available flags and environment variables.")]),a._v(" "),s("li",[s("code",[a._v("/etc/immudb/immugw.toml")]),a._v(" is used as a default configuration file")])]),a._v(" "),s("h3",{attrs:{id:"environment-variables"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[a._v("#")]),a._v(" Environment variables")]),a._v(" "),s("p",[a._v("The environment variables are the most popular way to configure Docker container:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("0.0")]),a._v(".0.0\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3323")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DIR")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(".\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PIDFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_LOGFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DETACHED")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_INTERVAL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("5m\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_USERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("immugwauditor\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_PASSWORD")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n")])])]),s("h2",{attrs:{id:"immuadmin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immuadmin"}},[a._v("#")]),a._v(" immuadmin")]),a._v(" "),s("p",[a._v("immuadmin can be used to install and manage the immugw service for Windows and Linux. immuadmin is part of the immugw repository.\n'git clone https://github.com/codenotary/immudb.git'")]),a._v(" "),s("h3",{attrs:{id:"linux-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linux-2"}},[a._v("#")]),a._v(" Linux")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("linux "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static \n")])])]),s("h3",{attrs:{id:"windows-by-component"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#windows-by-component"}},[a._v("#")]),a._v(" Windows (by component)")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOOS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("windows "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GOARCH")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amd64 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" immuadmin-static\n")])])]),s("h2",{attrs:{id:"immugw-service"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw-service"}},[a._v("#")]),a._v(" immugw service")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("# install immugw service\n./immugw service install\n\n# check current immugw service status\n./immugw service status\n\n# stop immugw service\n./immugw service stop\n\n# start immugw service\n./immugw service start\n")])])]),s("p",[a._v("The linux service is using the following defaults:")]),a._v(" "),s("table",[s("thead",[s("tr",[s("th",[a._v("File or configuration")]),a._v(" "),s("th",[a._v("location")])])]),a._v(" "),s("tbody",[s("tr",[s("td",[a._v("all configuration files")]),a._v(" "),s("td",[a._v("/etc/immudb")])]),a._v(" "),s("tr",[s("td",[a._v("pid file")]),a._v(" "),s("td",[a._v("/var/lib/immudb/immugw.pid")])]),a._v(" "),s("tr",[s("td",[a._v("log files")]),a._v(" "),s("td",[a._v("/var/log/immudb")])])])]),a._v(" "),s("h2",{attrs:{id:"use-immugw"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-immugw"}},[a._v("#")]),a._v(" Use immugw")]),a._v(" "),s("p",[s("code",[a._v("immugw help")]),a._v(" is a good starting point")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("immu gateway: a smart REST proxy "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immudb - the lightweight, high-speed immutable database "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" systems and applications.\nIt exposes all gRPC methods with a REST interface "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("while")]),a._v(" wrapping all SAFE endpoints with a verification service.\n\nEnvironment variables:\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3323")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_ADDRESS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_IMMUDB_PORT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DIR")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(".\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PIDFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_LOGFILE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_DETACHED")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_MTLS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_SERVERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("localhost\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_PKEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/private/localhost.key.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CERTIFICATE")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/4_client/certs/localhost.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_CLIENTCAS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("./tools/mtls/2_intermediate/certs/ca-chain.cert.pem\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"false"')]),a._v("\n IMMUGW_AUDIT_INTERVAL "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"5m"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_USERNAME")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("IMMUGW_AUDIT_PASSWORD")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v("\n\nUsage:\n immugw "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("flags"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n immugw "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("command"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\nAvailable Commands:\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" Help about any "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v("\n version Show the immugw version\n\nFlags:\n -a, --address string immugw "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --audit "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" audit mode "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("continuously fetches latest root from server, checks consistency against a "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("local")]),a._v(" root and saves the latest root locally"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --audit-interval duration interval at "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("which")]),a._v(" audit should run "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default 5m0s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --audit-password string immudb password used to login during audit\n --audit-username string immudb username used to login during audit "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"immugwauditor"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --certificate string server certificate "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/certs/localhost.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --clientcas string clients certificates list. Aka certificate authority "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --config string config "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default path are configs or "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),a._v(" Default filename is immugw.toml"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -d, --detached run immudb "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("in")]),a._v(" background\n --dir string program files folder "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -h, --help "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" immugw\n -k, --immudb-address string immudb "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("host")]),a._v(" address "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -j, --immudb-port int immudb port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3322")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --logfile string log path with filename. E.g. /tmp/immugw/immugw.log\n -m, --mtls "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" mutual tls\n --pidfile string pid path with filename. E.g. /var/run/immugw.pid\n --pkey string server private key path "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./tools/mtls/4_client/private/localhost.key.pem"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n -p, --port int immugw port number "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3323")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n --servername string used to verify the "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("hostname")]),a._v(" on the returned certificates "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("default "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n\nUse "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"immugw [command] --help"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("more")]),a._v(" information about a command.\n")])])]),s("h2",{attrs:{id:"api"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api"}},[a._v("#")]),a._v(" API")]),a._v(" "),s("h3",{attrs:{id:"immugw-restful-api-reference"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw-restful-api-reference"}},[a._v("#")]),a._v(" immugw RESTful API reference")]),a._v(" "),s("p",[a._v("You can find the swagger schema here:")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/pkg/api/gw.schema.swagger.json",target:"_blank",rel:"noopener noreferrer"}},[a._v("swagger immugw"),s("OutboundLink")],1)]),a._v(" "),s("p",[a._v("If you want to run the Swagger UI, simply run the following Docker command after you cloned this repo:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("docker run -d -it -p "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("8081")]),a._v(":8080 --name swagger-immugw -v "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("PWD")]),a._v("}")]),a._v("/pkg/api/gw.schema.swagger.json:/openapi.json -e "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("SWAGGER_JSON")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/openapi.json swaggerapi/swagger-ui\n")])])]),s("h3",{attrs:{id:"curl-examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#curl-examples"}},[a._v("#")]),a._v(" Curl examples")]),a._v(" "),s("p",[s("RouterLink",{attrs:{to:"/immugw/curl.html"}},[a._v("Curl code snippets")])],1),a._v(" "),s("h2",{attrs:{id:"auditor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#auditor"}},[a._v("#")]),a._v(" Auditor")]),a._v(" "),s("p",[a._v("Auditors make sure that the data consistency is guaranteed inside immudb. They do a random key value verification and an interval-based Merkle-tree consistency check (5 minutes default). The immugw and the immuclient provide auditor functionality that runs as a daemon process. It is recommended to run immugw and immuclient on different machines than immudb, so any tampering on the immudb server is automatically detected.")]),a._v(" "),s("p",[a._v("The results of the auditors are provided by a Prometheus end point.")]),a._v(" "),s("h3",{attrs:{id:"immugw-auditor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#immugw-auditor"}},[a._v("#")]),a._v(" immugw auditor")]),a._v(" "),s("p",[a._v("Start interactive:\n"),s("code",[a._v("immugw --audit")])]),a._v(" "),s("p",[a._v("Service configuration:\nTo enable auditor, you need to edit /etc/immudb/immugw.toml and add the following section:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("audit "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# false is default")]),a._v("\naudit-interval "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"5m"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# suffixes: "s", "m", "h", examples: 10s, 5m 1h')]),a._v("\naudit-username "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# when immudb authentication is enabled, use read-only user credentials here")]),a._v("\naudit-password "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# and the password")]),a._v("\n")])])]),s("p",[a._v("Restart the immugw service afterwards - "),s("code",[a._v("immuadmin service immugw restart")])]),a._v(" "),s("p",[s("strong",[a._v("immugw Port: 9476 - http://immugw-auditor:9476/metrics")])]),a._v(" "),s("p",[a._v("example output:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_curr_root_per_server Current root index used for the latest audit.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_curr_root_per_server gauge")]),a._v("\nimmugw_audit_curr_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_prev_root_per_server Previous root index used for the latest audit.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_prev_root_per_server gauge")]),a._v("\nimmugw_audit_prev_root_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_result_per_server Latest audit result (1 = ok, 0 = tampered).")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_result_per_server gauge")]),a._v("\nimmugw_audit_result_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# HELP immugw_audit_run_at_per_server Timestamp in unix seconds at which latest audit run.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# TYPE immugw_audit_run_at_per_server gauge")]),a._v("\nimmugw_audit_run_at_per_server"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("server_address"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:3322"')]),a._v(",server_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"br8eugq036tfln0ct6o0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(".590757033502689e+09\n")])])]),s("h2",{attrs:{id:"license"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[a._v("#")]),a._v(" License")]),a._v(" "),s("p",[a._v("immugw is "),s("a",{attrs:{href:"https://github.com/codenotary/immugw/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache v2.0 License"),s("OutboundLink")],1),a._v(".")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/43.086c20bf.js b/docs/assets/js/43.086c20bf.js new file mode 100644 index 0000000000..431d3d3df0 --- /dev/null +++ b/docs/assets/js/43.086c20bf.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{459:function(t,a,e){"use strict";e.r(a);var n=e(10),s=Object(n.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"developer-jumpstart-for-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#developer-jumpstart-for-immudb"}},[t._v("#")]),t._v(" Developer Jumpstart for immudb")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://slack.vchain.us/",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/join%20slack-%23immutability-brightgreen.svg",alt:"Slack"}}),e("OutboundLink")],1),t._v(" "),e("a",{attrs:{href:"https://groups.google.com/group/immudb",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/discuss-immudb%40googlegroups.com-blue.svg",alt:"Discuss at immudb@googlegroups.com"}}),e("OutboundLink")],1),t._v(" "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/github/license/codenotary/immudb4j",alt:"License"}}),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"contents"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"#introduction"}},[t._v("Introduction")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"#what-is-immudb"}},[t._v("What is immudb")])]),t._v(" "),e("li",[e("a",{attrs:{href:"#why-use-immudb"}},[t._v("Why use immudb")])])])]),t._v(" "),e("li",[e("a",{attrs:{href:"#installing-the-immudb-database-server"}},[t._v("Installing the immudb database server")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"#get-the-docker-image"}},[t._v("Get the Docker Image")])]),t._v(" "),e("li",[e("a",{attrs:{href:"#download-the-installer-for-the-latest-release"}},[t._v("Download the installer for the latest release")])])])]),t._v(" "),e("li",[e("a",{attrs:{href:"#creating-an-immudb-client-instance-in-your-chosen-programming-language"}},[t._v("Creating an immudb client instance in your chosen programming language")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"#integration"}},[t._v("Integration")])]),t._v(" "),e("li",[e("a",{attrs:{href:"#connection-and-authentication"}},[t._v("Connection and authentication")])]),t._v(" "),e("li",[e("a",{attrs:{href:"#tamperproof-read-and-write"}},[t._v("Tamperproof read and write")])]),t._v(" "),e("li",[e("a",{attrs:{href:"#integration"}},[t._v("Integration")])]),t._v(" "),e("li",[e("a",{attrs:{href:"#to-get-going-quickly"}},[t._v("To get going quickly")])])])]),t._v(" "),e("li",[e("a",{attrs:{href:"#conclusion"}},[t._v("Conclusion")])])]),t._v(" "),e("h2",{attrs:{id:"introduction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),e("p",[t._v("This guide helps developers quickly start with CodeNotary's immudb database and client. It guides you from start to finish with code samples in Node.js, Java, Python, Go, and .Net. After completing the guide, you will have the basic concepts necessary to begin using immudb within your organization.")]),t._v(" "),e("p",[t._v("Note: If you're using another development language, please read up on our "),e("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),e("OutboundLink")],1),t._v(" option.")]),t._v(" "),e("img",{attrs:{src:"https://github.com/codenotary/immudb-docs/raw/master/src/immudb/component-diagram.png"}}),t._v(" "),e("h3",{attrs:{id:"what-is-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-is-immudb"}},[t._v("#")]),t._v(" What is immudb?")]),t._v(" "),e("p",[t._v("A lightweight, high-speed, immutable database solution capable of processing millions of transactions a second. It provides cryptographic verification of your data integrity without the cost and complexity associated with classic blockchain. You have the flexibility to host immudb on-premise or in the cloud.")]),t._v(" "),e("table",{attrs:{border:"0"}},[e("tr",[e("td",{attrs:{width:"33%",valign:"top",align:"center"}},[e("h3",[t._v("Immutable")]),t._v("\n\t\t\tData is never overwritten. See the history of data updates.\n\t\t")]),t._v(" "),e("td",{attrs:{width:"33%",valign:"top",align:"center"}},[e("h3",[t._v("Auditable")]),t._v("\n\t\t\tTamper-evident history system ensures data authenticity.\n\t\t")]),t._v(" "),e("td",{attrs:{width:"33%",valign:"top",align:"center"}},[e("h3",[t._v("Secure")]),t._v("\n\t\t\tData ownership is verifiable by clients and auditors.\n\t\t")])]),t._v(" "),e("tr",[e("td",{attrs:{align:"center"}},[e("img",{attrs:{src:"https://codenotary.io/images/jumpstart/immutable.svg",width:"80px"}})]),t._v(" "),e("td",{attrs:{align:"center"}},[e("img",{attrs:{src:"https://codenotary.io/images/jumpstart/auditable.svg",width:"80px"}})]),t._v(" "),e("td",{attrs:{align:"center"}},[e("img",{attrs:{src:"https://codenotary.io/images/jumpstart/secure.svg",width:"80px"}})])])]),t._v(" "),e("p",[t._v("The immudb is a non-relational, NoSQL database. Data is a collection of key-values with time stamps. You can add records, but deletion or modification isn’t allowed making your data immutable. When a record's value changes over time (such as a bank balance), you can get multiple instances with different time stamps to give you the complete change history of that record. Store a variety of common data types, verification checksums, or JSONs.")]),t._v(" "),e("p",[t._v("Depending on your use case, immudb might function as your application's primary or as a secondary database. As a secondary, complimentary database, use immudb to cross-check the data integrity of your important data (by verifying checksums or comparing stored data values). A secondary database enables you to quickly use immudb without completely re-engineering your existing application.")]),t._v(" "),e("ul",[e("li",[t._v("For additional technical background on immudb and its performance, see the "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/README.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Readme"),e("OutboundLink")],1),t._v(" within CodeNotary's immudb GitHub Project.")]),t._v(" "),e("li",[t._v("For additional information on immudb, see our "),e("a",{attrs:{href:"https://docs.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("h3",{attrs:{id:"why-use-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#why-use-immudb"}},[t._v("#")]),t._v(" Why use immudb?")]),t._v(" "),e("p",[e("img",{attrs:{align:"right",src:"https://codenotary.io/images/immudb/mascot.png",width:"240px"}}),t._v("It ensures the integrity of your organization's data. While Cyber Security is an important part of your organization’s business plan, immudb provides another layer of security to ensure data integrity even in the event your perimeter is breached during an attack. Data cannot be deleted or modified once stored into immudb. Additions of new data are logged and auditable, enabling you to view any suspect additions made during the intrusion.")]),t._v(" "),e("p",[t._v("Use cases:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("Integration with your DevOps ensures code security throughout the development and deployment process. Embed immudb into your "),e("a",{attrs:{href:"https://codenotary.io/blog/securing-your-azure-devops-ecosystem-jenkins-and-kubernetes-aks/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Azure DevOps"),e("OutboundLink")],1),t._v(" with Jenkins and Kubernetes. Use just "),e("a",{attrs:{href:"https://codenotary.io/blog/jenkins-build-deployment-pipeline-a-how-to-for-ensuring-integrity/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Jenkins"),e("OutboundLink")],1),t._v(". Alternatively, integrate with "),e("a",{attrs:{href:"https://codenotary.io/blog/fully-trusted-gitlab-pipeline/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Git Lab"),e("OutboundLink")],1),t._v(" or "),e("a",{attrs:{href:"https://codenotary.io/blog/use-github-actions-for-validated-builds/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("li",[e("p",[t._v("Guarantee "),e("a",{attrs:{href:"https://codenotary.io/blog/file-integrity-monitoring-change-management/",target:"_blank",rel:"noopener noreferrer"}},[t._v("File Integrity"),e("OutboundLink")],1),t._v(" of your critical data. Examples include storing your organization's sensitive financial, credit card transactional, invoices, contracts, educational transcripts, and other important data.")])]),t._v(" "),e("li",[e("p",[t._v("Ensure integrity of your legal "),e("a",{attrs:{href:"https://codenotary.io/blog/immutably-store-or-guarantee-the-immutability-of-documents-and-invoices-for-compliance-reasons/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Documents and Invoices"),e("OutboundLink")],1),t._v(", contracts, forms, and your downloads and emails.")])]),t._v(" "),e("li",[e("p",[t._v("Save your Internet of Things (IoT) sensor data as a failsafe plan for loss of data.")])]),t._v(" "),e("li",[e("p",[t._v("Keep your investment guidelines or stock market data tamperproof for your investment bank or client financial portfolios.")])]),t._v(" "),e("li",[e("p",[t._v("Store important log files to keep them tamperproof to meet regulations like PCI compliance.")])]),t._v(" "),e("li",[e("p",[t._v("Protect medical data, test results, or recipes from alteration.")])])]),t._v(" "),e("h2",{attrs:{id:"installing-the-immudb-database-server"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-immudb-database-server"}},[t._v("#")]),t._v(" Installing the immudb database server")]),t._v(" "),e("p",[t._v("In this section, you will install the immudb database server. You have the following options for running immudb database server:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("For those using Docker, get and launch our image from Docker Hub.")])]),t._v(" "),e("li",[e("p",[t._v("Download our latest immudb release from GitHub.")])]),t._v(" "),e("li",[e("p",[t._v("For the sake of brevity, this Quick Start leaves out getting and compiling the immudb source (refer to the Readme "),e("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1),t._v(" to use this method).")])])]),t._v(" "),e("h3",{attrs:{id:"get-the-docker-image"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#get-the-docker-image"}},[t._v("#")]),t._v(" Get the Docker Image")]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Pull the immudb Docker Image from "),e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("Docker Hub"),e("OutboundLink")],1),t._v(". Below are the commands when using a Linux shell.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker pull codenotary/immudb:latest\n")])])])]),t._v(" "),e("li",[e("p",[t._v("You can run immudb in a container using the code that follows.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 --name immudb codenotary/immudb:latest\n")])])])]),t._v(" "),e("li",[e("p",[t._v("Your immudb should now be up and running. Check your container logs to verify this.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker logs immudb\n")])])])]),t._v(" "),e("li",[e("p",[t._v("Skip down to the section about "),e("a",{attrs:{href:"#creating-an-immudb-client-instance-in-your-chosen-programming-language"}},[t._v("Creating an immudb client instance in your chosen programming language")]),t._v(".")])])]),t._v(" "),e("h3",{attrs:{id:"download-the-installer-for-the-latest-release"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#download-the-installer-for-the-latest-release"}},[t._v("#")]),t._v(" Download the installer for the latest release")]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Download the latest release from our "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("li",[e("p",[t._v("Run immudb. Linux shell commands are shown below.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("./immudb "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Runs immudb in the foreground")]),t._v("\n./immudb -d "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Runs immudb in the background")]),t._v("\n")])])]),e("ul",[e("li",[t._v("immudb also runs as a service which is explained in this "),e("a",{attrs:{href:"https://github.com/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("Readme"),e("OutboundLink")],1),t._v(" to use this method).")])])]),t._v(" "),e("li",[e("p",[t._v("To stop immudb, find the process "),e("code",[t._v("ps -ax | grep immudb")]),t._v(" and then "),e("code",[t._v("kill -15 ")]),t._v(". Alternatively, the Windows PowerShell commands are "),e("code",[t._v("Get-Process immudb* | Stop-Process")]),t._v(".")])]),t._v(" "),e("li",[e("p",[t._v("Continue with the section that follows.")])])]),t._v(" "),e("h2",{attrs:{id:"creating-an-immudb-client"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-immudb-client"}},[t._v("#")]),t._v(" Creating an immudb client")]),t._v(" "),e("h3",{attrs:{id:"integration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#integration"}},[t._v("#")]),t._v(" Integration")]),t._v(" "),e("p",[t._v("Integrate the immudb Client into your application using the official Software Development Kits (SDKs).")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("Tab",{attrs:{label:"Go"}},[e("div",{staticClass:"language-shell script extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Make sure your project is using Go Modules")]),t._v("\ngo mod init app\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Install immudb sdk")]),t._v("\ngo get -u github.com/codenotary/immudb\n")])])]),e("div",{staticClass:"language-go extra-class"},[e("pre",{pre:!0,attrs:{class:"language-go"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Then import the package")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"github.com/codenotary/immudb/pkg/client"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),e("Tab",{attrs:{label:"Java"}},[e("p",[t._v("Just include immudb4j as a dependency in your project:")]),t._v(" "),e("p",[t._v("if using "),e("code",[t._v("Maven")]),t._v(":")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("io.codenotary"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("immudb4j"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("0.2.0"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[t._v("if using "),e("code",[t._v("Gradle")]),t._v(":")]),t._v(" "),e("div",{staticClass:"language-groovy extra-class"},[e("pre",{pre:!0,attrs:{class:"language-groovy"}},[e("code",[t._v(" compile "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("'io.codenotary:immudb4j:0.2.0'")]),t._v("\n")])])]),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb4j",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java SDK repository"),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("immudb4j is currently hosted on both "),e("a",{attrs:{href:"https://search.maven.org/artifact/io.codenotary/immudb4j",target:"_blank",rel:"noopener noreferrer"}},[t._v("Maven Central"),e("OutboundLink")],1),t._v(" and "),e("a",{attrs:{href:"https://docs.github.com/en/packages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Packages"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("Tab",{attrs:{label:"Python"}},[e("p",[t._v("Install the package using pip:")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[t._v(" pip3 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" immudb-py\n")])])]),e("p",[t._v("Then import the client as follows:")]),t._v(" "),e("div",{staticClass:"language-python extra-class"},[e("pre",{pre:!0,attrs:{class:"language-python"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" immudb "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" ImmudbClient\n")])])]),e("p",[e("em",[t._v("Note")]),t._v(": immudb-py need "),e("code",[t._v("grpcio")]),t._v(" module from google. On Alpine linux, you need\nthese packages in order to correctly build (and install) grpcio:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("linux-headers")])]),t._v(" "),e("li",[e("code",[t._v("python3-dev")])]),t._v(" "),e("li",[e("code",[t._v("g++")])])]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb-py",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python SDK repository"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Node.js"}},[e("p",[t._v("Include the immudb-node as a dependency in your project.")]),t._v(" "),e("div",{staticClass:"language-javascript extra-class"},[e("pre",{pre:!0,attrs:{class:"language-javascript"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" immudbClient "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("'immudb-node'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb-node",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js SDK repository"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:".Net"}},[e("p",[t._v("Use Microsoft's "),e("a",{attrs:{href:"https://www.nuget.org/packages/Immudb4DotNet/",target:"_blank",rel:"noopener noreferrer"}},[t._v("NuGet"),e("OutboundLink")],1),t._v(" package manager to get immudb4DotNet.")]),t._v(" "),e("p",[t._v("Creating a Client.")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("Using the default configuration.")]),t._v(" "),e("div",{staticClass:"language-csharp extra-class"},[e("pre",{pre:!0,attrs:{class:"language-csharp"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" client "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constructor-invocation class-name"}},[t._v("CodeNotary"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuDb"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuClient")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),e("li",[e("p",[t._v('The immudb implements IDisposable, so you can wrap it with "using".')]),t._v(" "),e("div",{staticClass:"language-csharp extra-class"},[e("pre",{pre:!0,attrs:{class:"language-csharp"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("using")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")])]),t._v(" client "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constructor-invocation class-name"}},[t._v("CodeNotary"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuDb"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuClient")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net SDK repository"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Others"}},[e("p",[t._v("If you're using another language, then read up on our "),e("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),e("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),e("h3",{attrs:{id:"connection-and-authentication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#connection-and-authentication"}},[t._v("#")]),t._v(" Connection and authentication")]),t._v(" "),e("p",[t._v("immudb runs on 3323 default port. Here we are connecting a client with default options and\nauthenticating using default username and password.\nIt's possible to modify defaults by opening immudb server config folder and changing "),e("code",[t._v("immudb.toml")]),t._v(" file.")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("Tab",{attrs:{label:"Go"}},[e("p",[t._v("Login method return a token needed in all interactions with the server.")]),t._v(" "),e("div",{staticClass:"language-go extra-class"},[e("pre",{pre:!0,attrs:{class:"language-go"}},[e("code",[t._v("client"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nctx "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// login with default username and password and storing a token")]),t._v("\nlr "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up an authenticated context that will be required in future operations")]),t._v("\nmd "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nctx "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),e("Tab",{attrs:{label:"Java"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("java sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Python"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("java sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Node.js"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("java sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:".Net"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("java sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Others"}},[e("p",[t._v("If you're using another development language, please read up on our "),e("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),e("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),e("h3",{attrs:{id:"tamperproof-read-and-write"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tamperproof-read-and-write"}},[t._v("#")]),t._v(" Tamperproof read and write")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("p",[t._v("You can write a key-value pair with built-in cryptographic verification. The client implements the mathematical validations transparently, while your application uses a traditional read or write function.")]),t._v(" "),e("Tab",{attrs:{label:"Go"}},[e("div",{staticClass:"language-go extra-class"},[e("pre",{pre:!0,attrs:{class:"language-go"}},[e("code",[t._v(" vi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("`hello world`")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Item inclusion verified %t\\n"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" vi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\titem"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Database consistency verified %t\\n"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%s\\n"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),e("Tab",{attrs:{label:"Java"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Python"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Node.js"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:".Net"}},[e("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),e("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),e("OutboundLink")],1)])]),t._v(" "),e("Tab",{attrs:{label:"Others"}},[e("p",[t._v("If you're using another development language, please read up on our "),e("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),e("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),e("h3",{attrs:{id:"to-get-going-quickly"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#to-get-going-quickly"}},[t._v("#")]),t._v(" To get going quickly:")]),t._v(" "),e("ul",[e("li",[t._v("Get the "),e("a",{attrs:{href:"https://github.com/codenotary/immudb-client-examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("immudb-client-example code"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("li",[t._v("Learn about the basic coding you will use to interact with your immudb client and database. This guide goes from start to finish, in creating a new client instance, writing and reading data, and much more.\nTake a look at the "),e("a",{attrs:{href:"/sdks-api"}},[t._v("SDKs API")]),t._v(" page.")])]),t._v(" "),e("h2",{attrs:{id:"conclusion"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[t._v("#")]),t._v(" Conclusion")]),t._v(" "),e("p",[t._v("Congratulations for completing the development quick start guide. You've been guided through the essentials you need to know to begin using CodeNotary's immudb solution.")]),t._v(" "),e("p",[t._v("You now have:")]),t._v(" "),e("ul",[e("li",[t._v("An immudb database server and are familiar with basic authentication.")]),t._v(" "),e("li",[t._v("An immudb client.")]),t._v(" "),e("li",[t._v("A new immudb database.")]),t._v(" "),e("li",[t._v("An instance of the immudb client running.")]),t._v(" "),e("li",[t._v("Gone through reading and writing data with and without cryptographic verification.")])]),t._v(" "),e("p",[t._v("We've only scratched the surface of immudb's capabilities. Here are some additional resources you might find helpful:")]),t._v(" "),e("ul",[e("li",[t._v("Learn more through our "),e("a",{attrs:{href:"https://docs.immudb.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("documentation"),e("OutboundLink")],1),t._v(".\n"),e("ul",[e("li",[t._v("Learn more about the immudb "),e("a",{attrs:{href:"https://docs.immudb.io/immudb/grpc-interface.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("API"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("li",[t._v("Try out "),e("a",{attrs:{href:"https://docs.immudb.io/immuadmin/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immuadmin"),e("OutboundLink")],1)])])]),t._v(" "),e("li",[t._v("Follow CodeNotary's "),e("a",{attrs:{href:"https://codenotary.io/blog",target:"_blank",rel:"noopener noreferrer"}},[t._v("blog"),e("OutboundLink")],1),t._v(" for more immudb articles and release announcements.")]),t._v(" "),e("li",[t._v("Additional technical background on immudb and its performance, see the "),e("a",{attrs:{href:"https://github.com/codenotary/immudb/blob/master/README.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Readme"),e("OutboundLink")],1),t._v(" within CodeNotary's immudb GitHub Project.\n"),e("img",{attrs:{align:"center",src:"https://codenotary.io/images/word-tree.png"}})])])],1)}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/42.e92eb4a3.js b/docs/assets/js/44.aa4124f2.js similarity index 99% rename from docs/assets/js/42.e92eb4a3.js rename to docs/assets/js/44.aa4124f2.js index 7237efef83..3c073400b6 100644 --- a/docs/assets/js/42.e92eb4a3.js +++ b/docs/assets/js/44.aa4124f2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{453:function(t,a,e){"use strict";e.r(a);var s=e(46),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"quickstart"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#quickstart"}},[t._v("#")]),t._v(" Quickstart")]),t._v(" "),e("p",[t._v("To get started extremely quick using Docker:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker network create immudbnet\ndocker run -d --net immudbnet -it --rm --name immudb -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 codenotary/immudb:latest\ndocker run -it --rm --net immudbnet --name immuclient codenotary/immuclient:latest -a immudb\n")])])]),e("h2",{attrs:{id:"download-the-binaries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#download-the-binaries"}},[t._v("#")]),t._v(" Download the binaries")]),t._v(" "),e("h3",{attrs:{id:"general"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[t._v("#")]),t._v(" General")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the latest builds"),e("OutboundLink")],1)]),t._v(" "),e("h3",{attrs:{id:"macos-specific"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#macos-specific"}},[t._v("#")]),t._v(" macOS specific")]),t._v(" "),e("p",[t._v("The community already added immudb to "),e("a",{attrs:{href:"https://formulae.brew.sh/formula/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("HomeBrew"),e("OutboundLink")],1),t._v(", therefore you can simply run")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("brew "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" immudb\n")])])]),e("p",[t._v("In case you want to run immudb as a service, please check the following "),e("a",{attrs:{href:"https://medium.com/swlh/how-to-use-launchd-to-run-services-in-macos-b972ed1e352",target:"_blank",rel:"noopener noreferrer"}},[t._v("guideline"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"build-the-binaries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-the-binaries"}},[t._v("#")]),t._v(" Build the binaries")]),t._v(" "),e("p",[t._v("To build the binaries yourself, simply clone this repo and run")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" all\n")])])]),e("h3",{attrs:{id:"linux-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux-by-component"}},[t._v("#")]),t._v(" Linux (by component)")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("linux "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static immuadmin-static immudb-static\n")])])]),e("h3",{attrs:{id:"macos-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#macos-by-component"}},[t._v("#")]),t._v(" MacOS (by component)")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("darwin "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static immuadmin-static immudb-static\n")])])]),e("h3",{attrs:{id:"windows-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows-by-component"}},[t._v("#")]),t._v(" Windows (by component)")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("windows "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static immuadmin-static immudb-static\n")])])]),e("h2",{attrs:{id:"first-start"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#first-start"}},[t._v("#")]),t._v(" First start")]),t._v(" "),e("h3",{attrs:{id:"run-immudb-binary"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb-binary"}},[t._v("#")]),t._v(" Run immudb binary")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# run immudb in the foreground")]),t._v("\n./immudb\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# run immudb in the background")]),t._v("\n./immudb -d\n")])])]),e("h3",{attrs:{id:"run-immudb-as-a-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb-as-a-service"}},[t._v("#")]),t._v(" Run immudb as a service")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# install immudb service")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# check current immudb service status")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" status\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stop immudb service")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" stop\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# start immudb service")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" start\n")])])]),e("p",[t._v("The linux service is using the following defaults:")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("File or configuration")]),t._v(" "),e("th",[t._v("location")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("all configuration files")]),t._v(" "),e("td",[t._v("/etc/immudb")])]),t._v(" "),e("tr",[e("td",[t._v("all data files")]),t._v(" "),e("td",[t._v("/var/lib/immudb")])]),t._v(" "),e("tr",[e("td",[t._v("pid file")]),t._v(" "),e("td",[t._v("/var/run/immudb.pid")])]),t._v(" "),e("tr",[e("td",[t._v("log files")]),t._v(" "),e("td",[t._v("/var/log/immudb")])])])]),t._v(" "),e("h3",{attrs:{id:"run-immugw-as-a-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw-as-a-service"}},[t._v("#")]),t._v(" Run immugw as a service")]),t._v(" "),e("p",[t._v("immugw can be found in a different "),e("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("repository"),e("OutboundLink")],1),t._v(". You can find a build guideline in the Readme of the repository.")]),t._v(" "),e("p",[t._v("Please make sure to build or download the immugw and immuadmin component and save them in the same work directory when installing the service.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# install immugw service")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# check current immugw service status")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" status\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stop immugw service")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" stop\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# start immugw service")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" start\n")])])]),e("p",[t._v("The linux service is using the following defaults:")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("File or configuration")]),t._v(" "),e("th",[t._v("location")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("all configuration files")]),t._v(" "),e("td",[t._v("/etc/immudb")])]),t._v(" "),e("tr",[e("td",[t._v("pid file")]),t._v(" "),e("td",[t._v("/var/run/immugw.pid")])]),t._v(" "),e("tr",[e("td",[t._v("log files")]),t._v(" "),e("td",[t._v("/var/log/immudb")])])])]),t._v(" "),e("h2",{attrs:{id:"docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[t._v("#")]),t._v(" Docker")]),t._v(" "),e("p",[t._v("If you just want to run immudb and connect using "),e("code",[t._v("immuclient")]),t._v(":")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker network create immudbnet\ndocker run -d --net immudbnet -it --rm --name immudb -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 codenotary/immudb:latest\ndocker run -it --rm --net immudbnet --name immuclient codenotary/immuclient:latest -a immudb\n")])])]),e("p",[t._v("All services and CLI components are also available as Docker images on "),e("a",{attrs:{href:"https://hub.docker.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("dockerhub"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Component")]),t._v(" "),e("th",[t._v("Container image")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("immudb")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immudb"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("immugw")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immugw"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("immuadmin")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immuadmin",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immuadmin"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("immuclient")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immuclient",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immuclient"),e("OutboundLink")],1)])])])]),t._v(" "),e("h3",{attrs:{id:"run-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb"}},[t._v("#")]),t._v(" Run immudb")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 --name immudb codenotary/immudb:latest\n")])])]),e("p",[t._v("run it with persistent data and listening to all interfaces:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 -v immudb:/var/lib/immudb --env "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0 --name immudb codenotary/immudb:latest\n")])])]),e("h3",{attrs:{id:"run-immugw"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw"}},[t._v("#")]),t._v(" Run immugw")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3323")]),t._v(":3323 --name immugw --env "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb codenotary/immugw:latest\n")])])]),e("h3",{attrs:{id:"run-immuadmin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immuadmin"}},[t._v("#")]),t._v(" Run immuadmin")]),t._v(" "),e("p",[t._v("You can either find immuadmin in the immudb container (/usr/local/bin/immuadmin) or run the Docker container to connect to the local immudb.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it --rm --name immuadmin codenotary/immuadmin:latest status\n")])])]),e("h3",{attrs:{id:"run-immuclient"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immuclient"}},[t._v("#")]),t._v(" Run immuclient")]),t._v(" "),e("p",[t._v("You can either find immuclient in the immudb container (/usr/local/bin/immuclient) or run the Docker container to connect to the local or remote immudb.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it --rm --name immuclient codenotary/immuclient:latest -a "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("immudb-host"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),e("h3",{attrs:{id:"build-the-container-images-yourself"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-the-container-images-yourself"}},[t._v("#")]),t._v(" Build the container images yourself")]),t._v(" "),e("p",[t._v("If you want to build the container images yourself, simply clone this repo and run:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker build -t myown/immudb:latest -f Dockerfile "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\ndocker build -t myown/immuadmin:latest -f Dockerfile.immuadmin "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\ndocker build -t myown/immuclient:latest -f Dockerfile.immuclient "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{460:function(t,a,e){"use strict";e.r(a);var s=e(10),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"quickstart"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#quickstart"}},[t._v("#")]),t._v(" Quickstart")]),t._v(" "),e("p",[t._v("To get started extremely quick using Docker:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker network create immudbnet\ndocker run -d --net immudbnet -it --rm --name immudb -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 codenotary/immudb:latest\ndocker run -it --rm --net immudbnet --name immuclient codenotary/immuclient:latest -a immudb\n")])])]),e("h2",{attrs:{id:"download-the-binaries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#download-the-binaries"}},[t._v("#")]),t._v(" Download the binaries")]),t._v(" "),e("h3",{attrs:{id:"general"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[t._v("#")]),t._v(" General")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/codenotary/immudb/releases/latest",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the latest builds"),e("OutboundLink")],1)]),t._v(" "),e("h3",{attrs:{id:"macos-specific"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#macos-specific"}},[t._v("#")]),t._v(" macOS specific")]),t._v(" "),e("p",[t._v("The community already added immudb to "),e("a",{attrs:{href:"https://formulae.brew.sh/formula/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("HomeBrew"),e("OutboundLink")],1),t._v(", therefore you can simply run")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("brew "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" immudb\n")])])]),e("p",[t._v("In case you want to run immudb as a service, please check the following "),e("a",{attrs:{href:"https://medium.com/swlh/how-to-use-launchd-to-run-services-in-macos-b972ed1e352",target:"_blank",rel:"noopener noreferrer"}},[t._v("guideline"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"build-the-binaries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-the-binaries"}},[t._v("#")]),t._v(" Build the binaries")]),t._v(" "),e("p",[t._v("To build the binaries yourself, simply clone this repo and run")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" all\n")])])]),e("h3",{attrs:{id:"linux-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux-by-component"}},[t._v("#")]),t._v(" Linux (by component)")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("linux "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static immuadmin-static immudb-static\n")])])]),e("h3",{attrs:{id:"macos-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#macos-by-component"}},[t._v("#")]),t._v(" MacOS (by component)")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("darwin "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static immuadmin-static immudb-static\n")])])]),e("h3",{attrs:{id:"windows-by-component"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows-by-component"}},[t._v("#")]),t._v(" Windows (by component)")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOOS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("windows "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GOARCH")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("amd64 "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("make")]),t._v(" immuclient-static immuadmin-static immudb-static\n")])])]),e("h2",{attrs:{id:"first-start"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#first-start"}},[t._v("#")]),t._v(" First start")]),t._v(" "),e("h3",{attrs:{id:"run-immudb-binary"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb-binary"}},[t._v("#")]),t._v(" Run immudb binary")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# run immudb in the foreground")]),t._v("\n./immudb\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# run immudb in the background")]),t._v("\n./immudb -d\n")])])]),e("h3",{attrs:{id:"run-immudb-as-a-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb-as-a-service"}},[t._v("#")]),t._v(" Run immudb as a service")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# install immudb service")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# check current immudb service status")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" status\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stop immudb service")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" stop\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# start immudb service")]),t._v("\n./immudb "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" start\n")])])]),e("p",[t._v("The linux service is using the following defaults:")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("File or configuration")]),t._v(" "),e("th",[t._v("location")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("all configuration files")]),t._v(" "),e("td",[t._v("/etc/immudb")])]),t._v(" "),e("tr",[e("td",[t._v("all data files")]),t._v(" "),e("td",[t._v("/var/lib/immudb")])]),t._v(" "),e("tr",[e("td",[t._v("pid file")]),t._v(" "),e("td",[t._v("/var/run/immudb.pid")])]),t._v(" "),e("tr",[e("td",[t._v("log files")]),t._v(" "),e("td",[t._v("/var/log/immudb")])])])]),t._v(" "),e("h3",{attrs:{id:"run-immugw-as-a-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw-as-a-service"}},[t._v("#")]),t._v(" Run immugw as a service")]),t._v(" "),e("p",[t._v("immugw can be found in a different "),e("a",{attrs:{href:"https://github.com/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("repository"),e("OutboundLink")],1),t._v(". You can find a build guideline in the Readme of the repository.")]),t._v(" "),e("p",[t._v("Please make sure to build or download the immugw and immuadmin component and save them in the same work directory when installing the service.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# install immugw service")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# check current immugw service status")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" status\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stop immugw service")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" stop\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# start immugw service")]),t._v("\n./immugw "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" start\n")])])]),e("p",[t._v("The linux service is using the following defaults:")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("File or configuration")]),t._v(" "),e("th",[t._v("location")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("all configuration files")]),t._v(" "),e("td",[t._v("/etc/immudb")])]),t._v(" "),e("tr",[e("td",[t._v("pid file")]),t._v(" "),e("td",[t._v("/var/run/immugw.pid")])]),t._v(" "),e("tr",[e("td",[t._v("log files")]),t._v(" "),e("td",[t._v("/var/log/immudb")])])])]),t._v(" "),e("h2",{attrs:{id:"docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[t._v("#")]),t._v(" Docker")]),t._v(" "),e("p",[t._v("If you just want to run immudb and connect using "),e("code",[t._v("immuclient")]),t._v(":")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker network create immudbnet\ndocker run -d --net immudbnet -it --rm --name immudb -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 codenotary/immudb:latest\ndocker run -it --rm --net immudbnet --name immuclient codenotary/immuclient:latest -a immudb\n")])])]),e("p",[t._v("All services and CLI components are also available as Docker images on "),e("a",{attrs:{href:"https://hub.docker.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("dockerhub"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Component")]),t._v(" "),e("th",[t._v("Container image")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("immudb")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immudb",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immudb"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("immugw")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immugw",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immugw"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("immuadmin")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immuadmin",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immuadmin"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("immuclient")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://hub.docker.com/r/codenotary/immuclient",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://hub.docker.com/r/codenotary/immuclient"),e("OutboundLink")],1)])])])]),t._v(" "),e("h3",{attrs:{id:"run-immudb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immudb"}},[t._v("#")]),t._v(" Run immudb")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 --name immudb codenotary/immudb:latest\n")])])]),e("p",[t._v("run it with persistent data and listening to all interfaces:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3322")]),t._v(":3322 -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("9497")]),t._v(":9497 -v immudb:/var/lib/immudb --env "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0 --name immudb codenotary/immudb:latest\n")])])]),e("h3",{attrs:{id:"run-immugw"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immugw"}},[t._v("#")]),t._v(" Run immugw")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it -d -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3323")]),t._v(":3323 --name immugw --env "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("IMMUGW_IMMUDB_ADDRESS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("immudb codenotary/immugw:latest\n")])])]),e("h3",{attrs:{id:"run-immuadmin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immuadmin"}},[t._v("#")]),t._v(" Run immuadmin")]),t._v(" "),e("p",[t._v("You can either find immuadmin in the immudb container (/usr/local/bin/immuadmin) or run the Docker container to connect to the local immudb.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it --rm --name immuadmin codenotary/immuadmin:latest status\n")])])]),e("h3",{attrs:{id:"run-immuclient"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-immuclient"}},[t._v("#")]),t._v(" Run immuclient")]),t._v(" "),e("p",[t._v("You can either find immuclient in the immudb container (/usr/local/bin/immuclient) or run the Docker container to connect to the local or remote immudb.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker run -it --rm --name immuclient codenotary/immuclient:latest -a "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("immudb-host"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),e("h3",{attrs:{id:"build-the-container-images-yourself"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-the-container-images-yourself"}},[t._v("#")]),t._v(" Build the container images yourself")]),t._v(" "),e("p",[t._v("If you want to build the container images yourself, simply clone this repo and run:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("docker build -t myown/immudb:latest -f Dockerfile "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\ndocker build -t myown/immuadmin:latest -f Dockerfile.immuadmin "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\ndocker build -t myown/immuclient:latest -f Dockerfile.immuclient "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/45.9a115e1d.js b/docs/assets/js/45.9a115e1d.js new file mode 100644 index 0000000000..db5f9f7a7c --- /dev/null +++ b/docs/assets/js/45.9a115e1d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{462:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"sdks-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sdks-api"}},[t._v("#")]),t._v(" SDKs API")]),t._v(" "),a("h2",{attrs:{id:"contents"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contents"}},[t._v("#")]),t._v(" Contents")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#connection-and-authentication"}},[t._v("Connection and authentication")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#mutual-tls"}},[t._v("Mutual TLS")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#disable-authentication"}},[t._v("Disable authentication")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#root-management"}},[t._v("Root management")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#tamperproof-writing-and-reading"}},[t._v("Tamperproof writing and reading")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#safe-get-and-set"}},[t._v("Safe get and set")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#writing-and-reading"}},[t._v("Writing and reading")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#get-and-set"}},[t._v("Get and set")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#byIndex"}},[t._v("Get by index")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#history"}},[t._v("History")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#counting"}},[t._v("Counting")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#scan"}},[t._v("Scan")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#references"}},[t._v("References")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#reference-and-safeReference"}},[t._v("Reference and safeReference")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#get-safe-get%5D"}},[t._v("Get safe get")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#getReference"}},[t._v("Index Reference")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#deep-scan-reference-resolution"}},[t._v("Deep scan reference resolution")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#secondary-indexes"}},[t._v("secondary indexes")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#sorted-sets"}},[t._v("sorted sets")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#insertion-order-index"}},[t._v("insertion order index")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#transactions"}},[t._v("Transactions")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#setbatch-and-getbatch"}},[t._v("SetBatch and GetBatch")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#setall"}},[t._v("setAll")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#execallops"}},[t._v("execAllOps")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#tamperproofing-utilities"}},[t._v("Tamperproofing utilities")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#inclusion"}},[t._v("Inclusion")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#consistency"}},[t._v("Consistency")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#currentroot"}},[t._v("Current Root")])])])]),t._v(" "),a("li",[a("a",{attrs:{href:"#structured-values"}},[t._v("Structured values")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#user-management"}},[t._v("User management (ChangePermission,SetActiveUser,DatabaseList)")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#multi-databases"}},[t._v("Multi databases(CreateDatabase,UseDatabase)")])]),t._v(" "),a("li",[a("a",{attrs:{href:"#health"}},[t._v("Health")])])]),t._v(" "),a("h2",{attrs:{id:"connection-and-authentication"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connection-and-authentication"}},[t._v("#")]),t._v(" Connection and authentication")]),t._v(" "),a("p",[t._v("immudb runs on 3323 default port. Here we are connecting a client with default options and\nauthenticating using default username and password.\nIt's possible to modify defaults by opening immudb server config folder and changing "),a("code",[t._v("immudb.toml")]),t._v(" file.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("p",[t._v("Login method return a token needed in all interactions with the server.")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// login with default username and password and storing a token")]),t._v("\nlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up an authenticated context that will be required in future operations")]),t._v("\nmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"mutual-tls"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mutual-tls"}},[t._v("#")]),t._v(" Mutual tls")]),t._v(" "),a("p",[t._v("To enable mutual authentication a certificate chain need to be provided both to the server and to the client.\nUsing this chain, they will be able to authenticate each other at the same time.\nIn order to generate them, it's possible to use openssl tool.\n"),a("a",{attrs:{href:"https://github.com/codenotary/immudb/tree/master/tools/mtls",target:"_blank",rel:"noopener noreferrer"}},[t._v("generate.sh"),a("OutboundLink")],1),t._v(" provides a quick solution to provide them.")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("./generate.sh localhost mysecretpassword\n")])])]),a("p",[t._v("This generates a list of folder containing certificates and private key to set up a mTLS connection")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t\tc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithMTLsOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t\t\tc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("MTLsOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithCertificate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{path-to-immudb-src-folder}/tools/mtls/4_client/certs/localhost.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithPkey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{path-to-immudb-src-folder}/tools/mtls/4_client/private/localhost.key.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithClientCAs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{path-to-immudb-src-folder}/tools/mtls/2_intermediate/certs/ca-chain.cert.pem"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithServername")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithMTLs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// login with default username and password")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"disable-authentication"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#disable-authentication"}},[t._v("#")]),t._v(" Disable authentication")]),t._v(" "),a("p",[t._v("It's possible to run immudb with disabled authentication.\nIt's not possible to connect to a server that has already databases and users permissions set without having authentication enabled.\nIf a valid token is present, authentication is being enabled by default.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n\t\tc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tvi"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`hello world`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"root-management"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#root-management"}},[t._v("#")]),t._v(" Root management")]),t._v(" "),a("p",[t._v("Immudb client need to store somewhere the merkle tree root hash. In this way every safe read or write operation can be checked on a trusted root.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("p",[t._v("The component in charge of handling the root is the "),a("code",[t._v("RootService")]),t._v(".\nTo set up the "),a("code",[t._v("rootService")]),t._v(" 3 interfaces need to be implemented and provided to the "),a("code",[t._v("RootService")]),t._v(" constructor:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("Cache")]),t._v(" interface in the "),a("code",[t._v("cache")]),t._v(" package. Standard "),a("code",[t._v("cache.NewFileCache")]),t._v(" provides a file root store solution.")]),t._v(" "),a("li",[a("code",[t._v("RootProvider")]),t._v(" in the "),a("code",[t._v("rootservice")]),t._v(" package. It provides a fresh root from immudb server when the client is being initialized for the first time. Standard "),a("code",[t._v("RootProvider")]),t._v(" provides a service that retrieve immudb first root hash from a gRPC endpoint.")]),t._v(" "),a("li",[a("code",[t._v("UUIDProvider")]),t._v(" in the "),a("code",[t._v("rootservice")]),t._v(" package. It provides the immudb identifier. This is needed to allow the client to safely connect to multiple immudb instances. Standard "),a("code",[t._v("UUIDProvider")]),t._v(" provides the immudb server identifier from a gRPC endpoint.")])]),t._v(" "),a("p",[t._v("Here follows an example how to set up a client instance with a custom root service.")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("func")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MyCustomImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cli c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ImmuClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \tcli "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \toptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DialOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetupDialOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \tcli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" clientConn "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("grpc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ClientConn\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" clientConn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Connect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n \tcli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithClientConn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("clientConn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \tserviceClient "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuServiceClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("clientConn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \tcli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithServiceClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("serviceClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WaitForHealthCheck")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n \timmudbRootProvider "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" rootservice"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmudbRootProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("serviceClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \timmudbUUIDProvider "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" rootservice"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmudbUUIDProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("serviceClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \tcustomDir "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"custom_root_dir"')]),t._v("\n \tos"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Mkdir")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("customDir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" os"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ModePerm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \trootService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" rootservice"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewRootService")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n \t\tcache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewFileCache")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("customDir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \t\tlogger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewSimpleLogger")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immuclient"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" os"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Stderr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \t\timmudbRootProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \t\timmudbUUIDProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n \tdt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" timestamp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewDefaultTimestamp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n \tts "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewTimestampService")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \tcli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithTimestampService")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WithRootService")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rootService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" cli"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"tamperproof-writing-and-reading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tamperproof-writing-and-reading"}},[t._v("#")]),t._v(" Tamperproof writing and reading")]),t._v(" "),a("p",[t._v("It's possible to read and write with built-in cryptographic verification.")]),t._v(" "),a("h3",{attrs:{id:"safe-get-and-set"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#safe-get-and-set"}},[t._v("#")]),t._v(" Safe get and set")]),t._v(" "),a("p",[t._v("The client implements the mathematical validations transparently, while your application uses a traditional read or write function.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tvi"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`hello world`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Item inclusion verified %t\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" vi"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Verified"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \titem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeGet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"writing-and-reading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-and-reading"}},[t._v("#")]),t._v(" Writing and reading")]),t._v(" "),a("p",[t._v("Writing and reading data is the same both in Set and SafeSet.\nThe only difference is that SafeSet returns to the client proofs needed to mathematically verify that the data is really written correctly.\nThe reason behind having distinct Set and SafeSet operations is that generating proofs slightly impacts performance, so primitives are being allowed also without proofs where fast execution is preferred.\nIt is still possible get the proofs for a specific item at any time, so the decision on the frequency checks it's completely up to the final users.")]),t._v(" "),a("p",[t._v("It's possible also to use dedicated "),a("RouterLink",{attrs:{to:"/immuclient/#auditor"}},[t._v("auditors")]),t._v(" to ensure the db consistency, but the pattern in which every client is an also an auditor is the more interesting one.")],1),t._v(" "),a("h3",{attrs:{id:"get-and-set"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-and-set"}},[t._v("#")]),t._v(" Get and set")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`hello world`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\titem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"get-by-index"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-by-index"}},[t._v("#")]),t._v(" Get by index")]),t._v(" "),a("p",[t._v("The following methods rely on internal immudb insertion order index. Insertion order index is a special index appended on every leaf in the merkle tree. With this command, we benefit of the internal merkle tree natural insertion order index. When we retrieve elements by index a first lookup is made on the leaf at the same index to discover the element key, then a second lookup is realized to retrieve the value.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\t item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ByIndex")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" vi"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%s\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"history"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#history"}},[t._v("#")]),t._v(" History")]),t._v(" "),a("p",[t._v("immudb is an append-only database.\nThis means that each update operation translates to an insert operation of the same key with a new value.\nIt's possible to retrieve all the values for a particular key with the history command.")]),t._v(" "),a("p",[a("code",[t._v("History")]),t._v(" accepts the following parameters:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("Key")]),t._v(": a key of an item")]),t._v(" "),a("li",[a("code",[t._v("Offset")]),t._v(": the starting index (excluded from the search). Optional")]),t._v(" "),a("li",[a("code",[t._v("Limit")]),t._v(": maximum returned items. Optional")]),t._v(" "),a("li",[a("code",[t._v("Reverse")]),t._v(": items are returned in reverse order. Optional")])]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("History")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("HistoryOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Offset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Reverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("Reverse history coomand example")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val4`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val5`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\thOpts1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("HistoryOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tLimit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tReverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tlist1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("History")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hOpts1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thOpts2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("HistoryOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tOffset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" list1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("list1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tLimit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tReverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tlist2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("History")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hOpts2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\thOpts3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("HistoryOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tOffset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" list2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("list2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tLimit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tReverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tlist3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("History")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hOpts3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"counting"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#counting"}},[t._v("#")]),t._v(" Counting")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\t count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n countAll"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CountAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"scan"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#scan"}},[t._v("#")]),t._v(" Scan")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("scan")]),t._v(" command the is used in order to iterate over the collection of elements present in the currently selected database.\n"),a("code",[t._v("Scan")]),t._v(" accepts the following parameters:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("Prefix")]),t._v(": a bytes prefix. Optional")]),t._v(" "),a("li",[a("code",[t._v("Offset")]),t._v(": the starting offset (excluded from the search). Optional")]),t._v(" "),a("li",[a("code",[t._v("Limit")]),t._v(": maximum returned items. Optional")]),t._v(" "),a("li",[a("code",[t._v("Reverse")]),t._v(": items are returned in reverse order. Optional")]),t._v(" "),a("li",[a("code",[t._v("Deep")]),t._v(": "),a("a",{attrs:{href:"#references"}},[t._v("References")]),t._v(" resolution mode. Optional")])]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("p",[t._v("An ordinary "),a("code",[t._v("scan")]),t._v(" command and a reversed one.")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n lr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n md "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abc`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n scanOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Prefix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`a`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Offset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Reverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n scanOptions1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Prefix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`a`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Offset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Reverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scanOptions1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Example with an offset:")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" scanOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Prefix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("``")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Offset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("``")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Reverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n scanOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Prefix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("``")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Offset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Reverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n scanOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Prefix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`b`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Offset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`b`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Limit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Reverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),a("p",[a("code",[t._v("Reference")]),t._v(' is like a "tag" operation, it appends a reference on a key/value element.\nAs a consequence when we retrieve that reference with a '),a("code",[t._v("Get")]),t._v(" or "),a("code",[t._v("SafeGet")]),t._v(" the value retrieved will be the original value associated to the original key.\nSafeReference counterpart is the same but in addition it produces also the inclusion and consistency proofs.")]),t._v(" "),a("h3",{attrs:{id:"reference-and-safereference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#reference-and-safereference"}},[t._v("#")]),t._v(" Reference and safeReference")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstValue`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\treference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" reference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfirstItem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" firstItem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Example with verifications")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstValue`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\treference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" reference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfirstItem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" firstItem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n referenceVerified"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" referenceVerified"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"get-and-safeget"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-and-safeget"}},[t._v("#")]),t._v(" Get and safeget")]),t._v(" "),a("p",[t._v("When reference is resolved with a get or safe get operation, in case of multiples equals references the last one is returned.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstValue`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`secondKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`secondValue`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\treference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`firstKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n reference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SafeReference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`secondKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" reference"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tsecondItem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" secondItem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"index-reference"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#index-reference"}},[t._v("#")]),t._v(" Index Reference")]),t._v(" "),a("p",[t._v("When referencing an item, immudb internally creates a "),a("code",[t._v("key")]),t._v(" reference.\nIt's also possible to reference an item by index. In this way it's possible to resolve a specific item state in a point of time.\n"),a("code",[t._v("getReference")]),t._v(" solves this specific need.\nUsing "),a("code",[t._v("get")]),t._v(" or "),a("code",[t._v("safeGet")]),t._v(" on an index reference will return the last referenced item: in this case index reference is skipped.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tidx1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idx1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ttag"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetReference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myTag1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tag"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"deep-scan-reference-resolution"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#deep-scan-reference-resolution"}},[t._v("#")]),t._v(" Deep scan reference resolution")]),t._v(" "),a("p",[a("code",[t._v("Scan")]),t._v(" can resolve a reference if the "),a("code",[t._v("deep")]),t._v(" flag is provided.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tidx1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aar`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idx1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ttag"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetReference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aar`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tag"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlist"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tPrefix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`a`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tOffset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tLimit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tReverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tDeep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"secondary-indexes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#secondary-indexes"}},[t._v("#")]),t._v(" Secondary indexes")]),t._v(" "),a("p",[t._v("On top of the key-value store, immudb provides secondary indexes to help developers to handle complex queries.")]),t._v(" "),a("h3",{attrs:{id:"sorted-sets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sorted-sets"}},[t._v("#")]),t._v(" Sorted sets")]),t._v(" "),a("p",[t._v("The simplest secondary index you can create with immudb is by using the sorted set data type, which is a data structure representing a set of elements ordered by a floating point number which is the score of each element.\nThe reason we used a "),a("code",[t._v("float64")]),t._v(" as a score type is to satisfy the maximum number of uses cases.\n64-bit floating point gives a lot of flexibility and dynamic range, at the expense of having only 53-bits of integer.")]),t._v(" "),a("p",[t._v("When an "),a("code",[t._v("integer64")]),t._v(" is cast to a float there could be a loss of precision, but the insertion order is ensured by the internal database index that is appended to the internal index key.")]),t._v(" "),a("p",[a("code",[t._v("ZAdd")]),t._v(" can reference an item by "),a("code",[t._v("key")]),t._v(" or by "),a("code",[t._v("index")]),t._v(".")]),t._v(" "),a("p",[a("code",[t._v("ZScan")]),t._v(" accepts following arguments:")]),t._v(" "),a("ul",[a("li",[t._v("Set: the name of the collection")]),t._v(" "),a("li",[t._v("Offset: a binary offset,")]),t._v(" "),a("li",[t._v("Limit: the maximum items returned,")]),t._v(" "),a("li",[t._v("Reverse: items are returned in score ascending or descending order")]),t._v(" "),a("li",[t._v("Min: minimum score filter")]),t._v(" "),a("li",[t._v("Max: maximum score filter")])]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tsetName "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`set1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ti1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ti2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ti3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ti4"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key4`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val4`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ti5"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key5`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val5`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ti6"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key6`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val6`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZAdd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZAdd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZAdd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZAdd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key4`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i4"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZAdd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key5`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i5"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZAdd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key6`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i6"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tzScanOption1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ZScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tOffset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tLimit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tReverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tMin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tMax"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\tlist1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZScan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" zScanOption1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tzScanOption2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ZScanOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" setName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tOffset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" list1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("len")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("list1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CurrentOffset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tLimit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tReverse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tMin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\tMax"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\tlist2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ZScan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" zScanOption2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"insertion-order-index"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#insertion-order-index"}},[t._v("#")]),t._v(" Insertion order index")]),t._v(" "),a("p",[t._v("Each item is being stored in an insertion order that is exposed via the insertion order index.")]),t._v(" "),a("p",[a("code",[t._v("IScan")]),t._v(" provides a solution to iterate over all items of the database (with pagination).")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`0`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`itemZERO`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aab`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`zzz`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`itemzzz`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reference")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tpage1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("IScan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" page1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tpage2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("IScan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" page2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tpage3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("IScan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" page3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"transactions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transactions"}},[t._v("#")]),t._v(" Transactions")]),t._v(" "),a("p",[a("code",[t._v("SetBatch")]),t._v(", "),a("code",[t._v("GetBatch")]),t._v(", "),a("code",[t._v("SetAll")]),t._v(" and "),a("code",[t._v("ExecAllOps")]),t._v(" are the foundation of transactions in immudb. They allow the execution of a group of commands in a single step, with two important guarantees:")]),t._v(" "),a("ul",[a("li",[t._v("All the commands in a transaction are serialized and executed sequentially. It can never happen that a request issued by another client is served in the middle of the execution of a transaction. This guarantees that the commands are executed as a single isolated operation.")]),t._v(" "),a("li",[t._v("Either all of the commands or none are processed, so the transaction is also atomic.")])]),t._v(" "),a("h3",{attrs:{id:"setbatch-and-getbatch"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setbatch-and-getbatch"}},[t._v("#")]),t._v(" SetBatch and GetBatch")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[t._v("SetBatch and GetBatch example")]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" br "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("BatchRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Keys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Reader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("strings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Values"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Reader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("strings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"val1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"val2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"val3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ris"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetBatch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("br"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ris"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n sil"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetBatch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sil"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"setall"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setall"}},[t._v("#")]),t._v(" setAll")]),t._v(" "),a("p",[t._v("A more versatile atomic multi set operation")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[t._v("SetBatch and GetBatch example")]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tkvList "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("KVList"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("KVs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("KeyValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1,2,3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3,2,1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"4,5,6"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6,5,4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SetAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" kvList"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"execallops"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#execallops"}},[t._v("#")]),t._v(" execAllOps")]),t._v(" "),a("p",[a("code",[t._v("ExecAllOps")]),t._v(", like "),a("code",[t._v("SetBatch")]),t._v(", allows many insertions at once. The difference is that it is possible to to specify a mixed list of key-value set, reference set and zAdd operations.")]),t._v(" "),a("p",[t._v("The argument of a ExecAllOps is an array of the following types:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("Op_KVs")]),t._v(": ordinary key-value item")]),t._v(" "),a("li",[a("code",[t._v("Op_ZOpts")]),t._v(": "),a("a",{attrs:{href:"#sorted-sets"}},[t._v("ZAdd")]),t._v(" option element")]),t._v(" "),a("li",[a("code",[t._v("Op_ROpts")]),t._v(": "),a("a",{attrs:{href:"#references"}},[t._v("Reference")]),t._v(" option element")])]),t._v(" "),a("p",[t._v("It's possible to persist and reference items that are already persisted on disk. In that case it is mandatory to provide the index of the referenced item. This has to be done for:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("Op_ZOpts")])]),t._v(" "),a("li",[a("code",[t._v("Op_ROpts")])])]),t._v(" "),a("p",[t._v("If "),a("code",[t._v("zAdd")]),t._v(" or "),a("code",[t._v("reference")]),t._v(" is not yet persisted on disk it's possible to add it as a regular key-value and the reference is done on-the-fly.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[t._v("ExecAllOps")]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tidx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`persistedKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`persistedVal`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Ops payload")]),t._v("\n\taOps "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Ops"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tOperations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Op"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tOperation"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Op_KVs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t\tKVs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("KeyValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t\t\tKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`notPersistedKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t\tValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`notPersistedVal`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tOperation"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Op_ZOpts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t\tZOpts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ZAddOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t\t\tSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`mySet`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t\tScore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t\tKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`notPersistedKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\tOperation"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Op_ZOpts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t\tZOpts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ZAddOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t\t\t\t\tSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`mySet`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t\tScore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Score"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t\tKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`persistedKey`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t\tIndex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" idx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\tidx "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ExecAllOps")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" aOps"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"%v\\n"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"tamperproofing-utilities"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tamperproofing-utilities"}},[t._v("#")]),t._v(" Tamperproofing utilities")]),t._v(" "),a("p",[t._v("SDK give to developers primitives in order to make additional verifications:")]),t._v(" "),a("ul",[a("li",[t._v("current")]),t._v(" "),a("li",[t._v("inclusion")]),t._v(" "),a("li",[t._v("consistency")])]),t._v(" "),a("h3",{attrs:{id:"inclusion"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inclusion"}},[t._v("#")]),t._v(" Inclusion")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[a("code",[t._v("Inclusion")]),t._v(" verification returns the shortest list of additional nodes required to compute the root of the merkle tree.\nWith this it's possible to mathematically ensure after a write operation that an element was really written correctly")]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("RawSafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tidx2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("RawSafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("RawSafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abc`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// local hash calculation")]),t._v("\n\thash "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" api"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Digest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idx2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tproof"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inclusion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idx2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tverified "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" proof"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idx2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hash"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"item 2 is included in server merkle trree root: %v"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verified"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"consistency"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#consistency"}},[t._v("#")]),t._v(" Consistency")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[a("code",[t._v("Consistency")]),t._v(" verification returns the shortest list of additional nodes required to mathematically prove that a tree represented by an old root is actually included in the server merkle tree.")]),t._v(" "),a("p",[t._v("This means that every element that is represented by the root that a client owns on his storage are still present on immudb and they were not changed.")]),t._v(" "),a("p",[t._v("A trusted auditor can continuously check for consistency an immudb server. In this way immudb can not be silently tampered.\n"),a("code",[t._v("RawSafeSet")]),t._v(" is used in order to semplify following example. Usually SDK extend the raw payload leveraging "),a("a",{attrs:{href:"#structured-values"}},[t._v("structured values")])]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n lr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n md "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("RawSafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`aaa`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("RawSafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`bbb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item2`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n idx "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("RawSafeSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`abc`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`item3`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CurrentRoot")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n proof"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Consistency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Index"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n verified "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" proof"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Verify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n fmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"the tree represented by root is included in server merkle tree: %v"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" verified"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h3",{attrs:{id:"current-root"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#current-root"}},[t._v("#")]),t._v(" Current Root")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[a("code",[t._v("CurrentRoot")]),t._v(" returns the last root of the server.\nThis is used to initialize a client root cache.\nUsually root is printed in hexadecimal notation.")]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v(" \tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n \troot"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CurrentRoot")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n \tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"current root is : %X"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" root"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetRoot")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"structured-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structured-values"}},[t._v("#")]),t._v(" Structured values")]),t._v(" "),a("p",[t._v("The messages structure allows callers to use key-value pairs as an embedded payload. Thus, it will soon be possible to decouple and extend\nthe value structure. The value, currently a stream of bytes, can be augmented with client-provided metadata.\nThis also allows to use a custom serialization/deserialization strategy.")]),t._v(" "),a("p",[t._v("The payload includes a timestamp and a value at the moment. In the near future cryptographic signatures will be added as well. The entire payload contribute to hash generation and is inserted in\nthe merkle tree.")]),t._v(" "),a("div",{staticClass:"language-proto extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("message StructuredKeyValue {\n\tbytes key = 1;\n\tContent value = 2;\n}\n\nmessage Content {\n\tuint64 timestamp = 1;\n\tbytes payload = 2;\n}\n")])])]),a("h2",{attrs:{id:"user-management"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#user-management"}},[t._v("#")]),t._v(" User management")]),t._v(" "),a("p",[t._v("User management is exposed with following methods:")]),t._v(" "),a("ul",[a("li",[t._v("CreateUser")]),t._v(" "),a("li",[t._v("ChangePermission")]),t._v(" "),a("li",[t._v("ChangePassword")])]),t._v(" "),a("p",[t._v("Password must have between 8 and 32 letters, digits and special characters of which at least 1 uppercase letter, 1 digit and 1 special character.")]),t._v(" "),a("p",[t._v("Admin permissions are:")]),t._v(" "),a("ul",[a("li",[t._v("PermissionSysAdmin = 255")]),t._v(" "),a("li",[t._v("PermissionAdmin = 254")])]),t._v(" "),a("p",[t._v("Non-admin permissions are:")]),t._v(" "),a("ul",[a("li",[t._v("PermissionNone = 0")]),t._v(" "),a("li",[t._v("PermissionR = 1")]),t._v(" "),a("li",[t._v("PermissionRW = 2")])]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\terr "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CreateUser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myNewUser1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myS3cretPassword!`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("PermissionR"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"defaultdb"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\terr "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ChangePermission")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("PermissionAction_GRANT"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myNewUser1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"defaultDB"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("PermissionRW"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\terr "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ChangePassword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myNewUser1`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myS3cretPassword!`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`myNewS3cretPassword!`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"multi-databases"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multi-databases"}},[t._v("#")]),t._v(" Multi databases")]),t._v(" "),a("p",[t._v("Starting with immudb version 0.7.0, multi-database support has been introduced.\nBy default the first database is either called "),a("code",[t._v("defaultdb")]),t._v(" or based on the environment variable "),a("code",[t._v("IMMUDB_DBNAME")]),t._v(".")]),t._v(" "),a("p",[t._v("Handling users and database require to have the correct privileges.")]),t._v(" "),a("p",[t._v("Users with "),a("code",[t._v("PermissionAdmin")]),t._v(" can control everything. Non admin users have restricted permissions and can read or write only their databases if they have sufficient privileges.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("p",[t._v("In this example, it is shown how to create a new database and how to write into it.")]),t._v(" "),a("p",[t._v("In order to create a new database is possible to use "),a("code",[t._v("CreateDatabase")]),t._v(" method.")]),t._v(" "),a("Tab",{attrs:{label:"Go"}},[a("p",[t._v("In order to write into a specific database an authenticated context is required.\nIt's possible with "),a("code",[t._v("UseDatabase")]),t._v(" method to obtain a "),a("code",[t._v("token")]),t._v(".")]),t._v(" "),a("p",[t._v("A token is used not only for authorization, but also to route commands to a specific database.")]),t._v(" "),a("p",[t._v("To set up an authenticated context is sufficient to put a "),a("code",[t._v("token")]),t._v(" inside metadata.")]),t._v(" "),a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tlr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\terr "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CreateDatabase")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Database"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tDatabasename"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myimmutabledb"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tdbList"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DatabaseList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"database list: %v"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dbList"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// creating a context to write in the new database")]),t._v("\n\tresp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseDatabase")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Database"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tDatabasename"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myimmutabledb"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tfmt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Printf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"auth token: %v"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" resp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\tmd "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" resp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\tctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// writing in myimmutabledb")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`key`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`val`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tlog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1),t._v(" "),a("h2",{attrs:{id:"healthcheck"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#healthcheck"}},[t._v("#")]),t._v(" HealthCheck")]),t._v(" "),a("p",[t._v("HealthCheck returns an error if "),a("code",[t._v("immudb")]),t._v(" status is not ok.")]),t._v(" "),a("Tabs",{attrs:{type:"border-card"}},[a("Tab",{attrs:{label:"Go"}},[a("div",{staticClass:"language-go extra-class"},[a("pre",{pre:!0,attrs:{class:"language-go"}},[a("code",[t._v("\tclient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewImmuClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DefaultOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Fatal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n lr "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("`immudb`")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n md "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pairs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewOutgoingContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Background")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" md"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n err "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("HealthCheck")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),a("Tab",{attrs:{label:"Java"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4j/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Python"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-py/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Python sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Node.js"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb-node/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:".Net"}},[a("p",[t._v("This feature is not yet supported or not documented.\nDo you want to make a feature request or help out? Open an issue on "),a("a",{attrs:{href:"https://github.com/codenotary/immudb4dotnet/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v(".Net sdk github project"),a("OutboundLink")],1)])]),t._v(" "),a("Tab",{attrs:{label:"Others"}},[a("p",[t._v("If you're using another development language, please read up on our "),a("a",{attrs:{href:"https://docs.immudb.io/immugw/",target:"_blank",rel:"noopener noreferrer"}},[t._v("immugw"),a("OutboundLink")],1),t._v(" option.")])])],1)],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/43.abaf079e.js b/docs/assets/js/46.9b965358.js similarity index 99% rename from docs/assets/js/43.abaf079e.js rename to docs/assets/js/46.9b965358.js index 03990adb50..6fcf8559d5 100644 --- a/docs/assets/js/43.abaf079e.js +++ b/docs/assets/js/46.9b965358.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{417:function(e,t,n){e.exports=function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return e[i].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){var i=n(1)(n(2),n(15),null,null);e.exports=i.exports},function(e,t){e.exports=function(e,t,n,i){var r,o=e=e||{},s=typeof e.default;"object"!==s&&"function"!==s||(r=e,o=e.default);var a="function"==typeof o?o.options:o;if(t&&(a.render=t.render,a.staticRenderFns=t.staticRenderFns),n&&(a._scopeId=n),i){var l=Object.create(a.computed||null);Object.keys(i).forEach((function(e){var t=i[e];l[e]=function(){return t}})),a.computed=l}return{esModule:r,exports:o,options:a}}},function(e,t,n){(function(e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(4),n(11),n(13);var i=function(e){return e&&e.__esModule?e:{default:e}}(n(14));t.default={name:"VOwlCarousel",props:{items:{type:Number,default:3},margin:{type:Number,default:0},loop:{type:Boolean,default:!1},center:{type:Boolean,default:!1},mouseDrag:{type:Boolean,default:!0},touchDrag:{type:Boolean,default:!0},pullDrag:{type:Boolean,default:!0},freeDrag:{type:Boolean,default:!1},stagePadding:{type:Number,default:0},merge:{type:Boolean,default:!1},mergeFit:{type:Boolean,default:!1},autoWidth:{type:Boolean,default:!1},startPosition:{type:Number,default:0},uRLhashListener:{type:Boolean,default:!1},nav:{type:Boolean,default:!0},rewind:{type:Boolean,default:!0},navText:{type:Array,default:function(){return["next","prev"]}},navElement:{type:String,default:"div"},slideBy:{type:[Number,String],default:1},slideTransition:{type:String,default:""},dots:{type:Boolean,default:!0},dotsEach:{type:[Number,Boolean],default:!1},dotsData:{type:Boolean,default:!1},lazyLoad:{type:Boolean,default:!1},lazyLoadEager:{type:Number,default:0},autoplay:{type:Boolean,default:!1},autoplaySpeed:{type:Boolean,default:!1},autoplayTimeout:{type:Number,default:5e3},autoplayHoverPause:{type:Boolean,default:!1},smartSpeed:{type:Number,default:250},fluidSpeed:{type:[Number,Boolean],default:!1},navSpeed:{type:[Number,Boolean],default:!1},dragEndSpeed:{type:[Number,Boolean],default:!1},callbacks:{type:Boolean,default:!0},responsive:{type:Object,default:function(){}},responsiveRefreshRate:{type:Number,default:200},video:{type:Boolean,default:!1},videoHeight:{type:[Number,Boolean],default:!1},videoWidth:{type:[Number,Boolean],default:!1},animateOut:{type:[String,Boolean],default:!1},animateIn:{type:[String,Boolean],default:!1},fallbackEasing:{type:String,default:"swing"},info:{type:Function,default:function(){}},itemElement:{type:String,default:"div"},stageElement:{type:String,default:"div"},navContainer:{type:[String,Boolean],default:!1},dotsContainer:{type:[String,Boolean],default:!1},checkVisible:{type:Boolean,default:!0}},data:function(){return{showPrev:!1,showNext:!0,prevHandler:"carousel_prev_"+this.generateUniqueId(),elementHandle:"carousel_"+this.generateUniqueId(),nextHandler:"carousel_next_"+this.generateUniqueId()}},mounted:function(){var t=this,n=e("#"+this.elementHandle).owlCarousel({items:this.items,margin:this.margin,loop:this.loop,center:this.center,mouseDrag:this.mouseDrag,touchDrag:this.touchDrag,pullDrag:this.pullDrag,freeDrag:this.freeDrag,stagePadding:this.stagePadding,merge:this.merge,mergeFit:this.mergeFit,autoWidth:this.autoWidth,startPosition:this.startPosition,uRLhashListener:this.uRLhashListener,nav:this.nav,rewind:this.rewind,navText:this.navText,navElement:this.navElement,slideBy:this.slideBy,slideTransition:this.slideTransition,dots:this.dots,dotsEach:this.dotsEach,dotsData:this.dotsData,lazyLoad:this.lazyLoad,lazyLoadEager:this.lazyLoadEager,autoplay:this.autoplay,autoplaySpeed:this.autoplaySpeed,autoplayTimeout:this.autoplayTimeout,autoplayHoverPause:this.autoplayHoverPause,smartSpeed:this.smartSpeed,fluidSpeed:this.fluidSpeed,navSpeed:this.navSpeed,dragEndSpeed:this.dragEndSpeed,callbacks:this.callbacks,responsive:this.responsive,responsiveRefreshRate:this.responsiveRefreshRate,video:this.video,videoHeight:this.videoHeight,videoWidth:this.videoWidth,animateOut:this.animateOut,animateIn:this.animateIn,fallbackEasing:this.fallbackEasing,info:this.info,itemElement:this.itemElement,stageElement:this.stageElement,navContainer:this.navContainer,dotsContainer:this.dotsContainer,checkVisible:this.checkVisible});e("#"+this.prevHandler).click((function(){n.trigger("prev.owl.carousel")})),e("#"+this.nextHandler).click((function(){n.trigger("next.owl.carousel")})),i.default.forEach((function(e){n.on(e+".owl.carousel",(function(n){t.$emit(e,n)}))})),this.loop||n.on("changed.owl.carousel",(function(e){0===e.item.index?(t.showPrev=!1,t.showNext=!0):Math.floor(e.item.index+e.page.size)===e.item.count?(t.showPrev=!0,t.showNext=!1):(t.showPrev=!0,t.showNext=!0)}))},methods:{generateUniqueId:function(){return Math.random().toString(36).substring(2,15)}}}}).call(t,n(3))},function(e,t,n){var i; +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{423:function(e,t,n){e.exports=function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return e[i].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){var i=n(1)(n(2),n(15),null,null);e.exports=i.exports},function(e,t){e.exports=function(e,t,n,i){var r,o=e=e||{},s=typeof e.default;"object"!==s&&"function"!==s||(r=e,o=e.default);var a="function"==typeof o?o.options:o;if(t&&(a.render=t.render,a.staticRenderFns=t.staticRenderFns),n&&(a._scopeId=n),i){var l=Object.create(a.computed||null);Object.keys(i).forEach((function(e){var t=i[e];l[e]=function(){return t}})),a.computed=l}return{esModule:r,exports:o,options:a}}},function(e,t,n){(function(e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(4),n(11),n(13);var i=function(e){return e&&e.__esModule?e:{default:e}}(n(14));t.default={name:"VOwlCarousel",props:{items:{type:Number,default:3},margin:{type:Number,default:0},loop:{type:Boolean,default:!1},center:{type:Boolean,default:!1},mouseDrag:{type:Boolean,default:!0},touchDrag:{type:Boolean,default:!0},pullDrag:{type:Boolean,default:!0},freeDrag:{type:Boolean,default:!1},stagePadding:{type:Number,default:0},merge:{type:Boolean,default:!1},mergeFit:{type:Boolean,default:!1},autoWidth:{type:Boolean,default:!1},startPosition:{type:Number,default:0},uRLhashListener:{type:Boolean,default:!1},nav:{type:Boolean,default:!0},rewind:{type:Boolean,default:!0},navText:{type:Array,default:function(){return["next","prev"]}},navElement:{type:String,default:"div"},slideBy:{type:[Number,String],default:1},slideTransition:{type:String,default:""},dots:{type:Boolean,default:!0},dotsEach:{type:[Number,Boolean],default:!1},dotsData:{type:Boolean,default:!1},lazyLoad:{type:Boolean,default:!1},lazyLoadEager:{type:Number,default:0},autoplay:{type:Boolean,default:!1},autoplaySpeed:{type:Boolean,default:!1},autoplayTimeout:{type:Number,default:5e3},autoplayHoverPause:{type:Boolean,default:!1},smartSpeed:{type:Number,default:250},fluidSpeed:{type:[Number,Boolean],default:!1},navSpeed:{type:[Number,Boolean],default:!1},dragEndSpeed:{type:[Number,Boolean],default:!1},callbacks:{type:Boolean,default:!0},responsive:{type:Object,default:function(){}},responsiveRefreshRate:{type:Number,default:200},video:{type:Boolean,default:!1},videoHeight:{type:[Number,Boolean],default:!1},videoWidth:{type:[Number,Boolean],default:!1},animateOut:{type:[String,Boolean],default:!1},animateIn:{type:[String,Boolean],default:!1},fallbackEasing:{type:String,default:"swing"},info:{type:Function,default:function(){}},itemElement:{type:String,default:"div"},stageElement:{type:String,default:"div"},navContainer:{type:[String,Boolean],default:!1},dotsContainer:{type:[String,Boolean],default:!1},checkVisible:{type:Boolean,default:!0}},data:function(){return{showPrev:!1,showNext:!0,prevHandler:"carousel_prev_"+this.generateUniqueId(),elementHandle:"carousel_"+this.generateUniqueId(),nextHandler:"carousel_next_"+this.generateUniqueId()}},mounted:function(){var t=this,n=e("#"+this.elementHandle).owlCarousel({items:this.items,margin:this.margin,loop:this.loop,center:this.center,mouseDrag:this.mouseDrag,touchDrag:this.touchDrag,pullDrag:this.pullDrag,freeDrag:this.freeDrag,stagePadding:this.stagePadding,merge:this.merge,mergeFit:this.mergeFit,autoWidth:this.autoWidth,startPosition:this.startPosition,uRLhashListener:this.uRLhashListener,nav:this.nav,rewind:this.rewind,navText:this.navText,navElement:this.navElement,slideBy:this.slideBy,slideTransition:this.slideTransition,dots:this.dots,dotsEach:this.dotsEach,dotsData:this.dotsData,lazyLoad:this.lazyLoad,lazyLoadEager:this.lazyLoadEager,autoplay:this.autoplay,autoplaySpeed:this.autoplaySpeed,autoplayTimeout:this.autoplayTimeout,autoplayHoverPause:this.autoplayHoverPause,smartSpeed:this.smartSpeed,fluidSpeed:this.fluidSpeed,navSpeed:this.navSpeed,dragEndSpeed:this.dragEndSpeed,callbacks:this.callbacks,responsive:this.responsive,responsiveRefreshRate:this.responsiveRefreshRate,video:this.video,videoHeight:this.videoHeight,videoWidth:this.videoWidth,animateOut:this.animateOut,animateIn:this.animateIn,fallbackEasing:this.fallbackEasing,info:this.info,itemElement:this.itemElement,stageElement:this.stageElement,navContainer:this.navContainer,dotsContainer:this.dotsContainer,checkVisible:this.checkVisible});e("#"+this.prevHandler).click((function(){n.trigger("prev.owl.carousel")})),e("#"+this.nextHandler).click((function(){n.trigger("next.owl.carousel")})),i.default.forEach((function(e){n.on(e+".owl.carousel",(function(n){t.$emit(e,n)}))})),this.loop||n.on("changed.owl.carousel",(function(e){0===e.item.index?(t.showPrev=!1,t.showNext=!0):Math.floor(e.item.index+e.page.size)===e.item.count?(t.showPrev=!0,t.showNext=!1):(t.showPrev=!0,t.showNext=!0)}))},methods:{generateUniqueId:function(){return Math.random().toString(36).substring(2,15)}}}}).call(t,n(3))},function(e,t,n){var i; /*! * jQuery JavaScript Library v3.3.1 * https://jquery.com/ diff --git a/docs/assets/js/5.c830c1e7.js b/docs/assets/js/5.49b5b90b.js similarity index 89% rename from docs/assets/js/5.c830c1e7.js rename to docs/assets/js/5.49b5b90b.js index 40698457f3..9619b2244b 100644 --- a/docs/assets/js/5.c830c1e7.js +++ b/docs/assets/js/5.49b5b90b.js @@ -1,6 +1,6 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5,13],{316:function(t,e,a){"use strict";a.r(e);var o=a(315),n=a(314),r=a(313),s=a(318),i=a(312),l={name:"Layout",components:{Home:o.a,Page:r.a,Sidebar:s.a,Navbar:n.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(i.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(46),c=Object(u.a)(l,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?a("Home"):a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=c.exports},409:function(t,e,a){t.exports=a(410)},410:function(t,e,a){"use strict"; +(window.webpackJsonp=window.webpackJsonp||[]).push([[5,13],{327:function(t,e,a){"use strict";a.r(e);var o=a(326),n=a(325),r=a(324),s=a(329),i=a(323),l={name:"Layout",components:{Home:o.a,Page:r.a,Sidebar:s.a,Navbar:n.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(i.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(10),c=Object(u.a)(l,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?a("Home"):a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=c.exports},415:function(t,e,a){t.exports=a(416)},416:function(t,e,a){"use strict"; /*! * reading-time * Copyright (c) Nicolas Gryman * MIT Licensed - */function o(t){return" "===t||"\n"===t||"\r"===t||"\t"===t}t.exports=function(t,e){var a,n,r=0,s=0,i=t.length-1;for((e=e||{}).wordsPerMinute=e.wordsPerMinute||200,a=e.wordBound||o;a(t[s]);)s++;for(;a(t[i]);)i--;for(n=s;n<=i;){for(;n<=i&&!a(t[n]);n++);for(r++;n<=i&&a(t[n]);n++);}var l=r/e.wordsPerMinute,u=60*l*1e3;return{text:Math.ceil(l.toFixed(2))+" min read",minutes:l,time:u,words:r}}},421:function(t,e,a){"use strict";a.r(e);a(71),a(47),a(69);var o=a(316),n=a(317),r=(a(409),{name:"BlogPostLayout",extends:o.default,components:{Footer:n.a},computed:{date:function(){return new Date(this.$page.frontmatter.date)}},methods:{fullsize:function(t){return t.replace(/^\/blog/,"/blog/fullsize")}}}),s=a(46),i=Object(s.a)(r,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,attrs:{id:"blog"},on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("i-container",{attrs:{id:"blog-post"}},[a("i-row",[a("i-column",[a("article",[a("h1",{staticClass:"blog-post-title"},[t._v(t._s(t.$page.frontmatter.title))]),t._v(" "),a("p",{staticClass:"blog-post-excerpt"},[t._v(t._s(t.$page.frontmatter.excerpt))]),t._v(" "),a("ul",{staticClass:"blog-post-meta list -inline"},[a("li",[t._v("Published on "+t._s(t._f("dateFormat")(t.date,"MMMM DD, YYYY")))]),t._v(" "),a("li",[t._v("·")]),t._v(" "),a("li",[t._v(t._s(t.$page.readingTime.text))])]),t._v(" "),a("div",{staticClass:"blog-post-image"},[a("img",{staticClass:"image -fluid",attrs:{src:t.fullsize(t.$withBase(t.$page.frontmatter.image)),alt:t.$page.title}})]),t._v(" "),a("Content",{staticClass:"theme-default-content"})],1)])],1)],1),t._v(" "),a("Footer")],1)}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file + */function o(t){return" "===t||"\n"===t||"\r"===t||"\t"===t}t.exports=function(t,e){var a,n,r=0,s=0,i=t.length-1;for((e=e||{}).wordsPerMinute=e.wordsPerMinute||200,a=e.wordBound||o;a(t[s]);)s++;for(;a(t[i]);)i--;for(n=s;n<=i;){for(;n<=i&&!a(t[n]);n++);for(r++;n<=i&&a(t[n]);n++);}var l=r/e.wordsPerMinute,u=60*l*1e3;return{text:Math.ceil(l.toFixed(2))+" min read",minutes:l,time:u,words:r}}},427:function(t,e,a){"use strict";a.r(e);a(79),a(25),a(31);var o=a(327),n=a(328),r=(a(415),{name:"BlogPostLayout",extends:o.default,components:{Footer:n.a},computed:{date:function(){return new Date(this.$page.frontmatter.date)}},methods:{fullsize:function(t){return t.replace(/^\/blog/,"/blog/fullsize")}}}),s=a(10),i=Object(s.a)(r,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,attrs:{id:"blog"},on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("i-container",{attrs:{id:"blog-post"}},[a("i-row",[a("i-column",[a("article",[a("h1",{staticClass:"blog-post-title"},[t._v(t._s(t.$page.frontmatter.title))]),t._v(" "),a("p",{staticClass:"blog-post-excerpt"},[t._v(t._s(t.$page.frontmatter.excerpt))]),t._v(" "),a("ul",{staticClass:"blog-post-meta list -inline"},[a("li",[t._v("Published on "+t._s(t._f("dateFormat")(t.date,"MMMM DD, YYYY")))]),t._v(" "),a("li",[t._v("·")]),t._v(" "),a("li",[t._v(t._s(t.$page.readingTime.text))])]),t._v(" "),a("div",{staticClass:"blog-post-image"},[a("img",{staticClass:"image -fluid",attrs:{src:t.fullsize(t.$withBase(t.$page.frontmatter.image)),alt:t.$page.title}})]),t._v(" "),a("Content",{staticClass:"theme-default-content"})],1)])],1)],1),t._v(" "),a("Footer")],1)}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/6.51a5fded.js b/docs/assets/js/6.ef917599.js similarity index 54% rename from docs/assets/js/6.51a5fded.js rename to docs/assets/js/6.ef917599.js index 2b56a7cf87..cf06e34968 100644 --- a/docs/assets/js/6.51a5fded.js +++ b/docs/assets/js/6.ef917599.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{338:function(t,e,a){},411:function(t,e,a){"use strict";var i=a(338);a.n(i).a},423:function(t,e,a){"use strict";a.r(e);var i={props:{image:{type:String,default:""},title:{type:String,default:""}}},n=(a(411),a(46)),s=Object(n.a)(i,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"feature"},[a("img",{attrs:{src:t.$withBase(t.image),alt:t.title}}),t._v(" "),a("h2",[t._v(t._s(t.title))]),t._v(" "),t._t("default")],2)}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{348:function(t,e,a){},417:function(t,e,a){"use strict";var i=a(348);a.n(i).a},429:function(t,e,a){"use strict";a.r(e);var i={props:{image:{type:String,default:""},title:{type:String,default:""}}},n=(a(417),a(10)),s=Object(n.a)(i,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"feature"},[a("img",{attrs:{src:t.$withBase(t.image),alt:t.title}}),t._v(" "),a("h2",[t._v(t._s(t.title))]),t._v(" "),t._t("default")],2)}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/7.3dea66aa.js b/docs/assets/js/7.f1b9a501.js similarity index 71% rename from docs/assets/js/7.3dea66aa.js rename to docs/assets/js/7.f1b9a501.js index bc7e464e64..1b465b3ca5 100644 --- a/docs/assets/js/7.3dea66aa.js +++ b/docs/assets/js/7.f1b9a501.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{339:function(t,s,i){},412:function(t,s,i){"use strict";var a=i(339);i.n(a).a},424:function(t,s,i){"use strict";i.r(s);var a={name:"Terminal",props:{title:{type:String,default:"bash"}}},e=(i(412),i(46)),l=Object(e.a)(a,(function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"terminal-wrapper"},[s("div",{staticClass:"terminal"},[s("div",{staticClass:"bar"},[this._m(0),this._v(" "),s("div",{staticClass:"title"},[this._v(this._s(this.title))])]),this._v(" "),s("div",{staticClass:"body"},[this._t("default")],2)])])}),[function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"buttons"},[s("span",{staticClass:"circle red"}),this._v(" "),s("span",{staticClass:"circle yellow"}),this._v(" "),s("span",{staticClass:"circle green"})])}],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{349:function(t,s,i){},418:function(t,s,i){"use strict";var a=i(349);i.n(a).a},430:function(t,s,i){"use strict";i.r(s);var a={name:"Terminal",props:{title:{type:String,default:"bash"}}},e=(i(418),i(10)),l=Object(e.a)(a,(function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"terminal-wrapper"},[s("div",{staticClass:"terminal"},[s("div",{staticClass:"bar"},[this._m(0),this._v(" "),s("div",{staticClass:"title"},[this._v(this._s(this.title))])]),this._v(" "),s("div",{staticClass:"body"},[this._t("default")],2)])])}),[function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"buttons"},[s("span",{staticClass:"circle red"}),this._v(" "),s("span",{staticClass:"circle yellow"}),this._v(" "),s("span",{staticClass:"circle green"})])}],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/8.6f57b28c.js b/docs/assets/js/8.3d37dac2.js similarity index 51% rename from docs/assets/js/8.6f57b28c.js rename to docs/assets/js/8.3d37dac2.js index 2b16cf1e69..88ef28d033 100644 --- a/docs/assets/js/8.6f57b28c.js +++ b/docs/assets/js/8.3d37dac2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{340:function(t,e,n){},413:function(t,e,n){"use strict";var i=n(340);n.n(i).a},454:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(413),n(46)),a=Object(r.a)(i,void 0,void 0,!1,null,"0d148f50",null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{350:function(t,e,n){},419:function(t,e,n){"use strict";var i=n(350);n.n(i).a},463:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(419),n(10)),a=Object(r.a)(i,void 0,void 0,!1,null,"0d148f50",null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/9.e3037516.js b/docs/assets/js/9.55c2e364.js similarity index 91% rename from docs/assets/js/9.e3037516.js rename to docs/assets/js/9.55c2e364.js index bd523873e4..83a57e95cf 100644 --- a/docs/assets/js/9.e3037516.js +++ b/docs/assets/js/9.55c2e364.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9,13],{316:function(t,e,a){"use strict";a.r(e);var o=a(315),i=a(314),n=a(313),s=a(318),r=a(312),l={name:"Layout",components:{Home:o.a,Page:n.a,Sidebar:s.a,Navbar:i.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(r.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},c=a(46),u=Object(c.a)(l,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?a("Home"):a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=u.exports},420:function(t,e,a){"use strict";a.r(e);a(71),a(47),a(69);var o=a(316),i=a(317),n={name:"BlogPostLayout",extends:o.default,components:{Footer:i.a},methods:{date:function(t){return new Date(t)},thumbnail:function(t){return t.replace(/^\/blog/,"/blog/thumbnail")}}},s=a(46),r=Object(s.a)(n,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,attrs:{id:"blog"},on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("i-container",{attrs:{id:"blog-post"}},[a("i-row",[a("i-column",[a("h1",{staticClass:"blog-post-title"},[t._v("immudb blog")]),t._v(" "),a("p",{staticClass:"blog-post-excerpt"},[t._v(t._s(t.$description))])])],1)],1),t._v(" "),a("i-container",{staticClass:"_margin-top-4",attrs:{id:"blog-posts"}},[a("i-row",{attrs:{id:"default-layout"}},[t._l(t.$pagination.pages,(function(e){return[a("i-column",{attrs:{lg:"4",md:"6"}},[a("i-card",{staticClass:"blog-entry"},[a("router-link",{staticClass:"blog-entry-image",attrs:{slot:"image",to:e.path},slot:"image"},[a("img",{staticClass:"foreground image -fluid",attrs:{src:t.thumbnail(t.$withBase(e.frontmatter.image)),alt:e.frontmatter.title}}),t._v(" "),a("img",{staticClass:"background image -fluid",attrs:{src:t.thumbnail(t.$withBase("/blog/background.jpg")),alt:e.frontmatter.title}})]),t._v(" "),a("router-link",{staticClass:"blog-entry-title",attrs:{to:e.path}},[a("h2",[t._v(t._s(e.frontmatter.title))])]),t._v(" "),a("p",{staticClass:"blog-entry-meta"},[t._v(t._s(t._f("dateFormat")(t.date(e.frontmatter.date),"MMMM DD, YYYY")))]),t._v(" "),a("p",{staticClass:"blog-entry-description"},[t._v(t._s(e.frontmatter.excerpt))])],1)],1)]}))],2),t._v(" "),a("i-row",[a("i-column",{staticClass:"_text-center"},[t.$pagination.hasPrev||t.$pagination.hasNext?a("ul",{staticClass:"list -inline",attrs:{id:"pagination"}},[t.$pagination.hasPrev?a("li",[a("router-link",{attrs:{to:t.$pagination.prevLink}},[t._v("Prev")])],1):t._e(),t._v(" "),t.$pagination.hasNext?a("li",[a("router-link",{attrs:{to:t.$pagination.nextLink}},[t._v("Next")])],1):t._e()]):t._e()])],1)],1),t._v(" "),a("Footer")],1)}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[9,13],{327:function(t,e,a){"use strict";a.r(e);var o=a(326),i=a(325),n=a(324),s=a(329),r=a(323),l={name:"Layout",components:{Home:o.a,Page:n.a,Sidebar:s.a,Navbar:i.a},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(r.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},c=a(10),u=Object(c.a)(l,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?a("Home"):a("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=u.exports},426:function(t,e,a){"use strict";a.r(e);a(79),a(25),a(31);var o=a(327),i=a(328),n={name:"BlogPostLayout",extends:o.default,components:{Footer:i.a},methods:{date:function(t){return new Date(t)},thumbnail:function(t){return t.replace(/^\/blog/,"/blog/thumbnail")}}},s=a(10),r=Object(s.a)(n,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"theme-container",class:t.pageClasses,attrs:{id:"blog"},on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?a("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),a("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),a("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),a("i-container",{attrs:{id:"blog-post"}},[a("i-row",[a("i-column",[a("h1",{staticClass:"blog-post-title"},[t._v("immudb blog")]),t._v(" "),a("p",{staticClass:"blog-post-excerpt"},[t._v(t._s(t.$description))])])],1)],1),t._v(" "),a("i-container",{staticClass:"_margin-top-4",attrs:{id:"blog-posts"}},[a("i-row",{attrs:{id:"default-layout"}},[t._l(t.$pagination.pages,(function(e){return[a("i-column",{attrs:{lg:"4",md:"6"}},[a("i-card",{staticClass:"blog-entry"},[a("router-link",{staticClass:"blog-entry-image",attrs:{slot:"image",to:e.path},slot:"image"},[a("img",{staticClass:"foreground image -fluid",attrs:{src:t.thumbnail(t.$withBase(e.frontmatter.image)),alt:e.frontmatter.title}}),t._v(" "),a("img",{staticClass:"background image -fluid",attrs:{src:t.thumbnail(t.$withBase("/blog/background.jpg")),alt:e.frontmatter.title}})]),t._v(" "),a("router-link",{staticClass:"blog-entry-title",attrs:{to:e.path}},[a("h2",[t._v(t._s(e.frontmatter.title))])]),t._v(" "),a("p",{staticClass:"blog-entry-meta"},[t._v(t._s(t._f("dateFormat")(t.date(e.frontmatter.date),"MMMM DD, YYYY")))]),t._v(" "),a("p",{staticClass:"blog-entry-description"},[t._v(t._s(e.frontmatter.excerpt))])],1)],1)]}))],2),t._v(" "),a("i-row",[a("i-column",{staticClass:"_text-center"},[t.$pagination.hasPrev||t.$pagination.hasNext?a("ul",{staticClass:"list -inline",attrs:{id:"pagination"}},[t.$pagination.hasPrev?a("li",[a("router-link",{attrs:{to:t.$pagination.prevLink}},[t._v("Prev")])],1):t._e(),t._v(" "),t.$pagination.hasNext?a("li",[a("router-link",{attrs:{to:t.$pagination.nextLink}},[t._v("Next")])],1):t._e()]):t._e()])],1)],1),t._v(" "),a("Footer")],1)}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/app.3e0abe15.js b/docs/assets/js/app.3e0abe15.js deleted file mode 100644 index afc37ba0db..0000000000 --- a/docs/assets/js/app.3e0abe15.js +++ /dev/null @@ -1,34 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],c=e[1],u=e[2],f=0,d=[];f=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function m(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function w(t,e){return b.call(t,e)}function x(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var _=/-(\w)/g,k=x((function(t){return t.replace(_,(function(t,e){return e?e.toUpperCase():""}))})),C=x((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),S=/\B([A-Z])/g,O=x((function(t){return t.replace(S,"-$1").toLowerCase()}));var E=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function $(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function I(t,e){for(var n in e)t[n]=e[n];return t}function P(t){for(var e={},n=0;n0,J=K&&K.indexOf("edge/")>0,X=(K&&K.indexOf("android"),K&&/iphone|ipad|ipod|ios/.test(K)||"ios"===q),Q=(K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K),K&&K.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(W)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===G&&(G=!W&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),G},it=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ot(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&ot(Symbol)&&"undefined"!=typeof Reflect&&ot(Reflect.ownKeys);at="undefined"!=typeof Set&&ot(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=A,ut=0,lt=function(){this.id=ut++,this.subs=[]};lt.prototype.addSub=function(t){this.subs.push(t)},lt.prototype.removeSub=function(t){y(this.subs,t)},lt.prototype.depend=function(){lt.target&<.target.addDep(this)},lt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(o&&!w(i,"default"))a=!1;else if(""===a||a===O(t)){var c=zt(String,i.type);(c<0||s0&&(le((c=t(c,(n||"")+"_"+r))[0])&&le(l)&&(f[u]=gt(l.text+c[0].text),c.shift()),f.push.apply(f,c)):s(c)?le(l)?f[u]=gt(l.text+c):""!==c&&f.push(gt(c)):le(c)&&le(l)?f[u]=gt(l.text+c.text):(a(e._isVList)&&o(c.tag)&&i(c.key)&&o(n)&&(c.key="__vlist"+n+"_"+r+"__"),f.push(c)));return f}(t):void 0}function le(t){return o(t)&&o(t.text)&&!1===t.isComment}function fe(t,e){if(t){for(var n=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==r&&s===n.$key&&!o&&!n.$hasNormal)return n;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=me(e,c,t[c]))}else i={};for(var u in e)u in i||(i[u]=ve(e,u));return t&&Object.isExtensible(t)&&(t._normalized=i),z(i,"$stable",a),z(i,"$key",s),z(i,"$hasNormal",o),i}function me(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:ue(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function ve(t,e){return function(){return t[e]}}function ge(t,e){var n,r,i,a,s;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,i=t.length;rdocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}function ln(){var t,e;for(sn=cn(),on=!0,tn.sort((function(t,e){return t.id-e.id})),an=0;anan&&tn[n].id>t.id;)n--;tn.splice(n+1,0,t)}else tn.push(t);rn||(rn=!0,ee(ln))}}(this)},dn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||c(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){Ut(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},dn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:A,set:A};function hn(t,e,n){pn.get=function(){return this[e][n]},pn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,pn)}function mn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[];t.$parent&&kt(!1);var o=function(o){i.push(o);var a=Nt(o,e,n,t);Ot(r,o,a),o in t||hn(t,"_props",o)};for(var a in e)o(a);kt(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?A:E(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;l(e=t._data="function"==typeof e?function(t,e){dt();try{return t.call(e,e)}catch(t){return Ut(t,e,"data()"),{}}finally{pt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,i=(t.$options.methods,n.length);for(;i--;){var o=n[i];0,r&&w(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&hn(t,"_data",o))}var a;St(e,!0)}(t):St(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var i in e){var o=e[i],a="function"==typeof o?o:o.get;0,r||(n[i]=new dn(t,a||A,A,vn)),i in t||gn(t,i,o)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function En(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a=n[o];if(a){var s=Sn(a.componentOptions);s&&!e(s)&&$n(n,o,r,i)}}}function $n(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[e]=null,y(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=xn++,e._isVue=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Mt(_n(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$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&&Ke(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,i=n&&n.context;t.$slots=de(e._renderChildren,i),t.$scopedSlots=r,t._c=function(e,n,r,i){return Fe(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Fe(t,e,n,r,i,!0)};var o=n&&n.data;Ot(t,"$attrs",o&&o.attrs||r,null,!0),Ot(t,"$listeners",e._parentListeners||r,null,!0)}(e),Qe(e,"beforeCreate"),function(t){var e=fe(t.$options.inject,t);e&&(kt(!1),Object.keys(e).forEach((function(n){Ot(t,n,e[n])})),kt(!0))}(e),mn(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),Qe(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(kn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Et,t.prototype.$delete=$t,t.prototype.$watch=function(t,e,n){if(l(e))return wn(this,t,e,n);(n=n||{}).user=!0;var r=new dn(this,t,e,n);if(n.immediate)try{e.call(this,r.value)}catch(t){Ut(t,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(kn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var i=0,o=t.length;i1?$(n):n;for(var r=$(arguments,1),i='event handler for "'+t+'"',o=0,a=n.length;oparseInt(this.max)&&$n(a,s[0],s,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return F}};Object.defineProperty(t,"config",e),t.util={warn:ct,extend:I,mergeOptions:Mt,defineReactive:Ot},t.set=Et,t.delete=$t,t.nextTick=ee,t.observable=function(t){return St(t),t},t.options=Object.create(null),D.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,I(t.options.components,Pn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=$(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Mt(this.options,t),this}}(t),Cn(t),function(t){D.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(kn),Object.defineProperty(kn.prototype,"$isServer",{get:rt}),Object.defineProperty(kn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(kn,"FunctionalRenderContext",{value:je}),kn.version="2.6.11";var An=v("style,class"),jn=v("input,textarea,option,select,progress"),Tn=v("contenteditable,draggable,spellcheck"),Ln=v("events,caret,typing,plaintext-only"),Rn=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Mn="http://www.w3.org/1999/xlink",Dn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Nn=function(t){return Dn(t)?t.slice(6,t.length):""},Fn=function(t){return null==t||!1===t};function Bn(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=zn(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=zn(e,n.data));return function(t,e){if(o(t)||o(e))return Un(t,Gn(e));return""}(e.staticClass,e.class)}function zn(t,e){return{staticClass:Un(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function Un(t,e){return t?e?t+" "+e:t:e||""}function Gn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,i=t.length;r-1?dr(t,e,n):Rn(e)?Fn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Tn(e)?t.setAttribute(e,function(t,e){return Fn(e)||"false"===e?"false":"contenteditable"===t&&Ln(e)?e:"true"}(e,n)):Dn(e)?Fn(n)?t.removeAttributeNS(Mn,Nn(e)):t.setAttributeNS(Mn,e,n):dr(t,e,n)}function dr(t,e,n){if(Fn(n))t.removeAttribute(e);else{if(Z&&!Y&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var pr={create:lr,update:lr};function hr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Bn(e),c=n._transitionClasses;o(c)&&(s=Un(s,Gn(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var mr,vr={create:hr,update:hr};function gr(t,e,n){var r=mr;return function i(){var o=e.apply(null,arguments);null!==o&&wr(t,i,n,r)}}var yr=qt&&!(Q&&Number(Q[1])<=53);function br(t,e,n,r){if(yr){var i=sn,o=e;e=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}mr.addEventListener(t,e,et?{capture:n,passive:r}:n)}function wr(t,e,n,r){(r||mr).removeEventListener(t,e._wrapper||e,n)}function xr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};mr=e.elm,function(t){if(o(t.__r)){var e=Z?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),ae(n,r,br,wr,gr,e.context),mr=void 0}}var _r,kr={create:xr,update:xr};function Cr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=e.elm,s=t.data.domProps||{},c=e.data.domProps||{};for(n in o(c.__ob__)&&(c=e.data.domProps=I({},c)),s)n in c||(a[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=r;var u=i(r)?"":String(r);Sr(a,u)&&(a.value=u)}else if("innerHTML"===n&&Vn(a.tagName)&&i(a.innerHTML)){(_r=_r||document.createElement("div")).innerHTML=""+r+"";for(var l=_r.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(r!==s[n])try{a[n]=r}catch(t){}}}}function Sr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return m(n)!==m(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Or={create:Cr,update:Cr},Er=x((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function $r(t){var e=Ir(t.style);return t.staticStyle?I(t.staticStyle,e):e}function Ir(t){return Array.isArray(t)?P(t):"string"==typeof t?Er(t):t}var Pr,Ar=/^--/,jr=/\s*!important$/,Tr=function(t,e,n){if(Ar.test(e))t.style.setProperty(e,n);else if(jr.test(n))t.style.setProperty(O(e),n.replace(jr,""),"important");else{var r=Rr(e);if(Array.isArray(n))for(var i=0,o=n.length;i-1?e.split(Nr).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Br(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Nr).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function zr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&I(e,Ur(t.name||"v")),I(e,t),e}return"string"==typeof t?Ur(t):void 0}}var Ur=x((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Gr=W&&!Y,Hr="transition",Wr="transitionend",Vr="animation",qr="animationend";Gr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Hr="WebkitTransition",Wr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Vr="WebkitAnimation",qr="webkitAnimationEnd"));var Kr=W?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Zr(t){Kr((function(){Kr(t)}))}function Yr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Fr(t,e))}function Jr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Br(t,e)}function Xr(t,e,n){var r=ti(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s="transition"===i?Wr:qr,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n="transition",l=a,f=o.length):"animation"===e?u>0&&(n="animation",l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&Qr.test(r[Hr+"Property"])}}function ei(t,e){for(;t.length1}function si(t,e){!0!==e.data.show&&ri(e)}var ci=function(t){var e,n,r={},c=t.modules,u=t.nodeOps;for(e=0;eh?b(t,i(n[g+1])?null:n[g+1].elm,n,p,g,r):p>g&&x(e,d,h)}(d,v,g,n,l):o(g)?(o(t.text)&&u.setTextContent(d,""),b(d,null,g,0,g.length-1,n)):o(v)?x(v,0,v.length-1):o(t.text)&&u.setTextContent(d,""):t.text!==e.text&&u.setTextContent(d,e.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,e)}}}function S(t,e,n){if(a(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==o&&(a.selected=o);else if(L(pi(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function di(t,e){return e.every((function(e){return!L(e,t)}))}function pi(t){return"_value"in t?t._value:t.value}function hi(t){t.target.composing=!0}function mi(t){t.target.composing&&(t.target.composing=!1,vi(t.target,"input"))}function vi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function gi(t){return!t.componentInstance||t.data&&t.data.transition?t:gi(t.componentInstance._vnode)}var yi={model:ui,show:{bind:function(t,e,n){var r=e.value,i=(n=gi(n)).data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,ri(n,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=gi(n)).data&&n.data.transition?(n.data.show=!0,r?ri(n,(function(){t.style.display=t.__vOriginalDisplay})):ii(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}}},bi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function wi(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?wi(He(e.children)):t}function xi(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[k(o)]=i[o];return e}function _i(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var ki=function(t){return t.tag||Ge(t)},Ci=function(t){return"show"===t.name},Si={name:"transition",props:bi,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(ki)).length){0;var r=this.mode;0;var i=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return i;var o=wi(i);if(!o)return i;if(this._leaving)return _i(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var c=(o.data||(o.data={})).transition=xi(this),u=this._vnode,l=wi(u);if(o.data.directives&&o.data.directives.some(Ci)&&(o.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(o,l)&&!Ge(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=I({},c);if("out-in"===r)return this._leaving=!0,se(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),_i(t,i);if("in-out"===r){if(Ge(o))return u;var d,p=function(){d()};se(c,"afterEnter",p),se(c,"enterCancelled",p),se(f,"delayLeave",(function(t){d=t}))}}return i}}},Oi=I({tag:String,moveClass:String},bi);function Ei(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function $i(t){t.data.newPos=t.elm.getBoundingClientRect()}function Ii(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete Oi.mode;var Pi={Transition:Si,TransitionGroup:{props:Oi,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var i=Ye(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=xi(this),s=0;s-1?Kn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Kn[t]=/HTMLUnknownElement/.test(e.toString())},I(kn.options.directives,yi),I(kn.options.components,Pi),kn.prototype.__patch__=W?ci:A,kn.prototype.$mount=function(t,e){return function(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=vt),Qe(t,"beforeMount"),r=function(){t._update(t._render(),n)},new dn(t,r,A,{before:function(){t._isMounted&&!t._isDestroyed&&Qe(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,Qe(t,"mounted")),t}(this,t=t&&W?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},W&&setTimeout((function(){F.devtools&&it&&it.emit("init",kn)}),0),e.default=kn},function(t,e,n){var r=n(4),i=n(27).f,o=n(13),a=n(12),s=n(77),c=n(121),u=n(103);t.exports=function(t,e){var n,l,f,d,p,h=t.target,m=t.global,v=t.stat;if(n=m?r:v?r[h]||s(h,{}):(r[h]||{}).prototype)for(l in e){if(d=e[l],f=t.noTargetGet?(p=i(n,l))&&p.value:n[l],!u(m?l:h+(v?".":"#")+l,t.forced)&&void 0!==f){if(typeof d==typeof f)continue;c(d,f)}(t.sham||f&&f.sham)&&o(d,"sham",!0),a(n,l,d,t)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(4),i=n(76),o=n(8),a=n(52),s=n(79),c=n(115),u=i("wks"),l=r.Symbol,f=c?l:l&&l.withoutSetter||a;t.exports=function(t){return o(u,t)||(s&&o(l,t)?u[t]=l[t]:u[t]=f("Symbol."+t)),u[t]}},function(t,e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||Function("return this")()},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(5);t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e,n){var r=n(2);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(7),i=n(114),o=n(6),a=n(51),s=Object.defineProperty;e.f=r?s:function(t,e,n){if(o(t),e=a(e,!0),o(n),i)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(86),i=n(12),o=n(201);r||i(Object.prototype,"toString",o,{unsafe:!0})},function(t,e,n){var r=n(25);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(4),i=n(13),o=n(8),a=n(77),s=n(82),c=n(31),u=c.get,l=c.enforce,f=String(String).split("String");(t.exports=function(t,e,n,s){var c=!!s&&!!s.unsafe,u=!!s&&!!s.enumerable,d=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof e||o(n,"name")||i(n,"name",e),l(n).source=f.join("string"==typeof e?e:"")),t!==r?(c?!d&&t[e]&&(u=!0):delete t[e],u?t[e]=n:i(t,e,n)):u?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||s(this)}))},function(t,e,n){var r=n(7),i=n(9),o=n(33);t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(54),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){var r=n(38),i=n(25);t.exports=function(t){return r(i(t))}},function(t,e,n){var r=n(145),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},function(t,e,n){var r=n(119),i=n(4),o=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t])||o(i[t]):r[t]&&r[t][e]||i[t]&&i[t][e]}},function(t,e,n){var r=n(7),i=n(2),o=n(8),a=Object.defineProperty,s={},c=function(t){throw t};t.exports=function(t,e){if(o(s,t))return s[t];e||(e={});var n=[][t],u=!!o(e,"ACCESSORS")&&e.ACCESSORS,l=o(e,0)?e[0]:c,f=o(e,1)?e[1]:void 0;return s[t]=!!n&&!i((function(){if(u&&!r)return!0;var t={length:-1};u?a(t,1,{enumerable:!0,get:c}):t[1]=1,n.call(t,l,f)}))}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,n){"use strict";var r=n(1),i=n(35).filter,o=n(56),a=n(19),s=o("filter"),c=a("filter");r({target:"Array",proto:!0,forced:!s||!c},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e){t.exports=!1},function(t,e,n){var r=n(226),i=n(229);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(108).charAt,i=n(31),o=n(120),a=i.set,s=i.getterFor("String Iterator");o(String,"String",(function(t){a(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=s(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=r(n,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var r=n(7),i=n(83),o=n(33),a=n(16),s=n(51),c=n(8),u=n(114),l=Object.getOwnPropertyDescriptor;e.f=r?l:function(t,e){if(t=a(t),e=s(e,!0),u)try{return l(t,e)}catch(t){}if(c(t,e))return o(!i.f.call(t,e),t[e])}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){"use strict";var r=n(1),i=n(5),o=n(41),a=n(117),s=n(14),c=n(16),u=n(57),l=n(3),f=n(56),d=n(19),p=f("slice"),h=d("slice",{ACCESSORS:!0,0:0,1:2}),m=l("species"),v=[].slice,g=Math.max;r({target:"Array",proto:!0,forced:!p||!h},{slice:function(t,e){var n,r,l,f=c(this),d=s(f.length),p=a(t,d),h=a(void 0===e?d:e,d);if(o(f)&&("function"!=typeof(n=f.constructor)||n!==Array&&!o(n.prototype)?i(n)&&null===(n=n[m])&&(n=void 0):n=void 0,n===Array||void 0===n))return v.call(f,p,h);for(r=new(void 0===n?Array:n)(g(h-p,0)),l=0;p=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r,i=n(6),o=n(183),a=n(81),s=n(39),c=n(118),u=n(78),l=n(55),f=l("IE_PROTO"),d=function(){},p=function(t){return" + diff --git a/docs/blog/2020/06/05/step-by-step-guide/index.html b/docs/blog/2020/06/05/step-by-step-guide/index.html index de6f799f86..dad0cce322 100644 --- a/docs/blog/2020/06/05/step-by-step-guide/index.html +++ b/docs/blog/2020/06/05/step-by-step-guide/index.html @@ -70,8 +70,8 @@ - - + +
+ diff --git a/docs/blog/2020/08/12/immudb-invoice-immutable-storage/index.html b/docs/blog/2020/08/12/immudb-invoice-immutable-storage/index.html index 7aae7b62bc..71f4e30f90 100644 --- a/docs/blog/2020/08/12/immudb-invoice-immutable-storage/index.html +++ b/docs/blog/2020/08/12/immudb-invoice-immutable-storage/index.html @@ -70,8 +70,8 @@ - - + +
+ diff --git a/docs/blog/2020/08/20/immudb4j-get-started/index.html b/docs/blog/2020/08/20/immudb4j-get-started/index.html index 8ee5b5fe62..c182e6846a 100644 --- a/docs/blog/2020/08/20/immudb4j-get-started/index.html +++ b/docs/blog/2020/08/20/immudb4j-get-started/index.html @@ -70,8 +70,8 @@ - - + +
+ diff --git a/docs/careers/index.html b/docs/careers/index.html index d0feb4d963..b8469f4f11 100644 --- a/docs/careers/index.html +++ b/docs/careers/index.html @@ -70,8 +70,8 @@ - - + +
- + diff --git a/docs/careers/job-descriptions/qa-automation-engineer.html b/docs/careers/job-descriptions/qa-automation-engineer.html index 289ded737a..2864292eaa 100644 --- a/docs/careers/job-descriptions/qa-automation-engineer.html +++ b/docs/careers/job-descriptions/qa-automation-engineer.html @@ -70,8 +70,8 @@ - - + +
- + diff --git a/docs/careers/job-descriptions/senior-software-engineer-go.html b/docs/careers/job-descriptions/senior-software-engineer-go.html index 99b58ba6da..3c3aa13b83 100644 --- a/docs/careers/job-descriptions/senior-software-engineer-go.html +++ b/docs/careers/job-descriptions/senior-software-engineer-go.html @@ -70,8 +70,8 @@ - - + +
- + diff --git a/docs/careers/job-descriptions/software-development-team-lead.html b/docs/careers/job-descriptions/software-development-team-lead.html index e210e5899b..8af003f3d1 100644 --- a/docs/careers/job-descriptions/software-development-team-lead.html +++ b/docs/careers/job-descriptions/software-development-team-lead.html @@ -70,8 +70,8 @@ - - + +
- + diff --git a/docs/command-reference.html b/docs/command-reference.html index 5d2e6770d9..0746c48a44 100644 --- a/docs/command-reference.html +++ b/docs/command-reference.html @@ -70,8 +70,8 @@ - - + +