All Downloads are FREE. Search and download functionalities are using the official Maven repository.

templates.JavaServer.txt.Handler.template.scala Maven / Gradle / Ivy

Go to download

Apache Pekko gRPC - Support for building streaming gRPC servers and clients on top of Pekko Streams.

The newest version!

package templates.JavaServer.txt

import _root_.play.twirl.api.TwirlFeatureImports._
import _root_.play.twirl.api.TwirlHelperImports._
import _root_.play.twirl.api.Html
import _root_.play.twirl.api.JavaScript
import _root_.play.twirl.api.Txt
import _root_.play.twirl.api.Xml

object Handler extends _root_.play.twirl.api.BaseScalaTemplate[play.twirl.api.TxtFormat.Appendable,_root_.play.twirl.api.Format[play.twirl.api.TxtFormat.Appendable]](play.twirl.api.TxtFormat) with _root_.play.twirl.api.Template2[org.apache.pekko.grpc.gen.javadsl.Service,Boolean,play.twirl.api.TxtFormat.Appendable] {

  /*
 * Copyright (C) 2018-2021 Lightbend Inc. 
 */
  def apply/*14.2*/(service: org.apache.pekko.grpc.gen.javadsl.Service, powerApis: Boolean):play.twirl.api.TxtFormat.Appendable = {
    _display_ {
      {


Seq[Any](format.raw/*15.1*/("""
"""),_display_(/*16.2*/org/*16.5*/.apache.pekko.grpc.gen.Constants.DoNotEditComment),format.raw/*16.54*/("""
"""),format.raw/*17.1*/("""package """),_display_(/*17.10*/service/*17.17*/.packageName),format.raw/*17.29*/(""";

import java.util.Iterator;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;

import org.apache.pekko.japi.function.Function;
import org.apache.pekko.actor.ActorSystem;
import org.apache.pekko.actor.ClassicActorSystemProvider;
import org.apache.pekko.annotation.ApiMayChange;
import org.apache.pekko.stream.Materializer;
import org.apache.pekko.stream.SystemMaterializer;

import org.apache.pekko.grpc.Trailers;
import org.apache.pekko.grpc.javadsl.GrpcMarshalling;
import org.apache.pekko.grpc.javadsl.GrpcExceptionHandler;
import org.apache.pekko.grpc.internal.TelemetryExtension;
import org.apache.pekko.grpc.internal.TelemetrySpi;

import org.apache.pekko.grpc.PekkoGrpcGenerated;

"""),_display_(/*38.2*/{if (powerApis) "import org.apache.pekko.grpc.javadsl.Metadata;\nimport org.apache.pekko.grpc.javadsl.MetadataBuilder;" else ""}),format.raw/*38.130*/("""

"""),format.raw/*40.1*/("""import static """),_display_(/*40.16*/{service.packageName}),format.raw/*40.37*/("""."""),_display_(/*40.39*/{service.name}),format.raw/*40.53*/(""".Serializers.*;

"""),_display_(/*42.2*/defining(if (powerApis) service.name + "PowerApi" else service.name)/*42.70*/ { serviceName =>_display_(Seq[Any](format.raw/*42.87*/("""
"""),format.raw/*43.1*/("""/*
 * Generated by Pekko gRPC. DO NOT EDIT.
 *
 * The API of this class may still change in future Apache Pekko gRPC versions, see for instance
 * https://github.com/akka/akka-grpc/issues/994
 */
@ApiMayChange

@PekkoGrpcGenerated
public class """),_display_(/*52.15*/{serviceName}),format.raw/*52.28*/("""HandlerFactory """),format.raw/*52.43*/("""{"""),format.raw/*52.44*/("""

    """),format.raw/*54.5*/("""private static final CompletionStage notFound = CompletableFuture.completedFuture(
      org.apache.pekko.http.javadsl.model.HttpResponse.create().withStatus(org.apache.pekko.http.javadsl.model.StatusCodes.NOT_FOUND));

    private static final CompletionStage unsupportedMediaType = CompletableFuture.completedFuture(
      org.apache.pekko.http.javadsl.model.HttpResponse.create().withStatus(org.apache.pekko.http.javadsl.model.StatusCodes.UNSUPPORTED_MEDIA_TYPE));

    /**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example `Http().bindAndHandleAsync`
     * for the generated partial function handler and ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*64.12*/("""{"""),format.raw/*64.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*64.81*/("""}"""),format.raw/*64.82*/(""" """),format.raw/*64.83*/("""with """),format.raw/*64.88*/("""{"""),format.raw/*64.89*/("""@link """),_display_(/*64.97*/{service.name}),format.raw/*64.111*/("""HandlerFactory#partial"""),format.raw/*64.133*/("""}"""),format.raw/*64.134*/(""" """),format.raw/*64.135*/("""when combining
     * several services.
     */
    public static Function> create("""),_display_(/*67.152*/serviceName),format.raw/*67.163*/(""" """),format.raw/*67.164*/("""implementation, ClassicActorSystemProvider system) """),format.raw/*67.215*/("""{"""),format.raw/*67.216*/("""
      """),format.raw/*68.7*/("""return create(implementation, """),_display_(/*68.38*/{service.name}),format.raw/*68.52*/(""".name, system);
    """),format.raw/*69.5*/("""}"""),format.raw/*69.6*/("""

    """),format.raw/*71.5*/("""/**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example `Http().bindAndHandleAsync`
     * for the generated partial function handler and ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*75.12*/("""{"""),format.raw/*75.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*75.81*/("""}"""),format.raw/*75.82*/(""" """),format.raw/*75.83*/("""with """),format.raw/*75.88*/("""{"""),format.raw/*75.89*/("""@link """),_display_(/*75.97*/{service.name}),format.raw/*75.111*/("""HandlerFactory#partial"""),format.raw/*75.133*/("""}"""),format.raw/*75.134*/(""" """),format.raw/*75.135*/("""when combining
     * several services.
     */
    public static Function> create("""),_display_(/*78.152*/serviceName),format.raw/*78.163*/(""" """),format.raw/*78.164*/("""implementation, org.apache.pekko.japi.Function> eHandler, ClassicActorSystemProvider system) """),format.raw/*78.322*/("""{"""),format.raw/*78.323*/("""
      """),format.raw/*79.7*/("""return create(implementation, """),_display_(/*79.38*/{service.name}),format.raw/*79.52*/(""".name, eHandler, system);
    """),format.raw/*80.5*/("""}"""),format.raw/*80.6*/("""

    """),format.raw/*82.5*/("""/**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example `Http().bindAndHandleAsync`
     * for the generated partial function handler and ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*86.12*/("""{"""),format.raw/*86.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*86.81*/("""}"""),format.raw/*86.82*/(""" """),format.raw/*86.83*/("""with """),format.raw/*86.88*/("""{"""),format.raw/*86.89*/("""@link """),_display_(/*86.97*/{service.name}),format.raw/*86.111*/("""HandlerFactory#partial"""),format.raw/*86.133*/("""}"""),format.raw/*86.134*/(""" """),format.raw/*86.135*/("""when combining
     * several services.
     *
     * Registering a gRPC service under a custom prefix is not widely supported and strongly discouraged by the specification.
     */
    public static Function> create("""),_display_(/*91.152*/serviceName),format.raw/*91.163*/(""" """),format.raw/*91.164*/("""implementation, String prefix, ClassicActorSystemProvider system) """),format.raw/*91.230*/("""{"""),format.raw/*91.231*/("""
      """),format.raw/*92.7*/("""return partial(implementation, prefix, SystemMaterializer.get(system).materializer(), GrpcExceptionHandler.defaultMapper(), system);
    """),format.raw/*93.5*/("""}"""),format.raw/*93.6*/("""

    """),format.raw/*95.5*/("""/**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example `Http().bindAndHandleAsync`
     * for the generated partial function handler and ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*99.12*/("""{"""),format.raw/*99.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*99.81*/("""}"""),format.raw/*99.82*/(""" """),format.raw/*99.83*/("""with """),format.raw/*99.88*/("""{"""),format.raw/*99.89*/("""@link """),_display_(/*99.97*/{service.name}),format.raw/*99.111*/("""HandlerFactory#partial"""),format.raw/*99.133*/("""}"""),format.raw/*99.134*/(""" """),format.raw/*99.135*/("""when combining
     * several services.
     *
     * Registering a gRPC service under a custom prefix is not widely supported and strongly discouraged by the specification.
     */
    public static Function> create("""),_display_(/*104.152*/serviceName),format.raw/*104.163*/(""" """),format.raw/*104.164*/("""implementation, String prefix, org.apache.pekko.japi.Function> eHandler, ClassicActorSystemProvider system) """),format.raw/*104.337*/("""{"""),format.raw/*104.338*/("""
      """),format.raw/*105.7*/("""return partial(implementation, prefix, SystemMaterializer.get(system).materializer(), eHandler, system);
    """),format.raw/*106.5*/("""}"""),format.raw/*106.6*/("""

"""),_display_(if(serviceName != "ServerReflection")/*108.39*/ {_display_(Seq[Any](format.raw/*108.41*/("""

    """),format.raw/*110.5*/("""/**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example `Http().bindAndHandleAsync`
     * for the generated partial function handler. The generated handler falls back to a reflection handlers for
     * `"""),_display_(/*113.10*/{service.name}),format.raw/*113.24*/("""` and ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*115.12*/("""{"""),format.raw/*115.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*115.81*/("""}"""),format.raw/*115.82*/(""" """),format.raw/*115.83*/("""with """),format.raw/*115.88*/("""{"""),format.raw/*115.89*/("""@link """),_display_(/*115.97*/{service.name}),format.raw/*115.111*/("""HandlerFactory#partial"""),format.raw/*115.133*/("""}"""),format.raw/*115.134*/(""" """),format.raw/*115.135*/("""when combining
     * several services.
     */
    @SuppressWarnings("unchecked")
    public static Function> createWithServerReflection("""),_display_(/*119.172*/serviceName),format.raw/*119.183*/(""" """),format.raw/*119.184*/("""implementation, ClassicActorSystemProvider system) """),format.raw/*119.235*/("""{"""),format.raw/*119.236*/("""
      """),format.raw/*120.7*/("""return org.apache.pekko.grpc.javadsl.ServiceHandler.concatOrNotFound(
          """),_display_(/*121.12*/{serviceName}),format.raw/*121.25*/("""HandlerFactory.create(implementation, system),
          org.apache.pekko.grpc.javadsl.ServerReflection.create(
            java.util.Collections.singletonList("""),_display_(/*123.50*/{service.name}),format.raw/*123.64*/(""".description),
            system));
    """),format.raw/*125.5*/("""}"""),format.raw/*125.6*/("""

""")))} else {null} ),format.raw/*127.2*/("""

    """),format.raw/*129.5*/("""/**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example
     * `Http.get(system).bindAndHandleAsync`. It ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*133.12*/("""{"""),format.raw/*133.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*133.81*/("""}"""),format.raw/*133.82*/(""" """),format.raw/*133.83*/("""when combining several services.
     */
    public static Function> partial("""),_display_(/*135.153*/serviceName),format.raw/*135.164*/(""" """),format.raw/*135.165*/("""implementation, String prefix, ClassicActorSystemProvider system) """),format.raw/*135.231*/("""{"""),format.raw/*135.232*/("""
      """),format.raw/*136.7*/("""return partial(implementation, prefix, SystemMaterializer.get(system).materializer(), GrpcExceptionHandler.defaultMapper(), system);
    """),format.raw/*137.5*/("""}"""),format.raw/*137.6*/("""

    """),format.raw/*139.5*/("""/**
     * Creates a `HttpRequest` to `HttpResponse` handler that can be used in for example
     * `Http.get(system).bindAndHandleAsync`. It ends with `StatusCodes.NotFound` if the request is not matching.
     *
     * Use """),format.raw/*143.12*/("""{"""),format.raw/*143.13*/("""@link org.apache.pekko.grpc.javadsl.ServiceHandler#concatOrNotFound"""),format.raw/*143.81*/("""}"""),format.raw/*143.82*/(""" """),format.raw/*143.83*/("""when combining several services.
     */
    public static Function> partial("""),_display_(/*145.153*/serviceName),format.raw/*145.164*/(""" """),format.raw/*145.165*/("""implementation, String prefix, Materializer mat, org.apache.pekko.japi.Function> eHandler, ClassicActorSystemProvider system) """),format.raw/*145.356*/("""{"""),format.raw/*145.357*/("""
      """),format.raw/*146.7*/("""TelemetrySpi spi = TelemetryExtension.get(system).spi();
      return (req -> """),format.raw/*147.22*/("""{"""),format.raw/*147.23*/("""
        """),format.raw/*148.9*/("""Iterator segments = req.getUri().pathSegments().iterator();
        if (segments.hasNext() && segments.next().equals(prefix) && segments.hasNext()) """),format.raw/*149.89*/("""{"""),format.raw/*149.90*/("""
          """),format.raw/*150.11*/("""String method = segments.next();
          if (segments.hasNext()) return notFound; // we don't allow any random `/prefix/Method/anything/here
          else """),format.raw/*152.16*/("""{"""),format.raw/*152.17*/("""
            """),format.raw/*153.13*/("""return handle(spi.onRequest(prefix, method, req), method, implementation, mat, eHandler, system);
          """),format.raw/*154.11*/("""}"""),format.raw/*154.12*/("""
        """),format.raw/*155.9*/("""}"""),format.raw/*155.10*/(""" """),format.raw/*155.11*/("""else """),format.raw/*155.16*/("""{"""),format.raw/*155.17*/("""
          """),format.raw/*156.11*/("""return notFound;
        """),format.raw/*157.9*/("""}"""),format.raw/*157.10*/("""
      """),format.raw/*158.7*/("""}"""),format.raw/*158.8*/(""");
    """),format.raw/*159.5*/("""}"""),format.raw/*159.6*/("""

    """),format.raw/*161.5*/("""public String getServiceName() """),format.raw/*161.36*/("""{"""),format.raw/*161.37*/("""
      """),format.raw/*162.7*/("""return """),_display_(/*162.15*/{service.name}),format.raw/*162.29*/(""".name;
    """),format.raw/*163.5*/("""}"""),format.raw/*163.6*/("""

    """),format.raw/*165.5*/("""private static CompletionStage handle(org.apache.pekko.http.javadsl.model.HttpRequest request, String method, """),_display_(/*165.166*/serviceName),format.raw/*165.177*/(""" """),format.raw/*165.178*/("""implementation, Materializer mat, org.apache.pekko.japi.Function> eHandler, ClassicActorSystemProvider system) """),format.raw/*165.354*/("""{"""),format.raw/*165.355*/("""
      """),format.raw/*166.7*/("""return GrpcMarshalling.negotiated(request, (reader, writer) -> """),format.raw/*166.70*/("""{"""),format.raw/*166.71*/("""
        """),format.raw/*167.9*/("""final CompletionStage response;
        """),_display_(/*168.10*/{if(powerApis) { "Metadata metadata = MetadataBuilder.fromHeaders(request.getHeaders());" } else { "" }}),format.raw/*168.114*/("""
        """),format.raw/*169.9*/("""switch(method) """),format.raw/*169.24*/("""{"""),format.raw/*169.25*/("""
          """),_display_(/*170.12*/for(method <- service.methods) yield /*170.42*/ {_display_(Seq[Any](format.raw/*170.44*/("""
          case """"),_display_(/*171.18*/method/*171.24*/.grpcName),format.raw/*171.33*/("""":
            response = """),_display_(/*172.25*/{method.unmarshal}),format.raw/*172.43*/("""(request.entity(), """),_display_(/*172.63*/method/*172.69*/.deserializer.name),format.raw/*172.87*/(""", mat, reader)
              ."""),_display_(/*173.17*/{if(method.outputStreaming) { "thenApply" } else { "thenCompose" }}),format.raw/*173.84*/("""(e -> implementation."""),_display_(/*173.106*/{method.name}),format.raw/*173.119*/("""(e"""),_display_(/*173.122*/{if(powerApis) { ", metadata" } else { "" }}),format.raw/*173.166*/("""))
              .thenApply(e -> """),_display_(/*174.32*/{method.marshal}),format.raw/*174.48*/("""(e, """),_display_(/*174.53*/method/*174.59*/.serializer.name),format.raw/*174.75*/(""", writer, system, eHandler));
            break;
          """)))}),format.raw/*176.12*/("""
          """),format.raw/*177.11*/("""default:
            CompletableFuture result = new CompletableFuture<>();
            result.completeExceptionally(new UnsupportedOperationException("Not implemented: " + method));
            response = result;
        """),format.raw/*181.9*/("""}"""),format.raw/*181.10*/("""
        """),format.raw/*182.9*/("""return response.exceptionally(e -> GrpcExceptionHandler.standard(e, eHandler, writer, system));
      """),format.raw/*183.7*/("""}"""),format.raw/*183.8*/(""")
      .orElseGet(() -> unsupportedMediaType);
    """),format.raw/*185.5*/("""}"""),format.raw/*185.6*/("""
  """),format.raw/*186.3*/("""}"""),format.raw/*186.4*/("""
""")))}),format.raw/*187.2*/("""
"""))
      }
    }
  }

  def render(service:org.apache.pekko.grpc.gen.javadsl.Service,powerApis:Boolean): play.twirl.api.TxtFormat.Appendable = apply(service,powerApis)

  def f:((org.apache.pekko.grpc.gen.javadsl.Service,Boolean) => play.twirl.api.TxtFormat.Appendable) = (service,powerApis) => apply(service,powerApis)

  def ref: this.type = this

}


              /*
                  -- GENERATED --
                  SOURCE: codegen/src/main/twirl/templates/JavaServer/Handler.scala.txt
                  HASH: 4785934c6e727f492157efa103b29ec9e9399aa4
                  MATRIX: 694->364|860->437|888->439|899->442|969->491|997->492|1033->501|1049->508|1082->520|1840->1252|1990->1380|2019->1382|2061->1397|2103->1418|2132->1420|2167->1434|2211->1452|2288->1520|2343->1537|2371->1538|2643->1785|2677->1798|2720->1813|2749->1814|2782->1820|3641->2651|3670->2652|3765->2720|3794->2721|3823->2722|3856->2727|3885->2728|3919->2736|3955->2750|4006->2772|4036->2773|4066->2774|4293->2973|4326->2984|4356->2985|4436->3036|4466->3037|4500->3044|4558->3075|4593->3089|4640->3109|4668->3110|4701->3116|4987->3374|5016->3375|5111->3443|5140->3444|5169->3445|5202->3450|5231->3451|5265->3459|5301->3473|5352->3495|5382->3496|5412->3497|5639->3696|5672->3707|5702->3708|5889->3866|5919->3867|5953->3874|6011->3905|6046->3919|6103->3949|6131->3950|6164->3956|6450->4214|6479->4215|6574->4283|6603->4284|6632->4285|6665->4290|6694->4291|6728->4299|6764->4313|6815->4335|6845->4336|6875->4337|7236->4670|7269->4681|7299->4682|7394->4748|7424->4749|7458->4756|7622->4893|7650->4894|7683->4900|7969->5158|7998->5159|8093->5227|8122->5228|8151->5229|8184->5234|8213->5235|8247->5243|8283->5257|8334->5279|8364->5280|8394->5281|8756->5614|8790->5625|8821->5626|9024->5799|9055->5800|9090->5807|9227->5916|9256->5917|9324->5957|9365->5959|9399->5965|9670->6208|9706->6222|9824->6311|9854->6312|9950->6380|9980->6381|10010->6382|10044->6387|10074->6388|10109->6396|10146->6410|10198->6432|10229->6433|10260->6434|10543->6689|10577->6700|10608->6701|10689->6752|10720->6753|10755->6760|10864->6841|10899->6854|11088->7015|11124->7029|11193->7070|11222->7071|11269->7074|11303->7080|11557->7305|11587->7306|11683->7374|11713->7375|11743->7376|11965->7569|11999->7580|12030->7581|12126->7647|12157->7648|12192->7655|12357->7792|12386->7793|12420->7799|12674->8024|12704->8025|12800->8093|12830->8094|12860->8095|13082->8288|13116->8299|13147->8300|13368->8491|13399->8492|13434->8499|13541->8577|13571->8578|13608->8587|13793->8743|13823->8744|13863->8755|14050->8913|14080->8914|14122->8927|14259->9035|14289->9036|14326->9045|14356->9046|14386->9047|14420->9052|14450->9053|14490->9064|14543->9089|14573->9090|14608->9097|14637->9098|14672->9105|14701->9106|14735->9112|14795->9143|14825->9144|14860->9151|14896->9159|14932->9173|14971->9184|15000->9185|15034->9191|15224->9352|15258->9363|15289->9364|15495->9540|15526->9541|15561->9548|15653->9611|15683->9612|15720->9621|15839->9712|15966->9816|16003->9825|16047->9840|16077->9841|16117->9853|16164->9883|16205->9885|16251->9903|16267->9909|16298->9918|16353->9945|16393->9963|16441->9983|16457->9989|16497->10007|16556->10038|16645->10105|16696->10127|16732->10140|16764->10143|16831->10187|16893->10221|16931->10237|16964->10242|16980->10248|17018->10264|17110->10324|17150->10335|17449->10606|17479->10607|17516->10616|17646->10718|17675->10719|17755->10771|17784->10772|17815->10775|17844->10776|17877->10778
                  LINES: 16->14|21->15|22->16|22->16|22->16|23->17|23->17|23->17|23->17|44->38|44->38|46->40|46->40|46->40|46->40|46->40|48->42|48->42|48->42|49->43|58->52|58->52|58->52|58->52|60->54|70->64|70->64|70->64|70->64|70->64|70->64|70->64|70->64|70->64|70->64|70->64|70->64|73->67|73->67|73->67|73->67|73->67|74->68|74->68|74->68|75->69|75->69|77->71|81->75|81->75|81->75|81->75|81->75|81->75|81->75|81->75|81->75|81->75|81->75|81->75|84->78|84->78|84->78|84->78|84->78|85->79|85->79|85->79|86->80|86->80|88->82|92->86|92->86|92->86|92->86|92->86|92->86|92->86|92->86|92->86|92->86|92->86|92->86|97->91|97->91|97->91|97->91|97->91|98->92|99->93|99->93|101->95|105->99|105->99|105->99|105->99|105->99|105->99|105->99|105->99|105->99|105->99|105->99|105->99|110->104|110->104|110->104|110->104|110->104|111->105|112->106|112->106|114->108|114->108|116->110|119->113|119->113|121->115|121->115|121->115|121->115|121->115|121->115|121->115|121->115|121->115|121->115|121->115|121->115|125->119|125->119|125->119|125->119|125->119|126->120|127->121|127->121|129->123|129->123|131->125|131->125|133->127|135->129|139->133|139->133|139->133|139->133|139->133|141->135|141->135|141->135|141->135|141->135|142->136|143->137|143->137|145->139|149->143|149->143|149->143|149->143|149->143|151->145|151->145|151->145|151->145|151->145|152->146|153->147|153->147|154->148|155->149|155->149|156->150|158->152|158->152|159->153|160->154|160->154|161->155|161->155|161->155|161->155|161->155|162->156|163->157|163->157|164->158|164->158|165->159|165->159|167->161|167->161|167->161|168->162|168->162|168->162|169->163|169->163|171->165|171->165|171->165|171->165|171->165|171->165|172->166|172->166|172->166|173->167|174->168|174->168|175->169|175->169|175->169|176->170|176->170|176->170|177->171|177->171|177->171|178->172|178->172|178->172|178->172|178->172|179->173|179->173|179->173|179->173|179->173|179->173|180->174|180->174|180->174|180->174|180->174|182->176|183->177|187->181|187->181|188->182|189->183|189->183|191->185|191->185|192->186|192->186|193->187
                  -- GENERATED --
              */
          




© 2015 - 2025 Weber Informatics LLC | Privacy Policy