Newer
Older
Dimitrios Giannopoulos
committed
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
<li class="md-nav__item">
<a href="../architecture/osom/" class="md-nav__link">
<span class="md-ellipsis">
OSOM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../architecture/oauth/" class="md-nav__link">
<span class="md-ellipsis">
Authentication
</span>
</a>
</li>
Dimitrios Giannopoulos
committed
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6" >
<label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
<span class="md-ellipsis">
APIs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6">
<span class="md-nav__icon md-icon"></span>
APIs
</label>
<ul class="md-nav__list" data-md-scrollfix>
Dimitrios Giannopoulos
committed
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
<li class="md-nav__item">
<a href="../architecture/tmfapi/" class="md-nav__link">
<span class="md-ellipsis">
TMF API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../architecture/nfvapi/" class="md-nav__link">
<span class="md-ellipsis">
NFV API
</span>
</a>
</li>
Dimitrios Giannopoulos
committed
</ul>
</nav>
</li>
Dimitrios Giannopoulos
committed
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
<li class="md-nav__item">
<a href="../architecture/tmfweb/" class="md-nav__link">
<span class="md-ellipsis">
TMF WEB
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../architecture/nfvweb/" class="md-nav__link">
<span class="md-ellipsis">
NFV WEB
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../architecture/issuemgt/" class="md-nav__link">
<span class="md-ellipsis">
Issue management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../architecture/centrallog/" class="md-nav__link">
<span class="md-ellipsis">
Central logging
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Dimitrios Giannopoulos
committed
Contributing to OSL
Dimitrios Giannopoulos
committed
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Dimitrios Giannopoulos
committed
Contributing to OSL
Dimitrios Giannopoulos
committed
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../contributing/developing/" class="md-nav__link">
<span class="md-ellipsis">
Developing
</span>
</a>
</li>
</ul>
</nav>
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="../terminology/" class="md-nav__link">
<span class="md-ellipsis">
Terminology
</span>
</a>
</li>
Dimitrios Giannopoulos
committed
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#examine-if-the-rules-are-executed-successfully" class="md-nav__link">
<span class="md-ellipsis">
Examine if the rules are executed successfully
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="#lcm-rules-and-osom-service-orchestration" class="md-nav__link">
<span class="md-ellipsis">
LCM Rules and OSOM Service Orchestration
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="#define-rules" class="md-nav__link">
<span class="md-ellipsis">
Define rules
</span>
</a>
<nav class="md-nav" aria-label="Define rules">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#definition-language" class="md-nav__link">
<span class="md-ellipsis">
Definition language
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
</ul>
</nav>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="#the-blocks-library" class="md-nav__link">
<span class="md-ellipsis">
The blocks library
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="#examples-of-rules" class="md-nav__link">
<span class="md-ellipsis">
Examples of Rules
</span>
</a>
<nav class="md-nav" aria-label="Examples of Rules">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#define-variables-according-to-cases" class="md-nav__link">
<span class="md-ellipsis">
define variables according to cases
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="#define-complex-osm-configs-for-day-0" class="md-nav__link">
<span class="md-ellipsis">
Define complex OSM configs for DAY 0
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
<li class="md-nav__item">
<a href="#define-and-instantiate-different-services-according-to-service-order-request" class="md-nav__link">
<span class="md-ellipsis">
Define and instantiate different services according to Service Order request
</span>
</a>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
<li class="md-nav__item">
<a href="#call-an-external-restful-service" class="md-nav__link">
<span class="md-ellipsis">
Call an external RESTful service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#create-new-service-orders" class="md-nav__link">
<span class="md-ellipsis">
Create New Service Orders
</span>
</a>
</li>
</ul>
</nav>
Dimitrios Giannopoulos
committed
</li>
Dimitrios Giannopoulos
committed
</ul>
</nav>
</div>
Dimitrios Giannopoulos
committed
</div>
Dimitrios Giannopoulos
committed
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
Dimitrios Giannopoulos
committed
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
<h1 id="lifecycle-management-lcm-rules">Lifecycle Management (LCM) Rules</h1>
<ul>
<li>NOTE: This is a prototype/experimental feature. So issues might raise during operation</li>
</ul>
<p>LCM Rules are used for defining complex conditions and actions during the lifecycle of a service. In Openslice there are four types of rules defined:</p>
<ul>
<li>PRE_PROVISION</li>
<li>CREATION</li>
<li>AFTER_ACTIVATION </li>
<li>SUPERVISION </li>
<li>AFTER_DEACTIVATION </li>
</ul>
<p>The following figure displays the different phases that the rules are performed, during the lifecycle of a Network Slice Instance.</p>
<p><a href="../images/lcm/lcmfig1.png"><img alt="Rules in NSI" src="../images/lcm/lcmfig1.png" /></a></p>
<ul>
<li>PRE_PROVISION rules: Run only once just before creating a service with a given priority. </li>
<li>CREATION rules: Run while the referenced service dependencies of a service are created</li>
<li>AFTER_ACTIVATION rules: Run only once just after a service get the ACTIVE state</li>
<li>SUPERVISION rules: Run when a characteristic of a service is changed and the service is in the ACTIVE state </li>
<li>AFTER_DEACTIVATION rules: Run only once just after a service get the INACTIVE/TERMINATED state </li>
</ul>
<p>In general the rules allow to perform many actions during service LCM. Thes are some examples:</p>
<ul>
<li>Modify service specification parameters before the instantiation of a service (or during operation) based on other dependencies. These parameters might be part of other services already included in Service order</li>
<li>Translate GST/NEST parameter values to other values passed later to NFVO for instantiation or control</li>
<li>Define complex OSM Configs based on other dependencies and passing variables</li>
<li>Define any dependencies when creating the referenced services</li>
<li>Dynamically include new service dependencies</li>
<li>Create new service orders so include dynamically other services</li>
<li>Call external (RESTful) services (via http(s), define payload, examine response)</li>
</ul>
<h2 id="examine-if-the-rules-are-executed-successfully">Examine if the rules are executed successfully</h2>
<p>Rules are transformed automatically to executable code (currently is Java). If a rule is performed successfully or has any issues (e.g. unexpected syntax errors or exceptions) appear in OSOM logfiles and also tey are attached as Notes to the running Service.</p>
<h2 id="lcm-rules-and-osom-service-orchestration">LCM Rules and OSOM Service Orchestration</h2>
<p>OSOM is the responsible service for executing the rules on a specific phase. The following image explains the design in the BPMN phases:</p>
<p><a href="../images/lcm/lcmfig1_osom.png"><img alt="Rules" src="../images/lcm/lcmfig1_osom.png" /></a></p>
<h2 id="define-rules">Define rules</h2>
<p>Rules are defined when designing a Service Spec. Here is an example of a list of rules:</p>
<p><a href="../images/lcm/lcmfig2.png"><img alt="lcmrules" src="../images/lcm/lcmfig2.png" /></a></p>
<p>Execution order of rules on a specific phase is random</p>
<ul>
<li>NOTE: There is a priority field. The lower the number the highest the priority of rule execution. For example Rule with priority 0 will run before rule with priority 1.</li>
</ul>
<h3 id="definition-language">Definition language</h3>
<ul>
<li>The visual language that Openslice used is based on Google's Blockly (see https://developers.google.com/blockly)</li>
<li>The blockly graph is automatically translated to Java internally and then dynamically executed during orchestration phases.</li>
</ul>
<p>The following figure is an example of such a rule design. The rule for example will run in PRE_PROVISION phase:</p>
<p><a href="../images/lcm/lcmfig3.png"><img alt="lcmrules" src="../images/lcm/lcmfig3.png" /></a></p>
<ul>
<li>The goal of the above rule is to properly define a variable AreaCodes given the chosen AreaOfService from a Service Order.</li>
<li>On the right side the user can define some rule properties or observe the underlying generated java code.</li>
</ul>
<h2 id="the-blocks-library">The blocks library</h2>
<p>The following images describe some blocks found in the library.</p>
<p>Blockly has syntax rules. It helps with colours to define them. </p>
<p>So for example a parameter that is a Number cannot be "glued" with a String. Will need some conversion first</p>
<p><a href="../images/lcm/lcmfig4.png"><img alt="lcmrules" src="../images/lcm/lcmfig4.png" /></a>
<a href="../images/lcm/lcmfig5.png"><img alt="lcmrules" src="../images/lcm/lcmfig5.png" /></a>
<a href="../images/lcm/lcmfig6.png"><img alt="lcmrules" src="../images/lcm/lcmfig6.png" /></a>
<a href="../images/lcm/lcmfig7.png"><img alt="lcmrules" src="../images/lcm/lcmfig7.png" /></a>
<a href="../images/lcm/lcmfig8.png"><img alt="lcmrules" src="../images/lcm/lcmfig8.png" /></a></p>
<h2 id="examples-of-rules">Examples of Rules</h2>
<p>The following images provide some examples of rules.</p>
<h3 id="define-variables-according-to-cases">define variables according to cases</h3>
<p>In the following example we :</p>
<ul>
<li>define a String variable. </li>
<li>Then according to the Area of Service selected from the Service Order of the Service Specification we need to define it properly.</li>
<li>We output the value to the OSOM Log</li>
<li>Define dynamically the value of another parameter (This is fictional) and then do some other condition check</li>
</ul>
<p>The strAreaCodes could be passed then e.g. to NFVO for instantiation of services to these cells.</p>
<p><a href="../images/lcm/lcmfig9.png"><img alt="lcmrules" src="../images/lcm/lcmfig9.png" /></a></p>
<h3 id="define-complex-osm-configs-for-day-0">Define complex OSM configs for DAY 0</h3>
<p>The following displays some complex examples for defining the parameters to pass to the NFV. In this case is OSM.</p>
<ul>
<li>
<p>NOTE: The OSM_CONFIG characteristic of a service is the one that it is used in orchestration to instantiate NS from OSM</p>
</li>
<li>
<p>check the variable strTargetsParam. It is passed to the variable strOsmConfig3 which is executed if the Number of Cameras is more than 100. </p>
</li>
<li>if the Video quality requested is 3, then the Maximum Namber of camers will be 8. Check the OSM detailed configuration block and its syntax.</li>
<li>if the Video quality requested is 2, we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We just injected a json text ( watch the Escape of the string for the Quotes!)</li>
<li>if the Video quality requested is 1, again we use a simpler OSM Config block to configure the parameter OSM_CONFIG. We use as injected json text a variable constructed later</li>
</ul>
<p><a href="../images/lcm/lcmfig10.png"><img alt="lcmrules" src="../images/lcm/lcmfig10.png" /></a></p>
<h3 id="define-and-instantiate-different-services-according-to-service-order-request">Define and instantiate different services according to Service Order request</h3>
<p>In the following example we would like to offer a service either as Platinum, Gold or Silver. Depending on the selection we need to instantiate different services.</p>
<p>There are different ways to accomplish this:</p>
<ul>
<li>create dynamically New Service Orders of RFSs with equivalent quality of Services</li>
<li>change for example the VIMs that you deploy the NS</li>
<li>change the NSD (that is use different VNFs)</li>
</ul>
<p>The following image displays for example the latter case.</p>
<p><a href="../images/lcm/lcmfig11.png"><img alt="lcmrules" src="../images/lcm/lcmfig11.png" /></a></p>
<h3 id="call-an-external-restful-service">Call an external RESTful service</h3>
<p>This is useful in cases for example of alarms , external logging, calling other services e.g. email or even a complex algorithm written in other language e.g. call an external service and get a result. (service e.g. a Python service)</p>
<p><a href="../images/lcm/lcmfig12.png"><img alt="lcmrules" src="../images/lcm/lcmfig12.png" /></a></p>
<p><a href="../images/lcm/lcmfig13.png"><img alt="lcmrules" src="../images/lcm/lcmfig13.png" /></a></p>
<h3 id="create-new-service-orders">Create New Service Orders</h3>
<p>The following example calls to Order a New Service Specification with specific Parameter Values</p>
Dimitrios Giannopoulos
committed
<p><a href="../images/lcm/lcmfig14.png"><img alt="lcmrules" src="../images/lcm/lcmfig14.png" /></a></p>
Dimitrios Giannopoulos
committed
Dimitrios Giannopoulos
committed
</article>
Dimitrios Giannopoulos
committed
</div>
Dimitrios Giannopoulos
committed
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
Dimitrios Giannopoulos
committed
</div>
Dimitrios Giannopoulos
committed
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2019-2024 Openslice Project
Dimitrios Giannopoulos
committed
</div>
Dimitrios Giannopoulos
committed
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
Dimitrios Giannopoulos
committed
</div>
Dimitrios Giannopoulos
committed
<div class="md-social">
<a href="https://osl.etsi.org/" target="_blank" rel="noopener" title="osl.etsi.org" class="md-social__link">
Dimitrios Giannopoulos
committed
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.4c2.2 20.4 3.3 41.8 3.3 64zm28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7zm-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6zM8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zm186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6h116.7zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.6z"/></svg>
Dimitrios Giannopoulos
committed
</a>
<a href="https://labs.etsi.org/rep/osl" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
Dimitrios Giannopoulos
committed
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81-2.9-.295-5.7.083-8.4 1.11-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.09 18.09 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3 4.7 0 9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z"/></svg>
Dimitrios Giannopoulos
committed
</a>
<a href="https://www.linkedin.com/company/openslice/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
Dimitrios Giannopoulos
committed
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
Dimitrios Giannopoulos
committed
</a>
<a href="https://twitter.com/OpensliceOSS" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
Dimitrios Giannopoulos
committed
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9L389.2 48zm-24.8 373.8h39.1L151.1 88h-42l255.3 333.8z"/></svg>
Dimitrios Giannopoulos
committed
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight"], "search": "../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
Dimitrios Giannopoulos
committed
<script src="../assets/javascripts/bundle.ad660dcc.min.js"></script>
Dimitrios Giannopoulos
committed
</body>
</html>