From a4d95d3fff1e973aa73276b852107d38ac2f64ae Mon Sep 17 00:00:00 2001 From: Thomas Segismont Date: Tue, 3 Jan 2017 12:34:38 +0100 Subject: [PATCH 01/11] Spring integration example with a worker verticle The worker verticle integration allows users to use backend Spring services with a standard frontend verticle. Frontend and backend communicate over the event bus through service proxies. --- spring-examples/README.adoc | 4 + spring-examples/pom.xml | 1 + .../spring-worker-example/README.adoc | 33 ++++++ spring-examples/spring-worker-example/pom.xml | 105 +++++++++++++++++ .../src/main/asciidoc/dataobjects.adoc | 19 +++ .../example/spring/worker/Application.java | 111 ++++++++++++++++++ .../io/vertx/example/spring/worker/Book.java | 96 +++++++++++++++ .../spring/worker/BookAsyncService.java | 41 +++++++ .../spring/worker/BookAsyncServiceImpl.java | 49 ++++++++ .../example/spring/worker/BookRepository.java | 27 +++++ .../example/spring/worker/BookRestApi.java | 92 +++++++++++++++ .../example/spring/worker/BookService.java | 49 ++++++++ .../spring/worker/SpringVerticleFactory.java | 61 ++++++++++ .../example/spring/worker/SpringWorker.java | 58 +++++++++ .../example/spring/worker/package-info.java | 25 ++++ .../src/main/resources/application.properties | 12 ++ 16 files changed, 783 insertions(+) create mode 100644 spring-examples/spring-worker-example/README.adoc create mode 100644 spring-examples/spring-worker-example/pom.xml create mode 100644 spring-examples/spring-worker-example/src/main/asciidoc/dataobjects.adoc create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Application.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Book.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncService.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncServiceImpl.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRepository.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRestApi.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookService.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringVerticleFactory.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringWorker.java create mode 100644 spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/package-info.java create mode 100644 spring-examples/spring-worker-example/src/main/resources/application.properties diff --git a/spring-examples/README.adoc b/spring-examples/README.adoc index 2f1c0f565..738588e26 100644 --- a/spring-examples/README.adoc +++ b/spring-examples/README.adoc @@ -17,3 +17,7 @@ The link:spring-boot-clustering/README.adoc[Spring Boot Clustering Examples] sho == Spring Verticle Factory The link:spring-verticle-factory/README.adoc[Spring Verticle Factory Example] shows how you can build a Verticle factory based on the Spring container. + +== Spring Worker Example + +The link:spring-worker-example/README.adoc[Vert.x Spring Worker Example] shows how you how to expose Spring services over the event bus with worker verticles. diff --git a/spring-examples/pom.xml b/spring-examples/pom.xml index 95dd36b36..7ed218577 100644 --- a/spring-examples/pom.xml +++ b/spring-examples/pom.xml @@ -15,6 +15,7 @@ spring-example springboot-clustering spring-verticle-factory + spring-worker-example diff --git a/spring-examples/spring-worker-example/README.adoc b/spring-examples/spring-worker-example/README.adoc new file mode 100644 index 000000000..83bb90277 --- /dev/null +++ b/spring-examples/spring-worker-example/README.adoc @@ -0,0 +1,33 @@ += Vert.x Spring Worker example + +This example shows how you can embed Vert.x in Spring Boot, having: + +- Spring container creating the verticles +- a standard verticle with Vert.x web for the REST API +- Spring backend services (with declarative transaction management and JPA repositories) +- a worker verticle exposing the Spring services over the event bus through service proxies + +This might be useful if you have an existing Spring codebase and want to keep your data access layer. + +To try the example, execute this command in a terminal: + +[source,shell] +---- +mvn clean spring-boot:run +---- + +Then add a book to the database: + +[source,shell] +---- +curl http://localhost:8080/book --data '{"name": "The Practice of System and Network Administration", "author":"Thomas A. Limoncelli, Christina J. Hn, Strata R. Chalup"}' +---- + +You should now be able to see your book saved: + +[source,shell] +---- +curl http://localhost:8080/books +---- + +Notice that the `id` field is now set which means that the book as indeed been persisted in the database. diff --git a/spring-examples/spring-worker-example/pom.xml b/spring-examples/spring-worker-example/pom.xml new file mode 100644 index 000000000..22034339f --- /dev/null +++ b/spring-examples/spring-worker-example/pom.xml @@ -0,0 +1,105 @@ + + + 4.0.0 + + + io.vertx + spring-examples + 3.3.3 + + + spring-worker-example + + + UTF-8 + UTF-8 + 1.8 + 1.4.3.RELEASE + 1.4.191 + + + + + + + org.springframework.boot + spring-boot-dependencies + ${boot.version} + pom + import + + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + ${h2.version} + + + io.vertx + vertx-web + ${project.version} + + + io.vertx + vertx-service-proxy + ${project.version} + + + io.vertx + vertx-codegen + ${project.version} + provided + + + + + + + + + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + + io.vertx.codegen.CodeGenProcessor + + + -AoutputDirectory=${project.basedir}/src/main + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${boot.version} + + + + + + + staging + + + staging + https://oss.sonatype.org/content/repositories/iovertx-3295 + + + + + + diff --git a/spring-examples/spring-worker-example/src/main/asciidoc/dataobjects.adoc b/spring-examples/spring-worker-example/src/main/asciidoc/dataobjects.adoc new file mode 100644 index 000000000..bf216e1a2 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/asciidoc/dataobjects.adoc @@ -0,0 +1,19 @@ += Cheatsheets + +[[Book]] +== Book + +++++ + A book JPA entity. +++++ +''' + +[cols=">25%,^25%,50%"] +[frame="topbot"] +|=== +^|Name | Type ^| Description +|[[author]]`author`|`String`|- +|[[id]]`id`|`Number (Long)`|- +|[[name]]`name`|`String`|- +|=== + diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Application.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Application.java new file mode 100644 index 000000000..671ea972b --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Application.java @@ -0,0 +1,111 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.core.DeploymentOptions; +import io.vertx.core.Vertx; +import io.vertx.core.VertxOptions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicBoolean; + +import static java.util.concurrent.TimeUnit.*; + +/** + * @author Thomas Segismont + */ +@SpringBootApplication +public class Application { + private static final Logger LOG = LoggerFactory.getLogger(Application.class); + + @Autowired + SpringVerticleFactory verticleFactory; + + /** + * The Vert.x worker pool size, configured in the {@code application.properties} file. + * + * Make sure this is greater than {@link #springWorkerInstances}. + */ + @Value("${vertx.worker.pool.size}") + int workerPoolSize; + + /** + * The number of {@link SpringWorker} instances to deploy, configured in the {@code application.properties} file. + */ + @Value("${vertx.springWorker.instances}") + int springWorkerInstances; + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + /** + * Deploy verticles when the Spring application is ready. + */ + @EventListener + public void deployVerticles(ApplicationReadyEvent event) { + Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(workerPoolSize)); + + // The verticle factory is registered manually because it is created by the Spring container + vertx.registerVerticleFactory(verticleFactory); + + CountDownLatch deployLatch = new CountDownLatch(2); + AtomicBoolean failed = new AtomicBoolean(false); + + String restApiVerticleName = verticleFactory.prefix() + ":" + BookRestApi.class.getName(); + vertx.deployVerticle(restApiVerticleName, ar -> { + if (ar.failed()) { + LOG.error("Failed to deploy verticle", ar.cause()); + failed.compareAndSet(false, true); + } + deployLatch.countDown(); + }); + + DeploymentOptions workerDeploymentOptions = new DeploymentOptions() + .setWorker(true) + // As worker verticles are never executed concurrently by Vert.x by more than one thread, + // deploy multiple instances to avoid serializing requests. + .setInstances(springWorkerInstances); + String workerVerticleName = verticleFactory.prefix() + ":" + SpringWorker.class.getName(); + vertx.deployVerticle(workerVerticleName, workerDeploymentOptions, ar -> { + if (ar.failed()) { + LOG.error("Failed to deploy verticle", ar.cause()); + failed.compareAndSet(false, true); + } + deployLatch.countDown(); + }); + + try { + if (!deployLatch.await(5, SECONDS)) { + throw new RuntimeException("Timeout waiting for verticle deployments"); + } else if (failed.get()) { + throw new RuntimeException("Failure while deploying verticles"); + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Book.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Book.java new file mode 100644 index 000000000..7cd4810f6 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/Book.java @@ -0,0 +1,96 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.codegen.annotations.DataObject; +import io.vertx.core.json.JsonObject; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * A book JPA entity. + * + * @author Thomas Segismont + */ +@Entity +// Book must annotated with @DataObject because it is used as a parameter type in BookAsyncService +@DataObject(generateConverter = true) +public class Book { + + @Id + @GeneratedValue + private Long id; + + private String name; + + private String author; + + // Mandatory for JPA entities + protected Book() { + } + + public Book(String name, String author) { + this.name = name; + this.author = author; + } + + // Mandatory for data objects + public Book(JsonObject jsonObject) { + BookConverter.fromJson(jsonObject, this); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public JsonObject toJson() { + JsonObject json = new JsonObject(); + BookConverter.toJson(this, json); + return json; + } + + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", name='" + name + '\'' + + ", author='" + author + '\'' + + '}'; + } +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncService.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncService.java new file mode 100644 index 000000000..e81c84a90 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncService.java @@ -0,0 +1,41 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.codegen.annotations.ProxyGen; +import io.vertx.core.AsyncResult; +import io.vertx.core.Handler; + +import java.util.List; + +/** + * Describes a service exposed on the event bus with Vert.x Service Proxies. + * + * @author Thomas Segismont + */ +@ProxyGen +public interface BookAsyncService { + + /** + * The service address on the Vert.x event bus. + */ + String ADDRESS = BookAsyncService.class.getName(); + + void add(Book book, Handler> resultHandler); + + void getAll(Handler>> resultHandler); +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncServiceImpl.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncServiceImpl.java new file mode 100644 index 000000000..da408603f --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookAsyncServiceImpl.java @@ -0,0 +1,49 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Implements the {@link BookAsyncService}, delegating calls to the transactional {@link BookService}. + * + * @author Thomas Segismont + */ +@Component +public class BookAsyncServiceImpl implements BookAsyncService { + + @Autowired + BookService bookService; + + @Override + public void add(Book book, Handler> resultHandler) { + Book saved = bookService.save(book); + Future.succeededFuture(saved).setHandler(resultHandler); + } + + @Override + public void getAll(Handler>> resultHandler) { + List all = bookService.getAll(); + Future.succeededFuture(all).setHandler(resultHandler); + } +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRepository.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRepository.java new file mode 100644 index 000000000..5c6bfc553 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRepository.java @@ -0,0 +1,27 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import org.springframework.data.repository.CrudRepository; + +/** + * A {@link CrudRepository} for our {@link Book} entity. + * + * @author Thomas Segismont + */ +public interface BookRepository extends CrudRepository { +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRestApi.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRestApi.java new file mode 100644 index 000000000..7b75e6ed9 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookRestApi.java @@ -0,0 +1,92 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Future; +import io.vertx.core.json.JsonArray; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.RoutingContext; +import io.vertx.ext.web.handler.BodyHandler; +import io.vertx.ext.web.handler.StaticHandler; +import io.vertx.serviceproxy.ProxyHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static java.net.HttpURLConnection.*; + +/** + * A standard verticle, consuming the {@link BookAsyncService} over the event bus to expose a REST API. + * + * @author Thomas Segismont + */ +@Component +public class BookRestApi extends AbstractVerticle { + private static final Logger LOG = LoggerFactory.getLogger(BookRestApi.class); + + private BookAsyncService bookAsyncService; + + @Override + public void start(Future startFuture) throws Exception { + bookAsyncService = ProxyHelper.createProxy(BookAsyncService.class, vertx, BookAsyncService.ADDRESS); + + Router router = Router.router(vertx); + + router.route().handler(BodyHandler.create()); + + router.post("/book").handler(this::addBook); + router.get("/books").handler(this::getAllBooks); + + StaticHandler staticHandler = StaticHandler.create(); + router.route().handler(staticHandler); + + vertx.createHttpServer().requestHandler(router::accept).listen(8080, listen -> { + if (listen.succeeded()) { + LOG.info("BookRestApi started"); + startFuture.complete(); + } else { + startFuture.fail(listen.cause()); + } + }); + } + + private void addBook(RoutingContext routingContext) { + Book book = new Book(routingContext.getBodyAsJson()); + bookAsyncService.add(book, ar -> { + if (ar.succeeded()) { + routingContext.response().setStatusCode(HTTP_CREATED).end(); + } else { + routingContext.fail(ar.cause()); + } + }); + } + + private void getAllBooks(RoutingContext routingContext) { + bookAsyncService.getAll(ar -> { + if (ar.succeeded()) { + List result = ar.result(); + JsonArray jsonArray = new JsonArray(result); + routingContext.response().end(jsonArray.encodePrettily()); + } else { + routingContext.fail(ar.cause()); + } + }); + } +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookService.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookService.java new file mode 100644 index 000000000..4abbd7f80 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/BookService.java @@ -0,0 +1,49 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.StreamSupport; + +import static java.util.stream.Collectors.*; + +/** + * A classical transactional service facade. + * + * @author Thomas Segismont + */ +@Service +@Transactional +public class BookService { + + @Autowired + BookRepository bookRepository; + + public Book save(Book book) { + return bookRepository.save(book); + } + + public List getAll() { + Iterable all = bookRepository.findAll(); + return StreamSupport.stream(all.spliterator(), false).collect(toList()); + } + +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringVerticleFactory.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringVerticleFactory.java new file mode 100644 index 000000000..c61532a76 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringVerticleFactory.java @@ -0,0 +1,61 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.core.Verticle; +import io.vertx.core.spi.VerticleFactory; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * A {@link VerticleFactory} backed by Spring's {@link ApplicationContext}. It allows to implement verticles as Spring + * beans and thus benefit from dependency injection, ...etc. + * + * @author Thomas Segismont + */ +@Component +public class SpringVerticleFactory implements VerticleFactory, ApplicationContextAware { + + private ApplicationContext applicationContext; + + @Override + public boolean blockingCreate() { + // Usually verticle instantiation is fast but since our verticles are Spring Beans, + // they might depend on other beans/resources which are slow to build/lookup. + return true; + } + + @Override + public String prefix() { + // Just an arbitrary string which must uniquely identify the verticle factory + return "myapp"; + } + + @Override + public Verticle createVerticle(String verticleName, ClassLoader classLoader) throws Exception { + // Our convention in this example is to give the class name as verticle name + String clazz = VerticleFactory.removePrefix(verticleName); + return (Verticle) applicationContext.getBean(Class.forName(clazz)); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringWorker.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringWorker.java new file mode 100644 index 000000000..d9e2ea96e --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/SpringWorker.java @@ -0,0 +1,58 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.vertx.example.spring.worker; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Future; +import io.vertx.serviceproxy.ProxyHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import static org.springframework.beans.factory.config.ConfigurableBeanFactory.*; + +/** + * A worker verticle, exposing the {@link BookAsyncService} over the event bus. + * + * Since it is a worker verticle, it is perfectly fine for the registered service to delegate calls to backend Spring beans. + * + * @author Thomas Segismont + */ +@Component +// Prototype scope is needed as multiple instances of this verticle will be deployed +@Scope(SCOPE_PROTOTYPE) +public class SpringWorker extends AbstractVerticle { + private static final Logger LOG = LoggerFactory.getLogger(SpringWorker.class); + + @Autowired + BookAsyncService bookAsyncService; + + @Override + public void start(Future startFuture) throws Exception { + ProxyHelper.registerService(BookAsyncService.class, vertx, bookAsyncService, BookAsyncService.ADDRESS).completionHandler(ar -> { + if (ar.succeeded()) { + LOG.info("SpringWorker started"); + startFuture.complete(); + } else { + startFuture.fail(ar.cause()); + } + }); + } + +} diff --git a/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/package-info.java b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/package-info.java new file mode 100644 index 000000000..7a0d2ba2b --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/java/io/vertx/example/spring/worker/package-info.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +/** + * Vert.x codegen requires a {@code package-info.java} file annotated with {@link ModuleGen}. + * + * @author Thomas Segismont + */ +@ModuleGen(name = "example", groupPackage = "io.vertx.example.spring.worker") +package io.vertx.example.spring.worker; + +import io.vertx.codegen.annotations.ModuleGen; diff --git a/spring-examples/spring-worker-example/src/main/resources/application.properties b/spring-examples/spring-worker-example/src/main/resources/application.properties new file mode 100644 index 000000000..b18659b95 --- /dev/null +++ b/spring-examples/spring-worker-example/src/main/resources/application.properties @@ -0,0 +1,12 @@ +################### DataSource Configuration ########################## +jdbc.driverClassName=org.h2.Driver +jdbc.url=jdbc:h2:~/test +jdbc.username=sa +jdbc.password= +################### Hibernate Configuration ########################## +hibernate.dialect=org.hibernate.dialect.H2Dialect +hibernate.show_sql=true +hibernate.hbm2ddl.auto=validate +################### Vert.x Configuration ########################## +vertx.worker.pool.size=40 +vertx.springWorker.instances=20 From 62380c6068c9f3bc1572c2f6e9df350b768f5a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Galder=20Zamarren=CC=83o?= Date: Tue, 9 May 2017 10:23:43 +0200 Subject: [PATCH 02/11] Add Java Vert.x event bus SockJS bridge example * Add Vert.x event bus SockJS bridge example where the client is a Java client using Vert.x HTTP client API to receive events over websockets. --- .../example/web/vertxbus/java/Client.java | 39 +++++++++++++ .../example/web/vertxbus/java/Server.java | 58 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java create mode 100644 web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java diff --git a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java new file mode 100644 index 000000000..b0cef5c21 --- /dev/null +++ b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java @@ -0,0 +1,39 @@ +package io.vertx.example.web.vertxbus.java; + +import io.vertx.core.Vertx; +import io.vertx.core.http.HttpClient; +import io.vertx.core.http.WebSocket; +import io.vertx.core.json.JsonObject; + +public class Client { + + public static void main(String[] args) { + Vertx vertx = Vertx.vertx(); + HttpClient client = vertx.createHttpClient(); + + client.websocket(8080, "localhost", "/eventbus/websocket", ws -> { + System.out.println("Connected"); + sendPing(ws); + + vertx.setPeriodic(5000, id -> { + sendPing(ws); + }); + + // Register + JsonObject msg = new JsonObject().put("type", "register").put("address", "feed"); + ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); + + ws.handler(buff -> { + System.out.println(buff); + }); + }, fail -> { + System.out.println("Failed: " + fail); + }); + } + + static void sendPing(WebSocket ws) { + JsonObject msg = new JsonObject().put("type", "ping"); + ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); + } + +} diff --git a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java new file mode 100644 index 000000000..82edfc851 --- /dev/null +++ b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java @@ -0,0 +1,58 @@ +package io.vertx.example.web.vertxbus.java; + +import java.text.DateFormat; +import java.time.Instant; +import java.util.Date; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.eventbus.EventBus; +import io.vertx.core.json.JsonObject; +import io.vertx.example.util.Runner; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.handler.sockjs.BridgeOptions; +import io.vertx.ext.web.handler.sockjs.PermittedOptions; +import io.vertx.ext.web.handler.sockjs.SockJSHandler; + +/** + * A {@link io.vertx.core.Verticle} which bridges Java to the @{link EventBus}. + */ +public class Server extends AbstractVerticle { + + // Convenience method so you can run it in your IDE + public static void main(String[] args) { + Runner.runExample(Server.class); + } + + @Override + public void start() throws Exception { + + Router router = Router.router(vertx); + + // Allow events for the designated addresses in/out of the event bus bridge + BridgeOptions opts = new BridgeOptions() + .addOutboundPermitted(new PermittedOptions().setAddress("feed")); + + // Create the event bus bridge and add it to the router. + SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts); + router.route("/eventbus/*").handler(ebHandler); + + // Start the web server and tell it to use the router to handle requests. + vertx.createHttpServer().requestHandler(router::accept) + .listen(8080, "localhost", ar -> { + if (ar.succeeded()) { + System.out.printf("Server started on localhost:%s", ar.result().actualPort()); + } else if (ar.failed()) { + System.out.printf("Failed: %s", ar.cause()); + } + }); + + EventBus eb = vertx.eventBus(); + + vertx.setPeriodic(1000l, t -> { + // Create a timestamp string + String timestamp = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(Date.from(Instant.now())); + + eb.send("feed", new JsonObject().put("now", timestamp)); + }); + } +} From 9c9fdfc7ceeb06f58964d06d14231034948b59ce Mon Sep 17 00:00:00 2001 From: Arnaud ESTEVE Date: Tue, 9 May 2017 18:30:02 +0200 Subject: [PATCH 03/11] add http2 example --- http2-showcase/README.md | 26 +++ http2-showcase/build.gradle | 28 +++ http2-showcase/gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54783 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + http2-showcase/gradlew | 172 ++++++++++++++++++ http2-showcase/gradlew.bat | 84 +++++++++ .../examples/http2/DisplayedLatency.java | 21 +++ .../examples/http2/Http2ServerVerticle.java | 136 ++++++++++++++ .../src/main/resources/tls/server-cert.pem | 22 +++ .../src/main/resources/tls/server-key.pem | 28 +++ .../main/resources/tls/server-keystore.jks | Bin 0 -> 2071 bytes http2-showcase/templates/image.hbs | 81 +++++++++ .../webroot/img/stairway_to_heaven-0-0.jpeg | Bin 0 -> 1023 bytes .../webroot/img/stairway_to_heaven-0-1.jpeg | Bin 0 -> 1033 bytes .../webroot/img/stairway_to_heaven-0-10.jpeg | Bin 0 -> 930 bytes .../webroot/img/stairway_to_heaven-0-11.jpeg | Bin 0 -> 1120 bytes .../webroot/img/stairway_to_heaven-0-12.jpeg | Bin 0 -> 1074 bytes .../webroot/img/stairway_to_heaven-0-13.jpeg | Bin 0 -> 981 bytes .../webroot/img/stairway_to_heaven-0-14.jpeg | Bin 0 -> 991 bytes .../webroot/img/stairway_to_heaven-0-2.jpeg | Bin 0 -> 977 bytes .../webroot/img/stairway_to_heaven-0-3.jpeg | Bin 0 -> 1240 bytes .../webroot/img/stairway_to_heaven-0-4.jpeg | Bin 0 -> 1037 bytes .../webroot/img/stairway_to_heaven-0-5.jpeg | Bin 0 -> 975 bytes .../webroot/img/stairway_to_heaven-0-6.jpeg | Bin 0 -> 1006 bytes .../webroot/img/stairway_to_heaven-0-7.jpeg | Bin 0 -> 983 bytes .../webroot/img/stairway_to_heaven-0-8.jpeg | Bin 0 -> 963 bytes .../webroot/img/stairway_to_heaven-0-9.jpeg | Bin 0 -> 952 bytes .../webroot/img/stairway_to_heaven-1-0.jpeg | Bin 0 -> 1175 bytes .../webroot/img/stairway_to_heaven-1-1.jpeg | Bin 0 -> 1052 bytes .../webroot/img/stairway_to_heaven-1-10.jpeg | Bin 0 -> 1029 bytes .../webroot/img/stairway_to_heaven-1-11.jpeg | Bin 0 -> 1148 bytes .../webroot/img/stairway_to_heaven-1-12.jpeg | Bin 0 -> 1163 bytes .../webroot/img/stairway_to_heaven-1-13.jpeg | Bin 0 -> 1020 bytes .../webroot/img/stairway_to_heaven-1-14.jpeg | Bin 0 -> 1123 bytes .../webroot/img/stairway_to_heaven-1-2.jpeg | Bin 0 -> 1101 bytes .../webroot/img/stairway_to_heaven-1-3.jpeg | Bin 0 -> 1152 bytes .../webroot/img/stairway_to_heaven-1-4.jpeg | Bin 0 -> 1249 bytes .../webroot/img/stairway_to_heaven-1-5.jpeg | Bin 0 -> 1025 bytes .../webroot/img/stairway_to_heaven-1-6.jpeg | Bin 0 -> 1023 bytes .../webroot/img/stairway_to_heaven-1-7.jpeg | Bin 0 -> 1020 bytes .../webroot/img/stairway_to_heaven-1-8.jpeg | Bin 0 -> 1048 bytes .../webroot/img/stairway_to_heaven-1-9.jpeg | Bin 0 -> 967 bytes .../webroot/img/stairway_to_heaven-10-0.jpeg | Bin 0 -> 1287 bytes .../webroot/img/stairway_to_heaven-10-1.jpeg | Bin 0 -> 1351 bytes .../webroot/img/stairway_to_heaven-10-10.jpeg | Bin 0 -> 1313 bytes .../webroot/img/stairway_to_heaven-10-11.jpeg | Bin 0 -> 1332 bytes .../webroot/img/stairway_to_heaven-10-12.jpeg | Bin 0 -> 1335 bytes .../webroot/img/stairway_to_heaven-10-13.jpeg | Bin 0 -> 1336 bytes .../webroot/img/stairway_to_heaven-10-14.jpeg | Bin 0 -> 1200 bytes .../webroot/img/stairway_to_heaven-10-2.jpeg | Bin 0 -> 1350 bytes .../webroot/img/stairway_to_heaven-10-3.jpeg | Bin 0 -> 1479 bytes .../webroot/img/stairway_to_heaven-10-4.jpeg | Bin 0 -> 1633 bytes .../webroot/img/stairway_to_heaven-10-5.jpeg | Bin 0 -> 1505 bytes .../webroot/img/stairway_to_heaven-10-6.jpeg | Bin 0 -> 1138 bytes .../webroot/img/stairway_to_heaven-10-7.jpeg | Bin 0 -> 1127 bytes .../webroot/img/stairway_to_heaven-10-8.jpeg | Bin 0 -> 1094 bytes .../webroot/img/stairway_to_heaven-10-9.jpeg | Bin 0 -> 1287 bytes .../webroot/img/stairway_to_heaven-11-0.jpeg | Bin 0 -> 1265 bytes .../webroot/img/stairway_to_heaven-11-1.jpeg | Bin 0 -> 1309 bytes .../webroot/img/stairway_to_heaven-11-10.jpeg | Bin 0 -> 1258 bytes .../webroot/img/stairway_to_heaven-11-11.jpeg | Bin 0 -> 1390 bytes .../webroot/img/stairway_to_heaven-11-12.jpeg | Bin 0 -> 1339 bytes .../webroot/img/stairway_to_heaven-11-13.jpeg | Bin 0 -> 1354 bytes .../webroot/img/stairway_to_heaven-11-14.jpeg | Bin 0 -> 1129 bytes .../webroot/img/stairway_to_heaven-11-2.jpeg | Bin 0 -> 1521 bytes .../webroot/img/stairway_to_heaven-11-3.jpeg | Bin 0 -> 1555 bytes .../webroot/img/stairway_to_heaven-11-4.jpeg | Bin 0 -> 1340 bytes .../webroot/img/stairway_to_heaven-11-5.jpeg | Bin 0 -> 1020 bytes .../webroot/img/stairway_to_heaven-11-6.jpeg | Bin 0 -> 1062 bytes .../webroot/img/stairway_to_heaven-11-7.jpeg | Bin 0 -> 1033 bytes .../webroot/img/stairway_to_heaven-11-8.jpeg | Bin 0 -> 1013 bytes .../webroot/img/stairway_to_heaven-11-9.jpeg | Bin 0 -> 1050 bytes .../webroot/img/stairway_to_heaven-12-0.jpeg | Bin 0 -> 1327 bytes .../webroot/img/stairway_to_heaven-12-1.jpeg | Bin 0 -> 1371 bytes .../webroot/img/stairway_to_heaven-12-10.jpeg | Bin 0 -> 1059 bytes .../webroot/img/stairway_to_heaven-12-11.jpeg | Bin 0 -> 1283 bytes .../webroot/img/stairway_to_heaven-12-12.jpeg | Bin 0 -> 1271 bytes .../webroot/img/stairway_to_heaven-12-13.jpeg | Bin 0 -> 1411 bytes .../webroot/img/stairway_to_heaven-12-14.jpeg | Bin 0 -> 1301 bytes .../webroot/img/stairway_to_heaven-12-2.jpeg | Bin 0 -> 1427 bytes .../webroot/img/stairway_to_heaven-12-3.jpeg | Bin 0 -> 1260 bytes .../webroot/img/stairway_to_heaven-12-4.jpeg | Bin 0 -> 1117 bytes .../webroot/img/stairway_to_heaven-12-5.jpeg | Bin 0 -> 945 bytes .../webroot/img/stairway_to_heaven-12-6.jpeg | Bin 0 -> 986 bytes .../webroot/img/stairway_to_heaven-12-7.jpeg | Bin 0 -> 972 bytes .../webroot/img/stairway_to_heaven-12-8.jpeg | Bin 0 -> 998 bytes .../webroot/img/stairway_to_heaven-12-9.jpeg | Bin 0 -> 964 bytes .../webroot/img/stairway_to_heaven-13-0.jpeg | Bin 0 -> 1396 bytes .../webroot/img/stairway_to_heaven-13-1.jpeg | Bin 0 -> 1289 bytes .../webroot/img/stairway_to_heaven-13-10.jpeg | Bin 0 -> 1069 bytes .../webroot/img/stairway_to_heaven-13-11.jpeg | Bin 0 -> 1073 bytes .../webroot/img/stairway_to_heaven-13-12.jpeg | Bin 0 -> 1195 bytes .../webroot/img/stairway_to_heaven-13-13.jpeg | Bin 0 -> 1297 bytes .../webroot/img/stairway_to_heaven-13-14.jpeg | Bin 0 -> 1351 bytes .../webroot/img/stairway_to_heaven-13-2.jpeg | Bin 0 -> 1208 bytes .../webroot/img/stairway_to_heaven-13-3.jpeg | Bin 0 -> 1140 bytes .../webroot/img/stairway_to_heaven-13-4.jpeg | Bin 0 -> 994 bytes .../webroot/img/stairway_to_heaven-13-5.jpeg | Bin 0 -> 943 bytes .../webroot/img/stairway_to_heaven-13-6.jpeg | Bin 0 -> 1042 bytes .../webroot/img/stairway_to_heaven-13-7.jpeg | Bin 0 -> 983 bytes .../webroot/img/stairway_to_heaven-13-8.jpeg | Bin 0 -> 979 bytes .../webroot/img/stairway_to_heaven-13-9.jpeg | Bin 0 -> 1051 bytes .../webroot/img/stairway_to_heaven-14-0.jpeg | Bin 0 -> 1317 bytes .../webroot/img/stairway_to_heaven-14-1.jpeg | Bin 0 -> 1122 bytes .../webroot/img/stairway_to_heaven-14-10.jpeg | Bin 0 -> 966 bytes .../webroot/img/stairway_to_heaven-14-11.jpeg | Bin 0 -> 939 bytes .../webroot/img/stairway_to_heaven-14-12.jpeg | Bin 0 -> 1050 bytes .../webroot/img/stairway_to_heaven-14-13.jpeg | Bin 0 -> 1110 bytes .../webroot/img/stairway_to_heaven-14-14.jpeg | Bin 0 -> 1131 bytes .../webroot/img/stairway_to_heaven-14-2.jpeg | Bin 0 -> 1051 bytes .../webroot/img/stairway_to_heaven-14-3.jpeg | Bin 0 -> 1079 bytes .../webroot/img/stairway_to_heaven-14-4.jpeg | Bin 0 -> 1046 bytes .../webroot/img/stairway_to_heaven-14-5.jpeg | Bin 0 -> 1069 bytes .../webroot/img/stairway_to_heaven-14-6.jpeg | Bin 0 -> 1077 bytes .../webroot/img/stairway_to_heaven-14-7.jpeg | Bin 0 -> 1039 bytes .../webroot/img/stairway_to_heaven-14-8.jpeg | Bin 0 -> 1044 bytes .../webroot/img/stairway_to_heaven-14-9.jpeg | Bin 0 -> 1055 bytes .../webroot/img/stairway_to_heaven-2-0.jpeg | Bin 0 -> 1137 bytes .../webroot/img/stairway_to_heaven-2-1.jpeg | Bin 0 -> 1079 bytes .../webroot/img/stairway_to_heaven-2-10.jpeg | Bin 0 -> 1095 bytes .../webroot/img/stairway_to_heaven-2-11.jpeg | Bin 0 -> 1160 bytes .../webroot/img/stairway_to_heaven-2-12.jpeg | Bin 0 -> 1199 bytes .../webroot/img/stairway_to_heaven-2-13.jpeg | Bin 0 -> 956 bytes .../webroot/img/stairway_to_heaven-2-14.jpeg | Bin 0 -> 1169 bytes .../webroot/img/stairway_to_heaven-2-2.jpeg | Bin 0 -> 1114 bytes .../webroot/img/stairway_to_heaven-2-3.jpeg | Bin 0 -> 1142 bytes .../webroot/img/stairway_to_heaven-2-4.jpeg | Bin 0 -> 1176 bytes .../webroot/img/stairway_to_heaven-2-5.jpeg | Bin 0 -> 1082 bytes .../webroot/img/stairway_to_heaven-2-6.jpeg | Bin 0 -> 1100 bytes .../webroot/img/stairway_to_heaven-2-7.jpeg | Bin 0 -> 1049 bytes .../webroot/img/stairway_to_heaven-2-8.jpeg | Bin 0 -> 1091 bytes .../webroot/img/stairway_to_heaven-2-9.jpeg | Bin 0 -> 1035 bytes .../webroot/img/stairway_to_heaven-3-0.jpeg | Bin 0 -> 1094 bytes .../webroot/img/stairway_to_heaven-3-1.jpeg | Bin 0 -> 1136 bytes .../webroot/img/stairway_to_heaven-3-10.jpeg | Bin 0 -> 1219 bytes .../webroot/img/stairway_to_heaven-3-11.jpeg | Bin 0 -> 1213 bytes .../webroot/img/stairway_to_heaven-3-12.jpeg | Bin 0 -> 1190 bytes .../webroot/img/stairway_to_heaven-3-13.jpeg | Bin 0 -> 1036 bytes .../webroot/img/stairway_to_heaven-3-14.jpeg | Bin 0 -> 1144 bytes .../webroot/img/stairway_to_heaven-3-2.jpeg | Bin 0 -> 1080 bytes .../webroot/img/stairway_to_heaven-3-3.jpeg | Bin 0 -> 1144 bytes .../webroot/img/stairway_to_heaven-3-4.jpeg | Bin 0 -> 1158 bytes .../webroot/img/stairway_to_heaven-3-5.jpeg | Bin 0 -> 1150 bytes .../webroot/img/stairway_to_heaven-3-6.jpeg | Bin 0 -> 1075 bytes .../webroot/img/stairway_to_heaven-3-7.jpeg | Bin 0 -> 1069 bytes .../webroot/img/stairway_to_heaven-3-8.jpeg | Bin 0 -> 1068 bytes .../webroot/img/stairway_to_heaven-3-9.jpeg | Bin 0 -> 1044 bytes .../webroot/img/stairway_to_heaven-4-0.jpeg | Bin 0 -> 1082 bytes .../webroot/img/stairway_to_heaven-4-1.jpeg | Bin 0 -> 1203 bytes .../webroot/img/stairway_to_heaven-4-10.jpeg | Bin 0 -> 1189 bytes .../webroot/img/stairway_to_heaven-4-11.jpeg | Bin 0 -> 1147 bytes .../webroot/img/stairway_to_heaven-4-12.jpeg | Bin 0 -> 1170 bytes .../webroot/img/stairway_to_heaven-4-13.jpeg | Bin 0 -> 1275 bytes .../webroot/img/stairway_to_heaven-4-14.jpeg | Bin 0 -> 1026 bytes .../webroot/img/stairway_to_heaven-4-2.jpeg | Bin 0 -> 1145 bytes .../webroot/img/stairway_to_heaven-4-3.jpeg | Bin 0 -> 1122 bytes .../webroot/img/stairway_to_heaven-4-4.jpeg | Bin 0 -> 1178 bytes .../webroot/img/stairway_to_heaven-4-5.jpeg | Bin 0 -> 1160 bytes .../webroot/img/stairway_to_heaven-4-6.jpeg | Bin 0 -> 1031 bytes .../webroot/img/stairway_to_heaven-4-7.jpeg | Bin 0 -> 1088 bytes .../webroot/img/stairway_to_heaven-4-8.jpeg | Bin 0 -> 1059 bytes .../webroot/img/stairway_to_heaven-4-9.jpeg | Bin 0 -> 1060 bytes .../webroot/img/stairway_to_heaven-5-0.jpeg | Bin 0 -> 910 bytes .../webroot/img/stairway_to_heaven-5-1.jpeg | Bin 0 -> 1099 bytes .../webroot/img/stairway_to_heaven-5-10.jpeg | Bin 0 -> 1219 bytes .../webroot/img/stairway_to_heaven-5-11.jpeg | Bin 0 -> 1110 bytes .../webroot/img/stairway_to_heaven-5-12.jpeg | Bin 0 -> 1268 bytes .../webroot/img/stairway_to_heaven-5-13.jpeg | Bin 0 -> 1151 bytes .../webroot/img/stairway_to_heaven-5-14.jpeg | Bin 0 -> 867 bytes .../webroot/img/stairway_to_heaven-5-2.jpeg | Bin 0 -> 1154 bytes .../webroot/img/stairway_to_heaven-5-3.jpeg | Bin 0 -> 1105 bytes .../webroot/img/stairway_to_heaven-5-4.jpeg | Bin 0 -> 1146 bytes .../webroot/img/stairway_to_heaven-5-5.jpeg | Bin 0 -> 1203 bytes .../webroot/img/stairway_to_heaven-5-6.jpeg | Bin 0 -> 1071 bytes .../webroot/img/stairway_to_heaven-5-7.jpeg | Bin 0 -> 1122 bytes .../webroot/img/stairway_to_heaven-5-8.jpeg | Bin 0 -> 1066 bytes .../webroot/img/stairway_to_heaven-5-9.jpeg | Bin 0 -> 1166 bytes .../webroot/img/stairway_to_heaven-6-0.jpeg | Bin 0 -> 962 bytes .../webroot/img/stairway_to_heaven-6-1.jpeg | Bin 0 -> 742 bytes .../webroot/img/stairway_to_heaven-6-10.jpeg | Bin 0 -> 1163 bytes .../webroot/img/stairway_to_heaven-6-11.jpeg | Bin 0 -> 1138 bytes .../webroot/img/stairway_to_heaven-6-12.jpeg | Bin 0 -> 1289 bytes .../webroot/img/stairway_to_heaven-6-13.jpeg | Bin 0 -> 749 bytes .../webroot/img/stairway_to_heaven-6-14.jpeg | Bin 0 -> 905 bytes .../webroot/img/stairway_to_heaven-6-2.jpeg | Bin 0 -> 1254 bytes .../webroot/img/stairway_to_heaven-6-3.jpeg | Bin 0 -> 1173 bytes .../webroot/img/stairway_to_heaven-6-4.jpeg | Bin 0 -> 1109 bytes .../webroot/img/stairway_to_heaven-6-5.jpeg | Bin 0 -> 1274 bytes .../webroot/img/stairway_to_heaven-6-6.jpeg | Bin 0 -> 1172 bytes .../webroot/img/stairway_to_heaven-6-7.jpeg | Bin 0 -> 1079 bytes .../webroot/img/stairway_to_heaven-6-8.jpeg | Bin 0 -> 1148 bytes .../webroot/img/stairway_to_heaven-6-9.jpeg | Bin 0 -> 1196 bytes .../webroot/img/stairway_to_heaven-7-0.jpeg | Bin 0 -> 1041 bytes .../webroot/img/stairway_to_heaven-7-1.jpeg | Bin 0 -> 826 bytes .../webroot/img/stairway_to_heaven-7-10.jpeg | Bin 0 -> 1129 bytes .../webroot/img/stairway_to_heaven-7-11.jpeg | Bin 0 -> 1379 bytes .../webroot/img/stairway_to_heaven-7-12.jpeg | Bin 0 -> 1081 bytes .../webroot/img/stairway_to_heaven-7-13.jpeg | Bin 0 -> 832 bytes .../webroot/img/stairway_to_heaven-7-14.jpeg | Bin 0 -> 941 bytes .../webroot/img/stairway_to_heaven-7-2.jpeg | Bin 0 -> 1122 bytes .../webroot/img/stairway_to_heaven-7-3.jpeg | Bin 0 -> 1354 bytes .../webroot/img/stairway_to_heaven-7-4.jpeg | Bin 0 -> 1149 bytes .../webroot/img/stairway_to_heaven-7-5.jpeg | Bin 0 -> 1274 bytes .../webroot/img/stairway_to_heaven-7-6.jpeg | Bin 0 -> 1310 bytes .../webroot/img/stairway_to_heaven-7-7.jpeg | Bin 0 -> 687 bytes .../webroot/img/stairway_to_heaven-7-8.jpeg | Bin 0 -> 1178 bytes .../webroot/img/stairway_to_heaven-7-9.jpeg | Bin 0 -> 1152 bytes .../webroot/img/stairway_to_heaven-8-0.jpeg | Bin 0 -> 950 bytes .../webroot/img/stairway_to_heaven-8-1.jpeg | Bin 0 -> 936 bytes .../webroot/img/stairway_to_heaven-8-10.jpeg | Bin 0 -> 1357 bytes .../webroot/img/stairway_to_heaven-8-11.jpeg | Bin 0 -> 1109 bytes .../webroot/img/stairway_to_heaven-8-12.jpeg | Bin 0 -> 963 bytes .../webroot/img/stairway_to_heaven-8-13.jpeg | Bin 0 -> 894 bytes .../webroot/img/stairway_to_heaven-8-14.jpeg | Bin 0 -> 926 bytes .../webroot/img/stairway_to_heaven-8-2.jpeg | Bin 0 -> 934 bytes .../webroot/img/stairway_to_heaven-8-3.jpeg | Bin 0 -> 1186 bytes .../webroot/img/stairway_to_heaven-8-4.jpeg | Bin 0 -> 1461 bytes .../webroot/img/stairway_to_heaven-8-5.jpeg | Bin 0 -> 1241 bytes .../webroot/img/stairway_to_heaven-8-6.jpeg | Bin 0 -> 1434 bytes .../webroot/img/stairway_to_heaven-8-7.jpeg | Bin 0 -> 687 bytes .../webroot/img/stairway_to_heaven-8-8.jpeg | Bin 0 -> 1317 bytes .../webroot/img/stairway_to_heaven-8-9.jpeg | Bin 0 -> 1266 bytes .../webroot/img/stairway_to_heaven-9-0.jpeg | Bin 0 -> 1019 bytes .../webroot/img/stairway_to_heaven-9-1.jpeg | Bin 0 -> 1001 bytes .../webroot/img/stairway_to_heaven-9-10.jpeg | Bin 0 -> 1517 bytes .../webroot/img/stairway_to_heaven-9-11.jpeg | Bin 0 -> 1291 bytes .../webroot/img/stairway_to_heaven-9-12.jpeg | Bin 0 -> 1154 bytes .../webroot/img/stairway_to_heaven-9-13.jpeg | Bin 0 -> 977 bytes .../webroot/img/stairway_to_heaven-9-14.jpeg | Bin 0 -> 905 bytes .../webroot/img/stairway_to_heaven-9-2.jpeg | Bin 0 -> 1169 bytes .../webroot/img/stairway_to_heaven-9-3.jpeg | Bin 0 -> 1338 bytes .../webroot/img/stairway_to_heaven-9-4.jpeg | Bin 0 -> 1551 bytes .../webroot/img/stairway_to_heaven-9-5.jpeg | Bin 0 -> 1756 bytes .../webroot/img/stairway_to_heaven-9-6.jpeg | Bin 0 -> 1732 bytes .../webroot/img/stairway_to_heaven-9-7.jpeg | Bin 0 -> 818 bytes .../webroot/img/stairway_to_heaven-9-8.jpeg | Bin 0 -> 1618 bytes .../webroot/img/stairway_to_heaven-9-9.jpeg | Bin 0 -> 1514 bytes 238 files changed, 605 insertions(+) create mode 100644 http2-showcase/README.md create mode 100644 http2-showcase/build.gradle create mode 100644 http2-showcase/gradle.properties create mode 100644 http2-showcase/gradle/wrapper/gradle-wrapper.jar create mode 100644 http2-showcase/gradle/wrapper/gradle-wrapper.properties create mode 100755 http2-showcase/gradlew create mode 100644 http2-showcase/gradlew.bat create mode 100644 http2-showcase/src/main/java/io/vertx/examples/http2/DisplayedLatency.java create mode 100644 http2-showcase/src/main/java/io/vertx/examples/http2/Http2ServerVerticle.java create mode 100644 http2-showcase/src/main/resources/tls/server-cert.pem create mode 100644 http2-showcase/src/main/resources/tls/server-key.pem create mode 100644 http2-showcase/src/main/resources/tls/server-keystore.jks create mode 100644 http2-showcase/templates/image.hbs create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-0-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-1-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-10-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-11-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-12-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-13-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-14-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-2-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-3-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-4-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-5-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-6-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-7-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-8-9.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-0.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-1.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-10.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-11.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-12.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-13.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-14.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-2.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-3.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-4.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-5.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-6.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-7.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-8.jpeg create mode 100755 http2-showcase/webroot/img/stairway_to_heaven-9-9.jpeg diff --git a/http2-showcase/README.md b/http2-showcase/README.md new file mode 100644 index 000000000..6708ca48c --- /dev/null +++ b/http2-showcase/README.md @@ -0,0 +1,26 @@ +### Vert.x HTTP/2 showcase + +This projects aims at showing [Vert.x](http://vertx.io) [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2) capabilities. + +To run the project, simply run `./gradlew run` from the project's root directory, then point your browser at [http://localhost:8080](http://localhost:8080) to get started. + +Two HTTP servers are running: + +* An HTTP/1.1 server running on http://localhost:8080 +* An HTTP/2 server running on https://localhost:8443 + +They both are running the exact same code, the only difference is that the second one has been declared with a specific option : `setUseAlpn(true)`. + +By default, when running on your local machine, a latency of 100ms is arbitrarily simulated. So that you can figure out the difference it makes in a real-life environment. +You can change the latency by clicking on the links on the right of the image, or by adding a query parameter named `latency` to the page's URL. + +e.g. [http://localhost:8080/image.hbs?latency=999](http://localhost:8080/image.hbs?latency=999) + +The project uses : +* [Vert.x](http://vertx.io) +* [Vert.x web](http://vertx.io/docs/#web) +* [Handlebars](https://github.com/jknack/handlebars.java) as template engine + +Licensed under [Apache 2.0 license](http://www.apache.org/licenses/LICENSE-2.0) + +Any contribution is welcome. diff --git a/http2-showcase/build.gradle b/http2-showcase/build.gradle new file mode 100644 index 000000000..19fcbf0e6 --- /dev/null +++ b/http2-showcase/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'java' + id 'application' +// id 'com.github.johnrengelman.shadow' version '1.2.4' +} + +repositories { + mavenLocal() +} + +dependencies { + compile "io.vertx:vertx-core:$vertxVersion" + compile "io.vertx:vertx-web:$vertxVersion" + compile "io.vertx:vertx-web-templ-handlebars:$vertxVersion" + + runtime "io.netty:netty-tcnative-boringssl-static:1.1.33.Fork26" +} + +mainClassName = 'io.vertx.core.Launcher' +def mainVerticle = 'io.vertx.examples.http2.Http2ServerVerticle' + +run { + args = ['run', mainVerticle] +} + +task wrapper(type: Wrapper) { + gradleVersion = '3.5' +} diff --git a/http2-showcase/gradle.properties b/http2-showcase/gradle.properties new file mode 100644 index 000000000..5c0f4d4b7 --- /dev/null +++ b/http2-showcase/gradle.properties @@ -0,0 +1 @@ +vertxVersion=3.4.1 diff --git a/http2-showcase/gradle/wrapper/gradle-wrapper.jar b/http2-showcase/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..30f50c794c581b2615eb3981b9c4fea803523545 GIT binary patch literal 54783 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 C+xKSx literal 0 HcmV?d00001 diff --git a/http2-showcase/gradle/wrapper/gradle-wrapper.properties b/http2-showcase/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..dca0f0996 --- /dev/null +++ b/http2-showcase/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Apr 27 09:09:06 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip diff --git a/http2-showcase/gradlew b/http2-showcase/gradlew new file mode 100755 index 000000000..4453ccea3 --- /dev/null +++ b/http2-showcase/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/http2-showcase/gradlew.bat b/http2-showcase/gradlew.bat new file mode 100644 index 000000000..f9553162f --- /dev/null +++ b/http2-showcase/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/http2-showcase/src/main/java/io/vertx/examples/http2/DisplayedLatency.java b/http2-showcase/src/main/java/io/vertx/examples/http2/DisplayedLatency.java new file mode 100644 index 000000000..3d557e4d7 --- /dev/null +++ b/http2-showcase/src/main/java/io/vertx/examples/http2/DisplayedLatency.java @@ -0,0 +1,21 @@ +package io.vertx.examples.http2; + +class DisplayedLatency { + + private final boolean displayed; + private final Integer latency; + + DisplayedLatency(Integer latency, Integer queryLatency) { + this.latency = latency; + this.displayed = queryLatency.equals(latency); + } + + public boolean isDisplayed() { + return displayed; + } + + public Integer getLatency() { + return latency; + } + +} diff --git a/http2-showcase/src/main/java/io/vertx/examples/http2/Http2ServerVerticle.java b/http2-showcase/src/main/java/io/vertx/examples/http2/Http2ServerVerticle.java new file mode 100644 index 000000000..7e949ef66 --- /dev/null +++ b/http2-showcase/src/main/java/io/vertx/examples/http2/Http2ServerVerticle.java @@ -0,0 +1,136 @@ +package io.vertx.examples.http2; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Future; +import io.vertx.core.Vertx; +import io.vertx.core.http.*; +import io.vertx.core.net.KeyCertOptions; +import io.vertx.core.net.PemKeyCertOptions; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.handler.StaticHandler; +import io.vertx.ext.web.handler.TemplateHandler; +import io.vertx.ext.web.templ.HandlebarsTemplateEngine; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class Http2ServerVerticle extends AbstractVerticle { + + private static final int HTTP1_PORT = 8080; + private static final int HTTP2_PORT = 8443; + + private static final int COLS = 15; + private static final int ROWS = 15; + private static final int TILE_HEIGHT = 38; + private static final int TILE_WIDTH = 68; + private static final Random RANDOM = new Random(); + + private HttpServer http1; + private HttpServer http2; + private static final int DEFAULT_LATENCY = 70; + private String host = "localhost"; // TODO : check host if in the cloud + + @Override + public void start(Future future) { + http1 = vertx.createHttpServer(createOptions(false)); + http1.requestHandler(createRouter("http://localhost:8080/image.hbs")::accept); + http1.listen(res -> { + if (res.failed()) { + future.fail(res.cause()); + return; + } + http2 = vertx.createHttpServer(createOptions(true)); + http2.requestHandler(createRouter("https://localhost:8443/image.hbs")::accept); + http2.listen(res2 -> { + if (res2.failed()) { + future.fail(res.cause()); + } else { + future.complete(); + } + }); + }); + } + + @Override + public void stop(Future future) { + http1.close(res -> http2.close(future.completer())); + } + + + private HttpServerOptions createOptions(boolean http2) { + HttpServerOptions serverOptions = new HttpServerOptions() + .setPort(http2 ? HTTP2_PORT : HTTP1_PORT) + .setHost(host); + if (http2) { + serverOptions.setSsl(true) + .setKeyCertOptions(new PemKeyCertOptions().setCertPath("tls/server-cert.pem").setKeyPath("tls/server-key.pem")) + .setUseAlpn(true); + } + return serverOptions; + } + + private Router createRouter(String redirectURL) { + Router router = Router.router(vertx); + HandlebarsTemplateEngine engine = HandlebarsTemplateEngine.create(); + engine.setMaxCacheSize(0); + router.get("/*").handler(rc -> { + int queryLatency = DEFAULT_LATENCY; + try { + queryLatency = Integer.valueOf(rc.request().getParam("latency")); + } catch(NumberFormatException nfe) {} + rc.put("query-latency", queryLatency); + if (queryLatency == 0) { + rc.next(); + } else { + vertx.setTimer(queryLatency, id -> rc.next()); + } + }); + router.getWithRegex(".+\\.hbs").handler(ctx -> { + final Stream availableLatencies = Stream.of(0, 20, 40, 60, 80, 100); + Integer queryLatency = ctx.get("query-latency"); + ctx.put("imgs", createImages(queryLatency)); + ctx.put("tileHeight", TILE_HEIGHT); + ctx.put("tileWidth", TILE_WIDTH); + ctx.put("host", host); + ctx.put("http1Port", HTTP1_PORT); + ctx.put("http2Port", HTTP2_PORT); + Stream displayedLatencies = availableLatencies.map(latency -> new DisplayedLatency(latency, queryLatency)); + ctx.put("latencies", displayedLatencies.collect(Collectors.toList())); + ctx.next(); + }); + router.getWithRegex(".+\\.hbs").handler(TemplateHandler.create(engine)); + router.get("/assets/*").handler(StaticHandler.create()); + router.get("/").handler(ctx -> { + ctx.response(). + setStatusCode(302). + putHeader("Location", redirectURL). + end(); + }); + return router; + } + + private List> createImages(Integer latency) { + List> imgs = new ArrayList<>(COLS); + for (int i = 0; i < COLS; i++) { + List rowImgs = new ArrayList<>(ROWS); + for (int j = 0; j < ROWS; j++) { + rowImgs.add("/assets/img/stairway_to_heaven-" + i + "-" + j + ".jpeg?latency=" + latency + "&cachebuster=" + cacheBuster()); + } + imgs.add(rowImgs); + } + return imgs; + } + + private String cacheBuster() { + return Long.toString(new Date().getTime()) + RANDOM.nextLong(); + } + + public static void main(String... args) { + Vertx.vertx().deployVerticle(Http2ServerVerticle.class.getName()); + } + +} diff --git a/http2-showcase/src/main/resources/tls/server-cert.pem b/http2-showcase/src/main/resources/tls/server-cert.pem new file mode 100644 index 000000000..ed041435f --- /dev/null +++ b/http2-showcase/src/main/resources/tls/server-cert.pem @@ -0,0 +1,22 @@ +Bag Attributes + friendlyName: test-store + localKeyID: 54 69 6D 65 20 31 34 33 36 32 37 36 31 36 38 39 30 30 +subject=/CN=localhost +issuer=/CN=localhost +-----BEGIN CERTIFICATE----- +MIICxzCCAa+gAwIBAgIEFC3x5TANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwls +b2NhbGhvc3QwHhcNMTUwNzA3MTMzNTM4WhcNMTgwNzA2MTMzNTM4WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCa +xywB+KQ9+HJAOe2UdIro1y9Z+4VFl4N/8nhbvtsS/Xs2TJJ1H6EL6+x7ni4T14GU +CScKVEYIgwNiHVMpXhgxlYRHnxTxOlgQZCROwNVxMMEmLrxq4NWOwGbdQywJ7hgG +3ro26rM/QzRwLhRbCR+gsXdsUvcD/nrtlD24z/RfBwNoeTzY7s4pqBVqexHtTwps +brTiKtZg57kv0KIlGIoB2VOeEo+WBgzZ/6B/WPibnil8oEx2TcbJh4VvzqtNgG+y +AitYncmwJ5Z3qFVEeE2rKSxijOLWhk0gXG8uryGFi3gL+qiUjXUFb2IZx0WLd11a +3MtavH1onQyTYrDlczHHAgMBAAGjITAfMB0GA1UdDgQWBBQxA6ZvimuLP/vf2oL6 +abg8a7XjCTANBgkqhkiG9w0BAQsFAAOCAQEAi+ZXuQCUibdZcGFNEB2aUGNv9Ggw +O75RQRnHBdNcc+DiGxkjUi4OgcMVmOWdSqa3xVyI7+VHiOsKmtIp/hk6SbubBGDq +kiLr8D8D9yK5R4KQhTlc+Y+DZpnbwlhInia0+96DwGu26QD1JlPn/6jFWHP6u3hB +H8Vc6uASoNP8f1nPR+SFnFRK73XgkVrfKQeKeAESP/7DLontUP+BLgdQuBbWC75t +FF5ns1nmn1T9HgnGYiu2yfpSOQB1YtpMRoG9F7q5ISUhBLhfLSlVCi/1WI2ADkfS +9/tDd4NhFYMNuCtO8gf1oskuzg7CNa/RQ23iGI1Lnbi64kdNKv/DRmSRAw== +-----END CERTIFICATE----- diff --git a/http2-showcase/src/main/resources/tls/server-key.pem b/http2-showcase/src/main/resources/tls/server-key.pem new file mode 100644 index 000000000..5217ef604 --- /dev/null +++ b/http2-showcase/src/main/resources/tls/server-key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaxywB+KQ9+HJA +Oe2UdIro1y9Z+4VFl4N/8nhbvtsS/Xs2TJJ1H6EL6+x7ni4T14GUCScKVEYIgwNi +HVMpXhgxlYRHnxTxOlgQZCROwNVxMMEmLrxq4NWOwGbdQywJ7hgG3ro26rM/QzRw +LhRbCR+gsXdsUvcD/nrtlD24z/RfBwNoeTzY7s4pqBVqexHtTwpsbrTiKtZg57kv +0KIlGIoB2VOeEo+WBgzZ/6B/WPibnil8oEx2TcbJh4VvzqtNgG+yAitYncmwJ5Z3 +qFVEeE2rKSxijOLWhk0gXG8uryGFi3gL+qiUjXUFb2IZx0WLd11a3MtavH1onQyT +YrDlczHHAgMBAAECgf8Ujl9J47vsfxKtdQQYs2G/itS/HqiUlYrhc1KI3NA7tW6n +x4OsCodZDfxabqev+u86ufx1YrvqZXwNi9d/pv+Plkv7NyWQ5C7N/n7T9shiQBdm ++s4LY9D5JJSEzmcK6pRGVU5l/MXRoRtVysjpTkzlCqzRtjMYVLP+2bFY2kWaWR8m +F1BYIPjhtDJto6dXP/yukRSoR9F/q5+c90U5AqokxxQksdMLP2vlmK1J8O3yRKGi +u5yphkQW+82ybOZnE99Mkp35qUpDleeFp04Itlg0drxdfA9QgR1ndeczq4agRn8X +O8n2u6LELOELs1m1eYeeFKDcaXTTHJN7IunvBWECgYEA0mwI/m932vaDDfpK6sOt +grL8mDg3XNc+2V+NEPSX5jp5JNtN/HZn+cP++Ooumyaaxs/AjR80r8ttPGXj+7E6 +Js10FU7AMCRRMMFYD3aEwvLVXcZJtr3waggyyC0C6kRjizk+0oG+xQ2Y3SxPlJYQ +KQL6cqs0M3a7QDcfBp/ZgC8CgYEAvE2o/uYhvmpKFYB61H0uHtNk1zZKPvbruAgP +vPInIp5mCbVqdvltZNIac72wQC/CzM/HS2yosHw5NNsETwXazZXpEemm5WcgbG5Z +Gvr/wAyYBJqaU0GDmH097VAuRBV503pp6yz+4Oozisr8PO8ws6YcuwINbc985gQT +hBjqKekCgYEA0IInY2C3Zq0xbi9f/0QJcmLENF44VfIgoCuz0GJfBs9YbfI2U/5M +x820oZkEt89IPctt5SlP/wbYZqocgLK8iei6p8aSYOIL5gEgrqnlonwYe8TaFJAg +ZCFdmMgphFRiQ3plSxkwHXl8yWV4MieFOe5umCQYJQr5QAee4eSSFRcCgYEAi6Xg +jeFn5wp2lMmqzklj2dKWd5C4sUd3+wxnd43yfhcQv2R+Z2uFuH6kxW9I9eE1y6TQ +PVyBIhmOZ2eCI4TJByyFJBavAnRftGqFxJ+e6fOtDcUGbHYqvP0s3wFWvoFazv56 +7MF66JxnyyfMtvgAm0q3Be14vhZhn0gonQ/JIXkCgYEAkt9QhudWlcrqnobW3Rf9 +/IVj7ZM5KpKmIRuZ+OlkCZfEbMuVToGWEeObMBYcfHpm8ELyCBVw0DZeYqZXXmYG +GdIS/1ojTDYeqriJIty8cMzBWMGcX+BcDb1XlguT4ze+yBKP3CQwm9OkKbncm8C4 +6oJwX+C7M0xdpD8e6gBXDPM= +-----END PRIVATE KEY----- diff --git a/http2-showcase/src/main/resources/tls/server-keystore.jks b/http2-showcase/src/main/resources/tls/server-keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..77833655c73504f9f1503f317ac816ca051ccbda GIT binary patch literal 2071 zcmV+y2!J@Xi(uFgx(55;pF2%N8){dZirrL8i~#=X!~Jt4xN)c z2FxwOs>Y&3MmOEj5*>ap675kf`J;Y8ar2MsX2{^f4tx=-j*2E`W;ZqnKvrHk}S0p@rI>Yf~TRQH*a{K6FC0 z{9o{RGT^RcQ`P@l-aaWbgmv#`(tv6Q+2e zFT18_0@V-kq%CjxcbASPFClpb_(03_%y=_vScuRy0H|!{$`G~hRj33iXwgeQT>6mm zs>hu|wmBrZtjgR@*ZdVRd8rylne`fyye?)nK?|%dsbNQUM@YRq9C63(YZge&0)93b zdpz}YPb16Q?HXY~Ojdv7il<>H@BhgjR>r?Fl-UOUJWDq3P+44rM(s`*37s~78q;;9 zs2N%MBJEKuG-Zx8#*PS%I~n3ugWVt$k90Pf?Bt4oXv_(jOhY9{){LW4?n&=Njr3Xf zjAgUI?dXCv@P;a@ni<({mv4M`LEc5rajXr}9jSz?#p)64hq7d3>^TLd$HG54{$z;g zvFlbtCZB(3`8wL8V}tTD2=p!po6r=z800sbEMG(u@6H{m zp3rSo#`R%Li)+J~3G_xr)ZMnyoo%JXkTI3@W?%}y*tXhkF`DT?p^x*jROUd}PSP7A zauP)V0%M+N4i%8mW9bZOYcYtRH9E}wMuW{1ou($q3&!OMK`VNxbU@heF+3(rAMfTdodxR!oG>XAeu6(b#uHWtkk1fa~k_u#?6B z-~YV|^r2dqP381|R})_Qhd2};9TZjGzurR!U4qiI#${#@x}N$h(E9zxxCIyXF}mLD z1Kq_=#4DL=O*Gpt{|EWs>-zamgDf380`fmBAg@6AxyXdmdEKU}X7+1@JBx`xr~81z zMQ~-vX-j5jYe4`NHi#lEqB);WZSpOVNbP+XV-8fwp$C@0uDqA2(Cn~RY%;VhyM)Z# z*Op&zfUC+cX>%C^Qa&gMhaV)m7_z5e9qno)kwhfuUCyN>6F&itwJpbGY-IQdtn;i^ z?mv6B3XF$FGKb)}@$n7N%d6n?^a6;Y7~2Rq#j{3NKYhS?Rzhml@v-b5Gxo-zdpxhk zBji_E>?0<{mkOzT@|8Mv1 z!2Xh?7e|*D6GONyuiAHK_8&LNQU6fqJo5C#KP1OpQZY;R*>Y-n$DbTEPe zA}|dG2`Yw2hW8Bt0RaU71A+k$05F093Ic)w0RWoEECKkWJ@|4!Iqj5mis;ubS^I@W zmxF)ucw4^P68(ENOp{7 zBu>E9aWKIqF1%{s)sDbs-9s!1?idE%x;E;wKSMNdE)-h{AE2>!Y*P0F{(9|{J-E;G zUk3wdc|6$e&MBxBYI_mwPYP^qwBjn(VCT6n(4r+6iUHYEo)V9i1`OH%pnq8So1Q6r zpiFj6#>t0;Z_cYtfN!z_D_EV$uqT#xs8vLGO{*y^VvOR}hD{(`Z!WJPg^PF#`lytR zbp>x?8OKG7cU@ZC%UZmBXq^m`VzA|NF~9R>qc9S#H*1Qam?rf-UC zi$D9{+JgFNxIAmM;|VYg1_>&LNQUHrnkjhi0|b`i0cZP(kcEKI!U{m1Yqit zBJ1!!1NS1iM}m-rIb8XVgJzlA!dOV2CbawBgTQOH=>YX6Q|JGv#aMItyLdq##a!y( z5}?!ke_78*|A8(CP`DP>3%+d>UT3pe=ATsk z9tp-`E4In{QaJ#1V%khbfxQ>HxgjMX1h`)Y>OP#p7;zvy?|HDRPkpme4Z&k%zHnXr^ZdUkdt~lk}#RwV# BuIm5* literal 0 HcmV?d00001 diff --git a/http2-showcase/templates/image.hbs b/http2-showcase/templates/image.hbs new file mode 100644 index 000000000..eaf6caa40 --- /dev/null +++ b/http2-showcase/templates/image.hbs @@ -0,0 +1,81 @@ + + + + + + +

+ {{#each imgs}} + {{#each this}} + + {{/each}} +
+ {{/each}} +

+
+ + + + + + + + + {{#each latencies}} + + + + + + {{/each}} + +
LatencyProtocols
{{this.latency}}msHTTP 1.1HTTP 2
+
    +
+ + + + + + + + + + + + + + + + +
Times from connection start (ms)
DOM loadedLoading...
DOM complete (images loaded)Loading...
+
+ + + \ No newline at end of file diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8a4cbbdb823602aca0f7d9d821a23373f3e6183d GIT binary patch literal 1023 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 gY+RJ5_5W`I07{a(`2YX_ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-12.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..304f6e01598b58d14c19e8010cb919822c52d806 GIT binary patch literal 1074 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$&jg*@=1ndRb?R6cP&+PPre+{QLOUO2#(s zdH(TPlg~-;->m4Y|Ca0^rc&-Y$vpp_<$dFN)fI~v8ZB*}bIf=h*s6ELI#J~5?VaD2 z+w43T_*rn93G;#loO>>NBB(d3tP>P6IOqlF7cL2?%uPhVM<0%W=weUpW(9GmtUdYD`$Bc zR3=~HJG@~5%cQb&74t{c7d;k+7P$F}FlMe@9DK;a_Fok5rh-$w6R&HB^(3GF^>x89 zX2!{rY%`cPM;~)D+rR#f$RBJiaz%eaz&`*BUhc&N5YXNLs!w zofGxjflxN2T}l{?GOgT}2oz zE~)Fzy;zt2N7Jpf=*eUi-dtU!%sJRFx(hisi literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..62a41f1eef53d615f9497a07b2feb32af4e03191 GIT binary patch literal 981 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-p4>b$9&Re{Q+&CWa?c*bBJQ1NwbxV%|y)*@>rqpa6|FFJ_MD9T*4WJ1mTsD#%J9G=X| zE1rbv28mkrtZfjg@ouW$WBliH_{XE(CESs>J*@LOcYLvwU$}s;@FDBwXLVb`rbJIQ zJRW?ji{VBtm-D64*MBd2|Ls(>m}&gQB+!BVo6g>)&OfBGj|GS%Pue3B=*r;mc&Q6N pP>OH0;PK~~-#L$;2y&di?((1GPhCYAC!IKTB&E<*B!K<@O#opRdGi1O literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..eb57f41e1e137dbd33f8b9321c90a2c4c20c5866 GIT binary patch literal 991 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^b@n!a2+ze=qzN_$qUfkCGE}UfS>Xch4`s zv?#M?#|-8j+wT|ualiaBP$lQ>&SRc0`198?*oHn!IQyT0QMTbf1J{Jsny3BK_|)}cF74g(3)LaQKIaaKH?di~U}dm;S~fW;S$To1*c7c}J1s43t2cfTapqL! z;ynLwvcGb&`MLE9GCO{+uw`X%JF@bw8Z%$_O)cSF!ILMo45xhz?EUTsU+q{p`HOIafXn;j&VmsJG+42)v8eC^5* zuRZm(hpR{cv-tG6Y{@(-usQqr) literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..b4cfd7d58e24dc392479126321a01dc16e34ba2e GIT binary patch literal 977 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-wZR&l^AUExtBiT3da(!jaqy{~1ayGYi}< ze^TmZe`;da8$Bbwy3_^i+de#vsQb$P_nRi8gPGyq%U{%gM9qlVwSxEadX4*+CRc4x z>7Vl9^otC}N!qUZ$`dL@o-wRvf0EaJ;qnZV&W-!h0zYm4-s;pNx@}w8ye|xI-bqKl zUoRi%8+Oc5Qf|vS4x8GC_pbzdo|7oZU2Mq^Qf_z%w|60coF7`8B;6$xP2@f^qwVE=y;0C^*A=>Px# literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4d85b512d4f35fa432cc19da7dd59029fa2da63b GIT binary patch literal 1240 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-qKnWqp5EuDgBM>ig{nQn8=Y9PEoVU(a`r z2@*KH-Qv7fEwA8-j~<&9wO&>AM=^Y{oUo=>dYxp2(#+IKv#AxEkIvosbGogoxyO~@ zBW8>2*cNkrvVXqnKSQtO;}cqkS;}lzFz@VpXZ=E`Vz$O%d;hGZD>FZvWL9S%J;Gk_ z{oA^9udCADyEqlk?w&uRs=DjTY!lDKupmi^6u~b8Bs_EN3yG_#@|mCf3;XxJ|C!Xq@Oa<3cO2Y(#XUhYQhu+!Q&qZJ zNk#eHocZ5+nM~fzU%7x|&DpcPSIP}e1V!A|I`B#R;@iB0k7~27U(oP=(eT^HdH-*R z@Yyrk)#Y1#m%R$NvRg2{tap>^pN=nfR~T>l@_jv~z4$}gj)a*dtG6FA{Cj%ii(0#> zlcon|O>+*|?i%2y+FSp0c75Y2bAb=C7Ks-wu&;TwD=90CU+_fUio+}Hu10(Bp7hzj zVx61b+w;@)s(+b3(wg5~Y`espQaYUCFxIg1m5MZ zU-A0q1$NCftLihh{WvVcm$Bp{W8f;G>S9=T{HcA^I`;GD zEr6VB7q@1b?4GE!?#Jw>lZ+}7V|!0=+{jT`(xKve*TLq&MOTK@zsquszG>eMH#{qx z#}d9N<5yEfyF=TDqZ_<9Qf+4x6uxy8VSN5FU-r*;uat?bTi)g^Ue7%7&kLa8|8D{S DRB8fj literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..07c5011d03b08c7adef5681dc6eedad53148c57a GIT binary patch literal 1037 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-tOBd7N^`*1f#k9et>;p#RPq~)Gf&;e=fG`(fG{zZeBz3nQmpd ztzMih!HefLeEzb4b@nsMW9FrD?fYLxUEAEbWo86Js$=s%)0q`EyW9O1?n|}X|0L*T zc@p=ep89f)TQ?VQuF>~h^Zd-YW0opqc3T&(I`g(-df<*DuTLIxRNntIBHUhQjV+(n z9b?Ha*E=Te65d<RmxN@aom2YGLMxZ-R+Xg)2aSHE-&q>l&)xPt6g>GRk+1!hi&ZYpBM1lZkapD z_TmOD15VM9)okaTzpl+*s%AK6{@UPABAPkHFCDm_o-b)^N%`1&c(0wb_l)lo+9&pH zHSIW)e&g!eEsQh2X)ivtTt3h>^X;MrnGX`{(>ptKrKhNrA3Un<#%{aORfLh}<J=SxKbn2+$efB07dR8;@}CIIG+m`eZv literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6a64ad0d022a384efce60c41b1ca663a6beb58c6 GIT binary patch literal 975 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-oqeVt)23%D%$+131 z3Yu@5oZlLg+~(-OaUjp)j{9R*`OG=>LUknptSOsz9#8ynrRh}Rv4=me9?&d2%MfT) zv!*Dv{{5=>H$Us2ulmn$KeSvVsX?eFCYIJ` z7Qf&%d8xI>XW?(|1<2%SkxeJFkx=kgZ~T% jS~dC(@cf+@{B;sgvEdEj{|s_#|1;F{iUc~y|Gx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$;3ltpdUGE1%6$RbOIMSMri)lJHEC5c_od z&sPFidXA)jFXGRt?Kvy@hcBeZ;%~*OWlVf7TmCZ`EaUsC62S6n`k(p}h8M2h)!cK| z?w9L>e}wVRQN7uvPht%0%Um?-1s#N4Hg0N*xcRr!G|zVDvzzS~ z!hFIfX)qT^ET7$$#6R=b1-9ewj{n(p@;^gOm$r)EllrxPeMK1lGrakD@4_c)Gw1*Nxw<8=i(ySpQtDx^n*KgY?&EM3obv9KXQMn{TqY&+W!n%b4rg|a51d?CSkwlKf{DYYjaHk*yib6 zUpnJY%*9<7N;dU>RR5E)s6lX@u0V0B_}|a}8LqFGAG)>wU(DnG4EvKoa;n?*c<;Rz zyG1$Ua6=_VpE0PZC8;1*2L9* PRT_Wo4*}Ki|Gx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^e|R54>mOUe2o$JpXyYd85g*Qzc$cJ{lS+ zQ8Lx>SJ0NFH{Q*VKh&URzTJj(TSxj*ilFyDm8qALGc097HYg%n`<~W0fy@Qsp zmK@L9pTV3x6KXDhJ<1TxX(_w^<1MWfn*SMWXMbAMp!>It|Gnq0pubJGcTQUK*7BwI zhQ|#VOe;5RJ05B8#oD`l&HSZNH*VN#KE5^ibpE^fry8`SwTrAy{tEmioexy8dE>_K z{!cwO?%!3f#jyUHcJMv_OOxM-E#I?$ZsaZZ5A#n=W|!4q+WxI}<9q$*u93`rUjo>g z;_jSqKeM2Ie%6%p#XUdgW-Mxu(9`P{6=J+MW$X3I{|s6h3pm59n=E(O?bYNu<^HE; s|I_~r*B5m$_^Ulw=6bpCmDcXl1#28;d;scH&YnG?@L8a%2;={o08*KO3IG5A literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-0-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-0-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ce620ad2f198e115c6c5c92fe27cd58c86dc2e72 GIT binary patch literal 963 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$(e~9V{Pz3I_Zv{?4}a1oPiS`#_(}a~wSO zS`5?Qy}TrR&p~ThUDk$A>%SE(v@CkMYSo-w&#yI@=8Mj&IA*k}%i_-~7mmejf|oCZ zO6uKQHkq~Txx`W90(H9t`BsK(Wvz)brpx||nqDF!+id^tnqh&%-ychKC$P`He5t|A zXT$S%{lA}e9ew$qK{sOocYMOOp#;vXS;I8&lOCH$=TZ{E55xoAtI`I z&gq|B8+-UNB#ttK|7P93W{Rxc?fJ9fFRdwbb2nj(|7~^q_oshT>eFu5*ZH4XlTvkg z1=IR(wc9J@KP_6*ps|3HZ*fukH1>~6|6Q9Ku2SdzpJA=52;-WzG>)2spOb&MORi)( zll$lG3rCBCfv^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zW`Mt)gV+7h1|ITsYap>>acXdXLZK7h#Qm ze}VPb-k_ps3;wzqc`l#6bXWhPE6&V6jz0}r-1whCm)+lsq5Z_v{$G=ShBTdRIO$Nk zF_<%ip}hG=(9ajepZQNUC>kd4f2of>2wWmhmQyga?f&t5BKR%PI) zGyD&-zG)~m82dKYpLcZ4cqo=Rd<%&nLHkdH(FuSio@maL?2K3|^UAor+ZQkGhHkFi9KV^0U1L Jl;i(@696dWY`y>h literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6587eb87e676e9ef16464cf11eecc2d93feca5af GIT binary patch literal 1175 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$+5%yl=-v+6?!9T-PSc`84_I(mOkT`cKU{ z{`2aJKbkcML@$|Y+Hz||F+3|v=!)HXCFV!czf<~VxtbGe<6{0ZXq^z!pLJr}ht=z? zBmMj@n=m?yT=AKFP~EmQQ*sHHY|Tb_r_&NY{TEl&W^K9Edd7e2=@suXm^juxO|$57 z{?EW@YJOv#r~HnZs)@lzi&C`WBE94uuH4>jqg<1_&-lWe&kj8Q&hPxsFt6f2LnHsk zMGL)qPfzl&o1xal@b&b4Vc#XMHbv`rt9ZFpD$I}1x$eI_OKjKD4YO{3=j&PiUh|96 zp7%$-Z92Zn^q{3MPmjEx*0k9x@4US3t;6Tc$G=dnrF;Q@*esT5Mw2vB@;H?C{61>O z9Tr@eIU#();T6CBGxXzE6ysZf?lUg`fa{z~}LAIlF3#2@`{A_pOzxSIVPY zuTQj4Sb56e{g?j?Tnyo!IjSk8s@BbawZ87XP*Il0)4uGTJ@dUdMxSIZ~GuHH{PJj^R?029WEVP!aNx$w2xIJ&_VwHO#sE#)B^wj literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..76f73a31b22f4e6425b662a134ff47ffed2bfec4 GIT binary patch literal 1052 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>1LA8Nt~-X0^q^8c%{4KlL#@-s;h;qrvod zQp$DDi?A#z=`Mm#ioKeD-IG#)Y8Sd}; zTHoPsQzbif?&`Yl^)teEa$oQJ>sq;aPu0?G$9|^wFRk8xiC%4kAms>u5*JZOh zh)=BSc-+)*{!HcLN|PlYPQQGwGss2pQO=Ws!#~;=F5q^}ZU3`r_GgjMh;VMC?OxA!xcy$0##x5Kc)@pf z|F}!Ep8PH2T%><5=JUkYF=yYdDKC4u;^vOeyEeo>`lGeJ({%c-k7)~wn2jpmtT?=? z@%WcD(|2V&{j3lsz3)?>8c@aF;j(Q^Cp0>{qIXff%8GLm&hCeg<`NXLCtjLe`%lZsSDOcv_$vzU^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^ezw&y5&&B=479x#^WLQ`v^sw-(+}Zk)fn zU~5R~ZKej3g}Zl7NS%@J<cfq<&6m2iDzDvoniJtk(U^lF$5lhb`3_44+jK>y_y6#F9 z#inI;w-rxVyy1<;0=|e#g03PAcehG&X)ItfIJovb|E;BGFJ>}mO5EM@-FC&I2CLF0 p1I`fUS+g`knBF#3^=T|>(7f|1d%0I)#&#j|C)F2SMHv6z1OV||j6VPX literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..db514c96d16a720d4758bfed0b8128925b50b42f GIT binary patch literal 1148 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>84mOPZhgZmNRrP-u-!Xt=9{c?9BYuN%4E!KdfK=G&0y@N1(8<)Ss3AF22iPx^Y!9vZ><= z+6?fhQ&#|7P)v&lfICA2Ov>SfPJ#dAGm)KABPOq1px?0BA7P?4%>7hqVZ)VE#3?c74fi3QlJ9F-h1T@_b5|*{4!(RgO#RK@+E#}2 zB^$*AnOwBIW&Se=F28ek%_fe=dHg(8{D;;*bNIdQTvf?Y#kBmNWydep|N6q{6sfFZ zey8=op%p3*>O{iY9{*>s+yCRme+DTH#*26NKE1Qa&gf6$4Suh%2UEYkbQNLbcscP( zh+t~URAw3Gi9as7GI&Vt-&1cDdxrm>{ald%CX+Qwit4S(z90D6Z}%n8fqU=9@BPnR KMFQCW-vj`U&B(q0 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-12.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..38f4a432d7784cce6d552fb6cc5a6d5d1cbc014b GIT binary patch literal 1163 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{?0kd2vabVyuo!JxgbQ_nSYeull8s>EAE+ zlIPw?|GoNE7XKD!*`1vsCWdo1%m2()|G~9p_B!>ni93RKh1;KMFk$)hlPxl3Lf#{j zdqtVo-bF6Sd^*9I>(A4eKWG15$l4(kcaCX?o5BRo{|q5>PkuL*J$pw}YE5=`#*SX= z-Bq&~BK4l?td#$C+>&9Zb@;srcQ+)g;NI>kX>a)TSBO^GGKtA5b56Ji|2wf#CAHDx zr^}L>=f9gT1TbwqGjX+0@s^q+!acu&FGbD_^!WQ_&Z>9H8DDL#2yUNtFL|NzlECf7 zuUwTqWM`UBI`VE_;Q2o+0jyhhrpfQxJ}tpQPjZ8=Xv}H>yJDfoPaUebG?-@0u;Y5b z`ZGDcKG?runNRg$x8=pf-_ORS7M%)HGPtRn&whKYy+xAi{)gMU7*-b7ERA9*oNm2* z3QwM0^Np%d*C{8JHXd_7E%b{&>Z*d=wBNOdE+v*TKav0ad@V!p=Sw&K^hm`uJYRlk z;k{Kir!=u!oY%Y4o7)la#BFY!Oa@%mp^ z0+^fkfA4?pKI7-_=bsmKF$Am3zi&TRE@yY$&p$5~H87hr)PDYX@wxY3AnD4WKU@F% a`RDGl75^!_iZCpSWH|QNRV0A@|4jfS-rRx! literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a062018d816c3da0956107f94f6b17759c10a455 GIT binary patch literal 1020 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>8#pWK7yS{(WY%neTYsI*Gq&8|_H3W~pCSI=RtA+biaosNQu0KAx|Vu#su@W(rds5b z*-f1*^W?P3(*4y}m%Nqu_WjH1Fy8MIdRMuHS~tF`+rp^b$Lo}Jxb~CnDlrj;&~EqC z%D{;AGllhIihKI6gce>}+WKeZI$c=M~o?p2Vt@|xE!}E`3a)hu%=O#Wk z#zze%bBcH!9#0OFe&$e{B`(5n&?{4Xt-T1N*m|Dr!O`c1?wGwU4ZmS=XJ_!A#y=Tr zbL|7WF0u86-YK7C{POtMvm%V0&rV)1T>AORzpo+zjL%Otf3BOtx#ax4zZ#1g^bUF7 dW~#azQRphdC|>CQ-c^JlL2gl(#sdETHv#<`h))0j literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c440108ba1020e847d119f3eed961cbefd9b7f9d GIT binary patch literal 1123 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>9FcEgfVwo@Yp2`E5z9!wTyI((Y#`SbY0+ zMaXZ1veu?1i%j-=llPD zcFmXP-FeVldrtAE@86y;6=6In#DDIv#EZRC>VpISeA;fwd7XXbuWMVs&Jmk_UF?zZ z@10yLqu+QjJZ0CH~VZqtNAMHy85J|%*B14XEQQ)`ONAR^6)9Ue@{04Mtv_s z_~uRX1E!}abL_8kvWWj^clF}I<*G~KLIUSirrAdPnzdWXJzwZBOSPaoLt)S&%g3@A zOf$9>8M(i9P05aWGi_I6)6Hfr4IX#p@+u8x`!JQ0xdsP5=U(i;QnUO&gX5Y*Z`|`w zb!jju96xhh=Hsk+#;ziadl$astlOV8r+`fv}<=nI48WnySIJ8qArHVlG_cF?_31x{(lnyu&TS> literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4256852387aa9e920f6f209d8f77c0f6d19baefe GIT binary patch literal 1101 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>9H(k?ruo=~1}_*#Qbn(RXt-^rJszxM9f*7j*O%UkyP zdat#Tk&C(KE~<@8y36t__oz)R6~mjAcYs)J8A&CZO@^Ghzi@hgC3UhZy9d~}6V!ta(y(`F(LGw>0>uv@&2KCFp0Qh z^xxQjs*?S})f0~=DMh9pUoO*?ee1nycVFc(4JIaYnKg~Zx4Py;X)-@o>SEX+*#D8s zX7S|DfvybF^|wrNnRhPgVldjb*8SwG{|s|Q0+?#{*5%Y@{Ir$+_X{W!fA>E_!M_rq I>iYjT0q!}q2LJ#7 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ebcc0f8d825c066ab155d3956afbe0f264655bca GIT binary patch literal 1152 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^h1kECpwKzCN0An)9Ds-BbsLNdkA23u;%M zmz0!^t+nq6U|poFESImoENqcR>-Ngi=jBVT*1U6Id?K^*i`|r^&2=Am*d88VxPbG| z28JUmk4N3Vyme9z@7(j}k|moQirjyz-`d$3FmaNR`zy^`)gpUBPab3!VZ7{FHHk-5 zp?qEQ!8&a#(U+TdCI6jUaM%COru_G{w%L=;FVpmDlexgYINDclbzyBO?XPLWQ>PZ}Zk%zJgS?AiMp4vox5WKVzNJ#$xdLy>H95x4Zk?wZs0M2{lkn zvYWfo?%3iVGd|CeyTZuXea8AiLEWeRho<6M(aJa5*TxF4s9wCSzE=NcqKaYi{Iv{W zO}@)dCvp4}%8quuaOqE+-zSO3O}3{F7Jrs&xXPT%X>a(XEgjkTMV2o znZ29C#n4zPoA>VA*)OXzrinBLUh!bNE_veM!7qz;7_T^6s59A1@}9en-x^rPea6Stx-^)4<#dmheXu>7_hXUs@;`PvCvxf+8#&H*eU-7O!NS+e68Te-i-MlgrHj literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..941a62c17a5b6049a57603e951fa6712464a4d7e GIT binary patch literal 1249 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!xJ0#1*b}9KJU8w=jBqn6alvsjrzUElPrHd zTdChxs?_?QVbfP8hLd)VfxoUtmadO+TrK@NHKb(X#b6nmtQ(ScKh#ZMl!XVpG7F4# zD0ek_lD>U~-Q%SUHP4H3-Yzq^BiZ~txFJhz|K-Umrp#Zt?((DjHk+AJzwWY2)-YbJ z{uf(s^_lszLKee|d)a}xqQ`F@KK7)+Q=R?Z;=WIkMV+}qkFUB0UW$J!aDMsj1dID( z)fWF5q}r$E6-oN>Z(P7@S?abmDC{mHU+A_5gZf`zv#tkCdUtY}dunO!(rnd^ormP7 zpOxm{%s2m`&&Bjl>wEXKtnx9F`IdLA!BjkSZkxCK?>84i@)sDy?#gA~FA~6>XtTZW zRZ*mgU?Uf6Q1tU8cAMIw>=hr(w(721sW-RefMe0^MQ=Ab-u}m8ANW2Zs+;?S(yqwv z6J2K3GTY^r?+yF3=f%Tajfe7bChZM!DE?8^#qc#=Fmv^amum%ozcN?+{-41n{M@W# zb4=d4MYx4>syhCQZ><$x`YJi%LfDgu&lPSO$lsIw*S@x5dGE}$t7-vkPiy+@?awt> z{8*Zi?iuiK;wIkgSJLUOdpl|-HSVc04fUAK{N%4zh&ji4sbf;=GHV$^KikDm`Ez4g zjA5qGQw!ab-x9C?$#PD$^SgLF%kE%7NDl+&Ib#Q@9se%4>=0szbVz)Euj^djrBAB2 zT9Pf_yE2qrzO~wI1-Dl7fiUf_FN1DHRT^$Oc7yjM`z(zGe9eb%^~|b$(edZvog{PS zD_`sz*IR#-o>_W(&zH|0i@F#Vacey6)hPe>^UsS#4WcuD{5=2MOLF%{5KsKsSNpjl Kfe!NjZvp@*n*=ie literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7d632ee0dfb1c989ee6afb963e5e8305dbc3140e GIT binary patch literal 1025 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-Jf}>et$b`Zag8*_#TO^I89!I-T{*8PB7GTy_;{(%A8`D zFk#-FBCYo65)wjYbz83Y%C>#4;d|{MzSO8SVA_8M!&ebKL90^>E||Uh5g1_Pwjig{ zL#EVLqqNPjz5M(m4W?HDb@3YSj{9l8D6rg~zffrtOPSAo%Za;-&IYX!Qz^Lg_|+B0 z1)p~0aF-qbeW>f4*|y^gC(FM#6=CdF%y{}m;bZiywnf*gYI_gVcuQ3p$&@m`oBuLW zKfO?mTZ8xYr^EEy%(vS`g!ha_nQ%OW{Q7Uz~Q@hU*){|b6wNlEdN)fE5h)v*8jP?-IhQH jF800B?$2FC820jMFxy;oWsq31sEZ-*p{qy$`~RB&L=uWy literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8e1e8982f585e72746ea98ef05c3943585c86e03 GIT binary patch literal 1023 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{;ee|GnI1-x;SlNqK{6pyP4hLo2u?ii{@7 zANlNc=$+s;jhRzQ*lq2t7$!cRp08L{Uu}PBbDq+9mKDFGF7hfbQ)xW->uP22#?Jk7 z8T2}8c3*3^_$<)Vd~dUCobc_*P>@}+~U z*{ZiP6aFlCB2ZNLqW;(dj!%tevh44fCI>qFs$DbL{r3U!g6~S3&s~x95cwCvn49~- za<2XR#jb(({O!~GzbtAnW^(G0i19J}cQq>3F?`KBSEp}W^-q`8%~+86vHxf0{9_I3 z<{vD6&i&6|6Jiv5?0#u4cd~?iP0(zO{|wKUzjhGq`7ts2nT5h<|0^MXH!hKtf5uY2 zl5f7?YyH>3DsH9+cBqs*7hz1wb$n+Mn%Nj0Bwkkc&HAe7j>mtKA1$je|NHW!?7{a= zx7`*r9BNQDURK}n`&rl21fSZEKQ21(=qz9^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)N1s4TZI*<`rMLGRfoP+pv9&{0YZaupdr- z^TPOr*i5C}C0zpiD?}I`NN>ZbmVzI`#8WiTwv*SKGxoA0_@X z>}wTa^gb`~yT5;}MeH|?8{bXUC(XYvKb1-3Tsi+z2IIH0+pQ1$niaCMr{rF}u)m?3 z8#n){3C;o%CyrlgVBOgxdpp`b*#F;!m`~D|n=;!Z4m>>YN7H7-N#%06MGdOIYbsCY zo%n7V7u{VcF=>r=QC;#slh65_GCP<3oyPnptwDR*_Vd5?U-{3_D{8p8`CpZ(2%|xl z^M$pRxlh$s)olrM;1`=L|H%K^oSby|qvEe!MHp(kYW}|X&k)5s^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^fTGi>G~_GT%q4FEX`;XXQy|rFoB^D|0tg z{%jYOv5VZ@!o-&%`TSmk)!bK;IQDnA?q7tluP)I}VD^4NdqD{h|b2VxU z+_Tcw+63Od?dGAdx%Qn^$pWt5%cdkQ?q|O;YtgOb-P0lu@w>9E)xE=z{5}02i{`P6 z8wonG_Ios#7Tr3@$^3S)#W{{8znyj*xT1XA&+*w@y=Rg)^N;U%5G;4c&P;b-{XG%J z1Z9gmdXJT_1O}{K#bC^%@>|fAA=UFqQJCTUm|3X{W>7q9M~?2v{|piLeJ=6Z z-H}oagsVo^J2u{QEHH z^W?J(L3bAV-7cITRkT|}`DFacvvHp;|NhUgl+7fu-}uV{u8Ak?y9C^D7ytkO literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-1-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-1-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..cc07df589f8e3980bd64bb9f7070fd8dcea3dd04 GIT binary patch literal 967 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)MV6#|$nXtKAjy$ld0tRoOXh`%^s|xN~NH zRm}>R#8Wfz?K_sH2A$2@>^>E~@KvyXyVCaO3XY%x<@nz(f-1cZcTE2*!l>+JdC>94 ze}=ECI8$>PmOA|U`d9N`(6<)(Qwt|Lt+Sap`O5+>p}z|@Dm`F)p?R&h=)1PG=MLfX zBBwi(dx{uLCZ0*$QpwJ*79#I>uR&$!-ZO8XG;S!ceC?W^zo^0F&k5`H<5w=_HPmz0 zrOkb!crI1>&tJ{DGtEn$|M@4vD3M{+T2Qxa)+P5Fp7X!=`hF{s|8#4@ZN>i#)9x>2 z2seK4Ax8fD%KaHCe=d3cyz=av@qY&0mGf_2tUn*cu;QN2Bp#vTwl8+hFBDvV*Rg;7 z+Ngi$9p`R-wAd<3{%5{}$aR&J!0@9D%uEHWB8-}Ii!4kkUvWs71Um3$H}2q(nqrV( ab^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-0=)KU}dXTM1kzruxA&xu}L zWnsFqP}{#)W%=rz$v@^?tyJ=CyD4IDt{{Wi-BbFO5jzWW+|q|%q{UyxMW$VHa&$Rn ze{=1L8qZQT;kR`W{~1#1TN$d~O`EYrc9XW(-N=*zPc4R{71L%v{?D*sir#nQ4R4-v zWoP^enX&SQ?%T+ne_w5`+pEERU31+_sdwd}a%&3XOwIehN}q_C{Zq7xt^0}mG)>)g zdRwcDwc{1FDs*o5U%9}(X5ZFjZbzg3@$|c&6@A+9I`h*}`x$#@CO`furNKPIJD&g6 z3U#-s$NzlUHRtgs(JIa_A`X5ty63fNwAtIty0z;^rphJBr8`4T{9e59*RLyqKdiV- z4Yxdb{3BUHgmI>JhLBrf-oah1QzP`BX)!L(6mQVoI_r+5&C-1z`!9>`x)nNyPigzs z$n*o&OI4frga3(Msi-=q9dV?PMQ(|Pr0sbT#-sghm(NQ~I=j5NJmNVs(<<)||EeS1 z=N2=34Pj}joBGyCk}E}BV$IDGvt4&h)+^*WxG*)?oV$LgOrYni@s9HfGF&f9a_zk~ z@IJaF3Z?T-NV zh5nE8xo&wrIk`SUTjPn&?1n#^G}g~e+@>iY9a1L}z`pafo&Cm^dq;Vf9+`COSnT$< zp|(4oT%Ucv#^LI^yDgf$o94f3I{w-Ip{ocZ@AQuK7tB)Ab&8JOm^16u7TxNQ9lIm0 zJy5W}8=$eM!M5J3JUhjcQ*RZwS=Fq4iyR`RvCm@zN=T)!G@RhDx!zpkIWaGPU25pf z=da}aFD3=p2YD{)Vwml|^`gmNrQ5&V&Uw##Cw`7+Nn*$(hUb6pU+dCX!2kay05$Rr A_5c6? literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8b2c106676d30dc005be1e91733aec76cceaba7b GIT binary patch literal 1351 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`GjG;uqcCcDW>WuOR2&ti?ZW9Xa-%>mB#? z>V$uxrw%TECGN|)~3ZHJhBTn2N>kM@9Ry8nC% z6kk|vvwc0s@Md)0G;QgOyPbB40e-b@M%ha?UGR3DJ^N&;bl)WgpZ=P#S((2|CrR=c zy0Pmj&wu92P;lYo>hsz^%O+V({u&w|&|!ag>X?r|A9o`sA^FYsr3|XCK8oO)X1flY{0(YbS2A zXcLrk{&#{whKu37+tf66v76tYb=~=sv4G!Z)5mx1)y3vFmre_m$yGl2RAA$xPoCQ=6aiNAAFYt8xnCwm?+-=9;y zlCSl_d_KLrX@}I_<;fV=xzA$wsJUgO-qzg_%0ZWn^yS|gKK`1jg0ls3Brt2hsUTPx# literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..39a132034baec3361ff59c4b5529701380efb022 GIT binary patch literal 1313 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;|$>lP75^Cmfv4(mc=oKST7-kZB2y}9`RiY(?5)Lz-YDPR&ckOo|Ip0TqK(GK-iXGe>l7GS)f+oVRmCk;n_M)R z#kx`Dy(GK+sa2+bHl0XnQ|H~ICH%*In?~l%%UQ=N-}(OtDcc?Ps#t%Hz=Px4d)MCo zuz>IQ;b{dix3*0!6^h}mUbnoBTjMd5A|z5krV&~I>UU{#H&MCXub|O_}zSI77+RjI#4!;%;`z|h)cI##GjT;H4Uf*c4mtr_1 zmnG9A{bkkm>A{spH=WqjGc~w1$>O|d!sZhOOC7$x%G&y>e&G@8gNlEg>nA#hoBU@G zj(HjOjKlNR+5PLC8|;^g_PD)sSkz$3{z3JVEZxmsG=B`?vpW- zPo&A8xnj22D*C8#OPS(g22GY^S%0U3EcM>>JL`LAo@01&f%WCosV-d$6`auy0q(`o-Q%=pN|;+GjJF2zwTPqni#ZkWkA)F$ELO`bTjTHZ&|2f*!uX11ke7) z({&*XpE?e!_ZJ47+}hY-KjV#I-=lfC7iUj;{`c{$YL|@*W!bEfMHnZnGd%dHE1~C* zm%;mqUu-Tq$i}zTWZV35v{UW=9olnrQksgd)B_&vCXVN`^7~A+W1X)1%(|AnQ@rx{ zt;fzvO;(i+Pupc*ENU>&xp9`|qfo&DFS`W~{w4gIa(+|HW=Wf`T>M<@UK$IyFW%bi zB$w2~c}vnwqHxxvb9ZCc>7L%nD>&Km_?h^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;*x)bDB>&w^zRZz3o54vUGO)iOe6?#`C;f z_MaiZ^*BqnfYtv=d{!w2ORI|>m z{XfHX2i_mOs+%jCtUZ)&tFGOpGAX%DWfJ?tOFLPE=dUf9wQtGvfK#T?-m|SY@4T=n z)my&a>$#9?j;O-?EQY#6FHThncI{pocYe9)w#7NE%NpaZHagwce3C97{4>>kb0^Nu+=#kzQXIg$Fjzb0=1&)KMNv2joC_)D}o>~{2sEIwC!dA+HxZtIm*O=7)$ z>{>Te{?F=YQGy8%zwKKP!Jo%tjd)^fu?)7(!>Q`*^bI&*UChy0}P#D$T zo)o=lS@BLczJo_aH*9-fc3yLmfw#=N8kw*Ewgj-r^_H+~a`L|yaG<*X-$v8>$5&OF zHCY!JIZd25Cw$7P)gC=B;tUQKHMzM}KB*47QN3DnrqY~0J#NMmuV1*pzT9p*>$&-7 zcb)QQ6F(^V?L15P?5wZ}M{5;&V+H%3vNsuDsbg1Kd+YUWw$mq~?x1@&+nsl6=m`7`gC{d5qtgj{Bbwr*D_={=SdpfkzXp} zT3alYJK47^KO~9$)1n58s}}N6ufDvsx*f1#`;Mu6&w|!A_e`}o|3YI?gRbYp)#6=l zU6~grmM1)Dj@j+<+Gs_cxlG&hMpqHW^uoa7_Q4KE8df~`x~Pi*7)82@8V(ifrfB|W rs44!{7`uf_x8!zo%8T$b$*=tVFVtIUEZ}SRn;3S1ckc_JhW|GKNsuNU literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-12.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e54c3485b2220071c31b1a8b52cc4a3b28317382 GIT binary patch literal 1335 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}F5Y(rb+@lQvh%swiv{kdP^|pZVwYnu~w( zD1RA9ozsS9W3LLG>$AUv}D9F8AKA{ba+7&<*x7 zAL9z^g$}Q|8@ZZOF-%vwpol+iZsh{bHMtk!bQ)6DTOLn5o7EsubBeFlHA(f)ubkI~ z40n}MTE9Npl6-Yq;d9&7M^b)nTlsQcl@!B{+_y)9Hox;xR9N|F+LOAj#vwB z>`(qzu~uZywvvOjJ0%pai-x_DSf|7<;BklXQ1JNs);v%YQc&ReeBM8=HhbDNy^W$Px9r;PI`h=#T;BOp zCa|%~YA~yZ%)9pOj?1L8yU*P5WSNt^JUB9ZT62x@qEm}cD@Zb&eE&Cl(T3ivC2WGmJMxmn4CO`XlQIpr8nP)hx-!++dgJFwqWDt)X~yK3qMZ*{puX^#_$2iLkj zm>9Hfe(nlochkK`HZ^Y3SLx$?{EU6YISpp*bB-r=q@GuQ_S!YwlV`$N6{m|Qdb_^I z&AW5aLGJCE8j>wejT<}b&~Xyj5&*+uUOQ@aA?<#sqf^AryV??Q|u}d!2bUx08^DH A5C8xG literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..3ee44cb4a621cbeaca9357ed476170a0fc638a63 GIT binary patch literal 1336 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^2azeCjJ@D&HUDe;K%Ma<0OWe3iPJceJu^ zdzN*k`p^6jy^r(jpI-I0#XYZhbG25p^Q_)I$IQq+z}|{sNy+XVH(SiP3XJ>a|IJD< zy6>`oPwNIgqdonXcB@``yIx(%;G@#9orlwPd*>j(~rKsn!EY-VLPiot^P0SmsXlj zSb3y)U;XW8Gfo#+3H)bp?qc}9qfY1Ld4Wt_+2|cY{jW6EvwVKn{%7-qe_I0BmQ30+ zZFOD>uh7OkizmN+{b%^~H`|DP()kb}t+^)-w#x`v{+pV1F0Ad#mU33Ew~DF#iks&x zc)m32V8YpIog%iFlUo#D&5$>@J?3$ID??7yy(rZ^%cNT>WxH9`dCzbBb+ur5f&97E z_cFVMTRoY3N)j)v*4=x>-JsLWen*kL7Q>f(w#<8_k9NxFZ`JQHP22U6=Yz|(?* zW#w56TOXaZyQaVK?#-h-N*Sj;roEGNJnv^Ez;S+U(V9=k?iv}NH@(Jv;_R`7Tpa0J z_x{|pg4yjjd(WJnBHPz&|L!>2Y|K+XowW0qk+l@VvRQMo7FZeBT?tK=dT04~p2h-x zr*7XFKUiKB#H!C%nwb*bSim%oX+p&@Ba0O|bC=GGoS~7x@E{>wQvIXKER6+h9{*B$ zj_+JsD|ExRSn9cCqN@nwg+GBab857g-8e4QsrQcIb6HbpNXp~a6XOCoCd6^5CAdAB zJ*9X8SFkR69D3x BCzSvI literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..678dc465a5bf335e1f7083bb33b681b237bc071c GIT binary patch literal 1200 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&hzljw;a$(n}^O)$iFUKV$9ec!8JZ`(Nol zP+umwZT^Ytr{Z>D|i>ENWwQ^^Ci=P4hpN4CdFRrKNXzB&wQcb$t^oPPSoRGI7(t zqx%uY{|uQE_B@%Ee3E&s*QDELFFEah&&3ds`6|nGOZtC?a2@|Q((>n){yV!baQB-{ zn|`f&C%=?|^Lxg!#K})nQ)%$TS7J_gldGAoJAS(Svn4MkIWs<>^27qJpv(#HtYxqKXP6(= zx@D*PubmV3GD?`<$ts&AamnQBrtI$Slk(60-f*j9wEQabAo0iLixkv`D?8n zoj)<<#14Ze0!Br~t|E*{r=CtLnc1BhE!b*t%lhh$^c@|(#n1BGg3c}Z^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?y^N8;{B=-X`pWa`?OT;^T4mB&-Q72&^@>DQTYB1pIU_8X4)JIfA*sA z_;S-1Cv(JC$~UZ8FX~!lV_B{?+h)RDmwgE-HWRG+Pn$44J^XOn>T=T~-_xuk<-(L~ z-uHmCG^ys~N_hVvBCdb8iJ^wMw$ybE&%f?CR{}k-+$UpY2*tXbH^Jj>d>bU~e zXt}FrD}D$6JM|%KsnNEZD*Y$@zt8V~;>%EZZU4vA^*MQKO5R$Z^qja@*i$Wn$#4S0 z(aOC`ly0$fdMdhEz7Je+S3|TwFP?dQ7Q>f*=3CRc{d$`F@7*)At?0G?mK?V~ugN0N zJu$BIp|9yj^XZnY37^((*Er{ry|exAm*bz-Jv5zbb3h{2%|Vu#DTCQ-Lc=LXNtT4> zkfdumsWIIv+!yFEu8jM|ktF1A61dV{Q@7`L0DDu#X4ikmKdRnc#?fQ;WABAe_J=<# z+B-Yo@)zE?(jB{J-F?C#AaBBFX@BLSgIw;aip9}aVwW|&ILMJ8#_&e`zWUn2eM;A! zUr~-oomQ6c^nUfz;tL6NC4mkS(;i#q{nbu(*&e;N?3B2@w%6{x2cG{5bY-Zz*1k)h z*|&sGWf$L*zGH6o7yeCscJ1@ol@;x8UTzKWe5#ewAR<$?sEgr?uK9sWriWs@SIplh z(c-tDo`1vYs8=uFuZ_wqK5l#Tv}TE(LvOuav8xE<>ATs}r%nHEHX-W9qUe)P|1+#Q PSHW(-RwU3t{{Kw?J>51_ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f9f7ea63d4b2d667578223a433d7bc18b6a54ee6 GIT binary patch literal 1479 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!<&-(n_gJWY?IBh_;b~};_as83?&DiPb%{K zzV7{-whEpgOBEiWkGVZ_Y+5W2VN7&Q5ry_5jFI7C`EbVdM!8mfB z*tY6={@Yvb_}k^Fp8r1Qo&C863;tfKbEmU;rOck5+%ct^PyFl2KiVgALgSvA&(W(~ zyI$tC{Ox(V`*(+(aq`#F|1RG6^TGUMOFz_3*s+i2^o6fV4Yu|Ndu2K%-gecth?6NNFg%wBtX6#1CV?D_`5L>XmAI z`JEp4>^-y2;~nR>X)vEQ=@)xdWjg()?$SiDPY3dB(*HADb@g2z`J?V~pukJxyLS%= zGz{4@&3lItIFrGTua?G<92l0Huu!X zZiY1rK4cx6xiF)O_f*X5S%;Jto}bR0@~>eQ!`FI&yLt;3-HtqTWUkvo-CqfB&&B^| zkPZHM^>5}nzV_1mWvto9JC1XlW14)d_%`#bhhOFkzKojRAszBNW#fx$f;!%+mlJDl z@?CIvdyF;wNAshw9W%e|l@2j`bW7OeJ#+n9^(BdoU!M0zF&vI>ukxE9<}dW4jf4Ns zhmPLkKj&ZCb)Ro}y8_oNy*Z!s|9qQoY2Wz#XLyHOocDrDV(IES(Ua<}zQ%LD^3Um3 z*muF5Sw zQnfAE{W5Fo{y%@?Yu{A0y!~;V`O)iGsZ*z3Wxp5Pw|M=ge=h}__1+!a)v)j80)G36 z9z_hlF1pW(n5K~OsSp^n*M7`C8nyMyLm9#t08MHpIOTP15)Wz`S zJ^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#gH7S1jv9wqDQ4+nADy2W6@NN$*ZpDtmFuM+ z)}7V)BEG9muI$8Pb@?Y;AFGQ}N`j?0&a*RUeINejW8@*UY4pT|ZCBq$yqu|M!z=`ycVl(sU!AYm-`v?8sPxHb1kcSmxs2jkwDISlMoAN@ru^1l1d$ckF~ba7nF>EEYI zX4mZQS3U89t$t~0OpW_TyNy||i&sb_Cxs?%jn@>ZlbL^RQ-aRXB}LwbPqqg;h)>c~ zk?f6Zc&rc@d%i_C;oqU~iAlODJ@;+8mT!1hyJ7)f@gb|qD>a^(0=@^OE9L#>uN2*{ z-kkg8_36{+#Vb~Em+qLk%*^aef7vOgX#O?+8y^s-LsnrXyI&$6|9c=$NdUO9d{ z|1ySm=S)3SJ?|~cRi3NN`L~7fWqH+qhSpp?K@(YllM0sEyRWH#iUEq`-1~9v>w*r~ zO6k1L2~J6@5fgiNe79I9@A={Ezr}(xoOSmkq?{~ZT4%R&?To}NU9Ya{E^qsDa94F> zeuId*#rd5I0c>&`^UH2+xU^QtO{{R~29L`s6YP?IY)lSb-?Y3MyCB zp1-IsJLSi>U*`jKOnz5f;aw}!u=$@(<=L=nHqQ2)YTMc_`)_jGliz3UaM|Mh^yj|< z*plx3aCb}ERwkS^o%vtXUGwSU4;D}U6;{QmpTDVN)pwx}9R{l+zQ|o&T>o(PdA`b7 ztzQBvjdprhS4xOKpK!aD)%wuKnWihA-{L7-m0nbpQ1aK8!F_epuO%O>s-m?))Sa za=-1CK~>>(lhD`u9WZssH1mE{11cee*-F-Y@<7_|)FX)&aF5 zh2d`(n*HORag1Sh;2!VXo5!vM?&&}B_Roq%4OVN754?Q%S8?mx^q_ej0(rk}7d1uS zn7&5)eW#IwlrFnZvv=d>-&YxzHon@dzCeYdyX_|9`tmj?6yn*dM< B(I@}_ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..11a2356a622215051222e7e7c19266fb4779ab91 GIT binary patch literal 1505 zcmbW!c{mhk90%}s4s$SLO@_uDgBk0nK_%tBl5H7nj-Iw+$(3tdLpfV2B?gtIO*C$? zE1_|>)Yx)o+?1HmW*Lgn%Iv6pcAsbe+THK(dEbBD-}8HZpXU`03ts}ML$>y|00IR7 zA}Syp16BZqKp+ufC?pbzMx(?rcq~Rj0wcFg`U||0yo$1tyrSX`bv@D!H65a&B6+Wt z&Mu0fp`i+CpNWzF0X+jl{jDJoG#ZVOz!0!lg1)Mvs{VhDuod7?KoeNQAZh@LgTQbQ zVLMO}?I{NN6!2#tP#9bcfkdIjB}5H1QUD5p!Ju%Mm>3)`>W&q?12|4>n<~WuAx-r_ zs)ge96B+p^qGi=18RxzwbpuaY5?Wk#J3&rfLz6_-`qFUsp1nr__mV_H{ebZJ03eSx^&q9`vcGwfO9 zz2F5UQ+3Kb)7mA8w2~X`rQac#lcdWTb%8VVD9gqsu65Gj>AK_)FQPc7*?wBCE0BJF z%!a8Qy>rGxkzyDeP{3(&@Y$zBKh9rw)%GrNue*CzSEK~kUT8~kf zQlC3&V&C27hwWj`70^1(TR%71(Nd>!W$SH#xf>(*Rv`j`*5^iKVjuikpD zHFjcnx;KLit2unyH^aiCcs>|Td?q;>^HsNKRvK76 z3aI7^RC>^cjSP>+?hDKjg387m@&*#?SjP=_(Ap`#K;-t|#v0Rjte3o7j7)dD|{O%Qw;`q<|a$0GJ~aitvvB|Tclji&<{@VYC-vt z!CJpnQ}3E;RjQANEIyaRn@O*rjpp77EiiWXm&)0h(AhB&5)J=o6BuA>#_nAy7Wh9I zI((l2>B_)ry^XRT+C4iIlgwLqK7KH$GgGmO6iRyI3+okvDXpc-YXxp&wKpVLrB+fN z8Y7xAdbEQU16PedxN4LLTAW(~i`Jf{;W>oFc5}_J1iYj{w>IR;YzbRE{Av19!323z zA^rE6_+;Rgxon>@5_FSulIav*Xva32y(tYgw#EU*5bG W|00}fj+l$}5rXDqJk?x9IPwP~#*rfc literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..cba363e2319dbf504ad2e4a9a8483c173c36f12d GIT binary patch literal 1138 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#L*tkEB3aWW_*~D<&G_OtM`(>2cT}{`sHb>&p8X`T6JnGpu!xb&k2=;XFIr_pwB32ixQOYmMUHyl(Q@cF|Hr zC}LiL#rv4&xA>~-N|o;N{Ab{Q?jY-RC(7*X1?NvZnlBsQHouJ)o2T+y=n*56%;X7+ zZF=OYzN}+^>&!mEUaDZ1giQaL0QN;kA8XH0<`h}cVXb-m>!LlM-zxlPDF63M{;?}V z@}$KLuYa!p5hS$#^F_~J>wg4uTRs>5&v2iqAztR^{qIK^?6v=X{d4_~#tHjl`)B=U zXf-dH|K;|-A0j&^|C)(0*XQ;jCD#G~xCID|S*UbO` literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5224e9ee74246eb1ba4ccac7631888660da8a7e9 GIT binary patch literal 1127 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#Ly5e=Rt~+ek{umhD>n!&maaAQ+xDZeHoxq8 zpl{x$U2oGk_8Xk5{F8mU^;TbN{riRgOx|zPU)BFZ;6H;D!`JseqN4Wy`Frp`L*2E0 z2-_LN-qZfJS-ujie1GnLhK&0A-v3M(Unf7BwxRy%EB)VJw(S3~rL^|WUHAT9Pqa_g z-R^(%pW*oQKbdv6``Z6A$i;tLz#nZdQW{f#{8akCoofyL1YZ65pTR5s_m{0t{xjqs zcvb&?E6@e;+vmTR|NXZ9Sc5J9KVi+DNvCQSecCzk#<87gw!Wgz>+`W<@oOGFqorqtIwe|7(%mn!p*bM+769|myTw&8C6&yee?KkfdV z9diFN7I4cI9KWA`_CLd+t_ByN*nfuoi@F$=Mcr4{*8lt6Bks!LW_fP#+xBpdo{%5G?6$xPKT>Jab{qHxI{&oeL dHjNh;0JAg}Fuw)5^7Fg;_nTcs0@(lG1OSb1^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#L*$<7>cVW7v!VX866{^$4jGyfTSMFN;>e(ZmK y*Z)z*Zx>s;bNgp5>SD0F$YKBS&HkB--wHgoPxHUlrNPMaVgAoD5NiSd|C;~{I==e= literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-10-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-10-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..444a13894e276e402e361b8e89b39e54c3b95cff GIT binary patch literal 1287 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@*$T^|Lm+g}R?BFJgRbfBnOnvtE*K-%mVk zkjB{jyZ@8+1YxfwZ_6cLw<)cYP5S06F)M7UK+P&QhVKso*o)dcr@xyl&C_OaQe=aB zzQ}@&{~0`c1Q=OTC7!>$Uj95Hs%*R9_9o7y^#+r6J5B7Xc)mC1(6@h?Y#AGsL{FQ$ zz1n$x$MMGwlD7`E?F|pnk}W7QJhAf6Oto3p9wr-2?VmpJQ}KoV^Cq+Ad^BAdv+qg5 z4TT2wDqo{Yu}dke4ndNR>=riiFMnQOn>hW9n|F(~$1OiciQ}fpL38zVb=G}no8(>U z>GYrByvKirvYTH{1k_8N2{TGRlVm?NX4}>_U%NlY1%+LbXBWt9nm=*B@`isVjLl4m z%b7~KR27Tv?pU-{$b;+Y6|rA|4ssPS&llI<*Z*g7_enkHe}?_J|4bfp^FOfo&#>;x zeeG+C{~79EFq;2b2$nKc2{&@M*<~Z#w^8_SW|M;do&Jw=E=hd+Bk<2yis5$qk;$qH z+8*8W?2|A|eb9VaZfdpf-di6zo$EfGsbHD372tCK~{C@sr(e}l!FP>g^d)v-Z zsT;F4mTcg7hzdma)>bbB|>)nZ0 z9;siHS1j7aX=0o7_w1t=(^sUa&a7Gg_?)!d?MCGrT^h{Cc`nM-FJAsELtnz;w~hPf zMO_R%r{;ftEB@L`CHT@kxms6|0LC4C6C8hrbU(9W=(;0(uI!>KgU5z*cZF{M`|+RQ yb;yR~$kYPaAK(AeCX(#IMhZu=B=aqVGzmj1I#V^M?s|C<1;pBhL2 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..490b441735f61b05e2c91158dcd528fe0cc14f93 GIT binary patch literal 1265 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{c?gf7^R{tNu*gabz>U>p#(dTW51sPSW~y z?M$59^%}=om5VpcUPfCMi7?(MzAbwFr98)1pEcX3Py1NEsbS-v9}9TiayxCE8n`s* z<{RIt?QL6LM`wI@Wy$PYo@XER{CHd63^BusqYbZC*sqP>bTMUT?gIb9*Uv1q{{hXb z&&s^$y;W~}^4XsIkIdUIF1;vpPH5q~nesbyeyGg(6!D*-w<>$H(<-ld z3lexfWly>0|E>K9uh^Ld{~27`yqDX@iT?~>+fpZTNv%nLOXjvsn-qFXCN>pVacNh& ziEwE!pE!QRpD#1zr?2j5{)gN9xqr^#T34rYH~vK8y)RbBEnRqj>(j}n zrhRf-wO{YyX(@)==c-bIY9IFTUt5*A$T7=h_xAK3yRNPb*rT`Vwl_~&gTN!lQ_tCL zq#kYQUb5?>eMjjw_EW9XF4-^QEBtXivQXjj+jr}pE007?=DtFzs=Zt`6;&VUx5!)upk3|Nl(@l`aw` literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..34da9b02ecf24d0e97c75503a29ffc7fd836f162 GIT binary patch literal 1309 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}pLzQ3n|Y1BS;UAG)j<{T4NFJ=-c<_33_$ zS=a^6DGJGxds04muIqA-Se%~ofahb3?XiW~W^2n;jMAK(PK1`{9(Qz*+I8jPtE$|u zlMiaET$swf;BHUz&qw>}_H-_uI<<|%LTT^vw-b(9@>Z-`Qv8f3`RjUvk3Ir=Yprj4 zO*(dV!pY0FM;VIV9$fGCBmEI$ZcWM0`vP}(=gjN9aec1mwI!S8zI}Iba+&9W<1rW5 zm;N|>I9#}*E%MES#%ZBEKP{|($^AR<&m=r>aYW{>zRCHeg`9omfzLR-*>o(z2fNQ^w~l(%sr}wI?K&&Oa65V!Y_B~vGBbycnt_P_kh%t&}^+O%Nh ze7h}wm875V4ai}Neq))+zJ3{RY1yyP1F2J=e3~r7#HPXAapmoEzI`cqD-ZDZbRF~O z&aRqrUSQi#4%U>!t@Y<0#%-Q!sdnR&&Sl2AJDKHM3*(GFZd=-VHfziDD7S z7v|Y}F|5x1uoltx?BaG^d2&m?_3`9WATA~g56T33-`};V{ElhzkB;v+Mefu zSM*CYd#-OUj@kcxX%WzmT&H*X8;M0RyjgE&{yMwp&}E+uZSoJ@d7gi?6bYZ?Z?h$&Q4xJ6H%>UaEkwKnXV z^t0X;pqF>fovqS*sY`=d?4g4?)BMFRF2A1Db@R4O#`D!4e)bL-iyEvm>X=?$=X`cA WTimV8-h5KmD!Z917lD@lzX<>+{2K}Y literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6a8a13a92ccecdf796e2339ece3bd396e6ee423d GIT binary patch literal 1258 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^ikL_2*yzXSlDnHqt*i_nFOPPnDKLyBNk3 zmVdPt-8pvn>BgSlPcHAdR4K;ce&GV!-M*datbdG7T%OUK=*XQGWU1xh+n+&*8M*1<3bM~7Q9}5d`FSFrv14s$Gc4@-QY6vcbJ>Od@IL9 zpC|k9iOZ$dvm<{d=N2$(Rh2xpZ_BnnBFDJ*;+p>qTh2c6WD!=Ja>#4bF~4i-pG8l- zaQpS`04 zgRh(Tw#f=FpXEIGe$HKXwd&e$M|MkCFt4p~vR_Uf1J+^I+3#NQHhQJkge$C>)L zsp<>+$F;WZ2Y-nz^Y+fzaH_sff5N|{2AgEB&Acf*?b%}LEP=7l7C-3KyY%8n>62{_ z1Z5_vxxdm_z(23`=@0gtJoYW6M&7GV9ATSUTeO60@xIT$H`m`+o3Qt`{7&;H8O;7^ ztN%0D&X@1iI=ph8%lp^&HhaZ=p7Bh+HMZY(SK+@ce>vqJI|yz6w&?4m;4h}OQ^Y^} zwMEZYQ!R+tUEK34H2+O@Q{@i%?>GK4NF~1%TJY?J@Cym~*A8-RdL>)jxm6gfXL8&< z_xQ@crY$)(nJXidqi)4-xnLx?%}Hi~O^V#2Jri#Du>U%L_V|x$^SU?t?KD2EY^l9r zojcG{*(=|f-1#;(d7Ku@nUt|+>eZ4@3;r&2tCrGWZpdEwpW*q!Wq()Y|9o*J(1FL? zX#V4@{Q2tN&p&q+Va&Q@zH92@&t4CU=WQ+jt?}4CGynJV{|xJ0MHpmd9?ZA-_%`6= Ya)~ydCI3VM9R$1GY~{Lu;r0I}0NrsA0ssI2 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..88b80b17f77950a0f0ad1d4b66246c4d0ede7449 GIT binary patch literal 1390 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^1S?x5f#H<&zd)kaNw*44=O3g0D(>tFqIM z)&_+qbLQ2bH<@*HkJao`=A+~>6;{iyZ+|s9NC#E) zJ*qYfZDnb1R5-!>Va<&x3OXtGj!#SeSFxhy=DT{v{^xEVmaD9gkD0}=@wvu>)P2n+ z_YLMhl=oZyWl5ycjK`Mt&p)g*3aD8TQKiceR^9$P>F~E;rBf~`#tBbk4>o?4Sl1@& zbSq$A(OFIghJgGS{yg5|O*<#Wo1dB}$256i%CWL}^*&dB9$9Vtv*1LqWti;oz+VCE zfxLHj^i)<&k*>dWXZfe2q9-OATK=}4f2fOLWo5R)#z~>KeB$>g$Q4-qo4MxG+lFL& z^W-R@tg1{W-dhcB{45_Mr_EOqJ)zUG(B4mjdATop;H*>9U$@M9CmCQqceBbjoBo2# z51G?GFZ{G#q3KEK_ML3T{}~vQC)CS?hkp2cree>I1v4x;cBFDbVb&;C%3bHh3pdj`6~RWo85vh_8osR zm>Z+7bL8Hbw25hn;Kct7*VZjR^v|m8vVXhpE|2BWrJrubT5?bBD}4F-WthI5^f^^= ztI{vwhJv3~|5@@+S>d{T<HQ2m;dy0SNIa}5|$C6E6@3*tX*s&)!*e?|cU~8LbdS=&x zKJK>0*yu90@&qB{w?|8*>UNhei+vMbGNoR|x1nxPmj?5`OMi;>Pm2ECG1;baVnMy& zrCmRB-de1JI#V*OI)!hH#kH(?~%hl_-?`1rS-pd?Rp&StVHeGeGz5joP@W(Md z_mr&KJGW%tTpO6)<;b$oFU%#mul-fVq6X`mf7BPo_+0W_c6i6vTU`Aoq<{w5|Gx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!|RgU)2E%Cey;6tPfnl1k$~ZctgF@wuoUg}Yitla8(P3M*>7&(vSdCrn=C)y!O6CZo+%H}`e= z(Ob^9v%v;zYh|&k$Hb--=7O?rkC&5u5t*`zhFhB_=Wf~fVA~}bo?jp8m)bs_6kyyMw{Ppr+`4Jg<#KL*`ZnRlm*YPk zZBw3i>nZcC(>o(l*bbO5On7q4ynjYP#;S00;oE0IlU3xZ9(6H%jXvMD&8V_}*e68RCbjn7e2eVLdFuZeQa;ozUbybI z*T>J2LfpSq(^MFBY>NNA{Ldhzv4DqPvSO~Oua~dYv5UDq?!qw>JLPXAFIdM{!DGID zMizhdq0i8AZ*xE?M!Jc-S!=RZS~#sUt(JN;8{@UImKbddjl F699Q(GD83W literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..b6f9bb3bc55e511a562ac70c832be77413ecbe7c GIT binary patch literal 1354 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^4u4cfZ?gCNl5N1?HPnoM^WMq2&W?%Yar+CrEzIatkf;*3|cKQXLM-4WoAG59b z)!y~^^4leHadQQnjE{XjU1!VwFlNEN_On~3zj>O{*-&tP!XLiMHLG8r{F;5c`($L# zXP--E{xNgrgeH6vo+i_H=K|Z4vX7@%oR$%DtGAiNXzi6ex%u|%P}R0qhrUExzrDwJ zOUB^f%b?8b-_6VmW1J%6Y^=6bKAyK#=JJ1rjF^+fMK`A2*l~R2xrzlGdO3>5!sA6o@SBo=XZ~k$CnG6n*1JFGFv?V zxHfEq7jCS8=mp@c^C4kNAyh>!m9oBONRsG4Xfzuw^9Ak1?P}o!Q^>4-k-qU~W zw4a8}5J-L^YVlWl{iV08|EBZbj99VVVV%lj-76EjG#2pkTD|giH{2!}-KV|BbMaN( zNtVf{rrbK%=B#JQ66nfMdA-X{#yxj;z{PYA#csV1Ui_#3y)K@=@XzbUR^6O8VXs^# zWw%dgSn`mKzeZ-xvn~xL5B+%#>{FT-*vz`I)pOE?*n`?G@XG(0PvJBE&u=k literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e2bbc63401fc800c38a470e3066afd5e0ea90d57 GIT binary patch literal 1129 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@~t_wpQE~jOjuOr8!lTIR0>~JTfu)eeQYL z!oV{&ceT`%^;ud3-yHrE@~<@hZJT#tUa)racIG+1eqUgl;QO+9>j6vYcK;(m3k}wE z2{fwnHqWz{S}2?Q~>Cm=hCxrDWHs1UPH5r0-Z-;ga8EHb1$Gp+zoh=@o@-6^HAsE*P2_ z@x5Ph)>WnYacYXPE!Vs+jA!rMHab(ldEQoI^?RL+r!f-_HyOGzKAD z;%EQbKd<>RCraMXPgNq}Kf_&%w=d5tt+^S?-gc|zo#96JUwrjbgQmFV78mB6J+zVe z3gbUlhPW+L&#rFkEjSoDqi6c_Pp`X5wkzFiQOgukIi1&&&VE_6Z@Q4X+1=k0tMn?^ zU%vNLJ#1{OEvk@fVZxYm&sAl2;EvcE_b)X6aVaxhZKu+t$zCdY&Q(mlB;jGZ)}dV- zcTO%>dwgor7RGp0f0nL^G4qx!vduhIxq!)AJM(_cM7HGnDuKbwM@1N;v`x2cpBZ{u z&za#s;g4%&+qW)n%c*(Kq5eU&eyKOZVbraP m`>9$&Rn7B1e_7PU(7&90lJ(_=pPRdY3XVIviUhF#zX<@c-LZ}U literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..07d5a48c8c3e98db79e45f6cea4587f2e3df9e85 GIT binary patch literal 1521 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{J%a9$nLT)^){Y=Ti@b{|r_~_RTq85V<%+ zc|`!b>8tJWe0rt2Zuv^DPh37T`)Yyb^KJaglV=_K=-y_dxFBP?m#L-t)kE@H7SDK& z{?21a;9_{NAb7((H{bk(-ipFEKS>UA4PNI%KV5w zyeu>*eRIovLq)l$jm*oc=2g57(c5xg$bGHv%3F~!$Bk1u%TnI{ zsp2}lt?d%`VVyw#YK7d>dvc{W&zVzH@AYDdozh1}rgsl7-QOXv)%ec(p9$ms)JL^) z=l!^{6?R@#=JbR?)lY2jwsm$TowDNBM@8?|_%&qwyacb9| z%zj(`=AyaBMJJ`-3|9XvSJpV>Jl);+X4+k*L#wTh?e?7fqtE`(&i(ASXYX}&Y5$&8 zF7u0Va+I~~&37Ksktfc%$1jg!P_8@bb$wYy+NF@~TLu3!tm(TVXKiwR@_&Xtg+H&) zz12;b_ejId+~cA9qwMP@f2;j2%s8sM+t>Ea(?n**FpC2{LiG>S8mwfktfz1J`B>Ld z$FHjN@vKudm75|DmbM90#Qa(Ox+he7 zHm`eNn#Qqv>N1^mHUHQeEcg09Vw=4zdh7c3k`sLu6U zlRf3*bs0nCU1h=-zuLz=@6tW*ekJXtUwl^AF_f;ei|38I>yadOmaS@~Wd6Uc45<-6 z{Db#z>3b&H;qq8}mupP_vW&Gq>g2sPEIPa9&asdL_4&PvFN*}QSKGJMsD8Nbls)aT z>h3!`R6ELRzNz*x{NnnUX?A)=+&yjD_k$tE6MMmpwlbKA(MO zsE+;A>{n-1_iaymb9>S)jS1`5g%{VQ_5#h#ToUQ9?pBe_X(i|92Q~5^*oy8w_~mV2 zOy;aLLd$P$&5YQ7*TXYZzCTK10b7<|$qkn4)5V3qar8I-n05GiP0%j28JmBy=rlj| l*kDw9<9T^uU&YUHhQANUI=tbKskhQt)L{SrCIDgzfl>ef literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ea55021c974b451ef66abbc04bfe57ba4213d540 GIT binary patch literal 1555 zcmbW!c{tR090&04Z+>$RF|Hir7IHn!7)Px$cUYtxgCWu(H(RLWD21Mc5^9BUBy8(i z$97=EM)FY3$+*dpCD$ZnNA0uwJp0$~zCX|R`_K3De4fwi`ECzvj{^Qf=2qqaLI419 z3v9E13BaP!7&Hot!C-JWES^V*mxn;$5fc#P6Ot5{mXZ`Fkz^D!lw{=8i(CA~Gue@|A?E*AkP`(r?|)xRaTcozEyJEGm9b^02b1y5^VK zy84D@X3O)|w%=Z~_q=}7+t)uZI5ajsF*!9o^KN!-`NPWU+WH3P>Mh;!Tn6OkxcGFrgc0dp)wP>vFd6*`!jSJ8x%*F3x=>>b*T7g3;& z?OEQTeU<$?Sls`T{RR8mH3WEIi2Hdk5g3BzXTA+jbL{I@NH-ZdMGON{Z`uI6!-wj` z{6e$53=iu1_*ojK3VAsq=@1xP)R-54u?|2G?mrIdPj{PV? zb!qL*9`*7Wv`|{snlg~joNIW_E(oQKpS}5MuO45AuzEbbs!ZGOwN&@Qh>>JG=MlYs zksNkm;Yl9mxX%}a3j4xH^#FTV%{u~k#LL`UW!NqaHxEfXIZKeF0L|%-2|8OM1lts(*n`IPl0ZG%62Ek+z4iLFtCqPEj?#9^KhZ{2-S@k+c#-_+aWP79 z?c=iqrUWJadMrC>wF`aPCPyOn>8r&aL0Oro)z4%z5Zw0^6}kRIFV5sI zjU=#JrTL8m!qd7Y36|4Gyr5_|_z~WaR!}lFf^oY&tUtx%@hy~%&e{f$?a%#zdfzcv zrt;GMZ}QSOfs-mTc=CvhILI&rvkkVt($Dm_wL84@3pU7EyBj&dQs1Y3KS9l_HbqoN zBg_92+&0na&1oK=n{Yp^SfA$N;pAeXgD=x;oIO(QiJ6aDt*fXEle*MzshzuJ=h+-1 zS#FRQ+`MA{IAbbn5Y`NAl4{GHsWB-y6_xQ!=S~sJ%1~Fm7XQp?mR=k%`d-QUinDwD zjdi1=oegkIQ^@?*yFRU~$r?9(m9gql--&>HShHCvIoH+|xR0 zhrty0B!RI&b@qHqk6Wjz<%Q3A_h!I7z8QLKDTn6a*%nH1FSB>er!hq(iMxXg9n(48 zW*|JidB`9+ASf&{XnoMzm}J(d3+GNhm@`nS^WE2&k8SWzxuM@hQ_kHLZJp)&$_=aw zYo`~w&!=??GnmBd0-YL>n~<3hG~=9oy^7vm32bcaiECvYwK>ycUP+E(SeKQUi^};i Wl;d^viS5*4`5U}K4o1@3gMR@0*PxC7 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..23ba9798afee80e07c4e98e3bf2fa00045856a61 GIT binary patch literal 1340 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!+|~5zDnDMym<7?W!v_SG|?QU2W*yKA9p>| z`_jGg>&>@0YoE+E5?W+>{#2#BA8+~esPJ}^+Pvz!*+I4L0n^IrH{RrFRr!+qNvfFk??HqfS95Ihrysf%X-?-C^rW$D6HJ4#Mp2x6&-}Z{qbsOh3qI-YG{)jYdRqv_aWW|3V z?CktQ#|66AmOZ=gz2$W$-}A&b`?jupBrg}8DHYT1bouC>j8i^uinWV>aec1-&mix) z(l2edv9IDk^`Z=>*uaw4ym7BC`xadbv{RZC#B44z$+|f7>2*_!k}ZAbKA8xfJF}6A z@gPI`{iVg?!O<~yPMXiw&^t1*=ZZtr^Y;8sF6$V@D+nhQ}O+K4YvBf3zlp+oiopK zyQj@E|NVO#q&vS!9{6hdtZLor)y~xgm)#Wu75~20JovnM*Cy$ZtBFOuDk~1JQ0NKz z&ye$KU$9%A>ZjYQCLjEx!Ib<+dYe;^=#;PQ6SBHvT;4?7a-IBgqTlb@3t!|vFuH%6 zdg4|1zn>xu2Tj=5uBo57yz<)OwOi_E{%4Sif6IA84kWkiRjGwF<9DV85!;>TbgukU z|C6ya*6pdA=oS8)KnKC@*Aq|7Tv@+G@A#kX`RBSc811*{ZJw;T__y1O`qTcGx-=N9 zT2H?E&#;u~SDlgLuSQo9hUEeCZQcKV(y(ed^5=;B4~|7$42gS-inrFkpXe$Q!2bUx E0KUvMfB*mh literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6265b050c1509a4f85b6ee3d363d5dd99a436c83 GIT binary patch literal 1020 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^hpTSN}d~bGsvP>c`%5;`ZkjGClrRtNWip z@tbKV!&uRV{z?7u_^YgzFd3E`Z&woyK+&};C{1ZXaFaI;#{L{)H*}QlC ztBkw({Xf1k{Pkt~6=ca(&*=H>`n!&LMhCXn^*_JM&s?x||DWIeXD&%!JN|3O$A2%D znD_Yq+5z;=L@`~NEHmUXcLjhhGb+kK@j2LEl_zYG8SDZ+j2{2l+_PXb*T^l#7p z-T9xP2B=K_(^>oX6J13Z_UD|B0EU~${7m+Lk?ugri>?ezFPP7Gg4Eev+WDU$SpM%P VjYSP2clG~#><6j@8dU%PCIDbTqK^Oo literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..915d2fc0becfce696666a32dba7d2c554f2bcb01 GIT binary patch literal 1062 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$;rs*WYaXS0a*p?VA0$1-IqwA3y%jAiMO& z{LdeM1+W~HnE&Ie|L@oT8PI`#_RPYntb8cI+>c ze;j(vqVPY1Jnz@remD95{4xLg*+Go$gW`9B}o zzhCS=GxtA(4g23O8Nc(_0QKHin*Mgde}>Z%{~6v-bYPrz1;}QV|Df#lJBI&G&-b6b z7Wdm^4vYW&q{;hg-o_(#T^fuwr~Q9E02<{bb>ovl4F9)YjlFIUj*I{OpygP^&SdfT zU!Vhrl-&L_`I*ZrCjec_f95|!uY7Lt$&m9Gf?HqnKlDEl!0fZ_`M=nZI<>C)+qZwO z{LfI+rNOjvSMYxZo#1~zMdoJ)Ujn&kmc|0s-(LS2&V!xj7ro>^!#u&qe=oX}iUc}ve*04o@t>)& E0I3bMegFUf literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4333e2b5f847844c6118f4d99a1634792a91789a GIT binary patch literal 1033 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^aCM@}J)4{_KkJ?Emq7+n=LhH`)Dd|1-Rw z6|curzkc$+pCXL*@A;La^Dj+*{-0r<+5I1H9iK)&{%5Ch{`VG%we5elPxvRoXs7aC zbo)y$n}f%v<{tmOHO4*rUS_?bm(cA!m;O05sQ-PRvhDaohtJ19-0J`RY{AX!{;!wo zoci_7%fDXsrW*O2I2Et z&;O~`e^!62e@oQ&?fz%}GxW;m*S|adlgoZf1W!&s&}$5B)$u^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^cb4Wm`A=S;>5-`S{J_7rI)O&j0gu{+A^; zGygN#ru}JUh`d`=bvn;p@Sn)e9rmAY-T(7XG=kf~{+ds{R{1aa@6Y~fFy((~sF-#C zv;0Fxa~I*~j_=R^XNX#8pM3DJ@6WEhT;!i#D zlGOj%CjMDDKYva-_phM(j2Ic2JUs+l!cn literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-11-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-11-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5a3bfe39f526415044937d22f12ec029258948a7 GIT binary patch literal 1050 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^b^$OFu9A&#015W+5dhm zo4#3AEdTfG{|sv#gdV-NG&lUua6jadp5yu3%D>u{z29{F*UtL)tGI7WJR-#ZLzY2V zy7}5y`}d1IqUwMCjsN}PQrh`{75o2w_uO@c|EunQhT2&SRe9>)r~i;UGOJGU_@5S; ze{2gr>l*)OkURcy!lmxnp*h_l$`^LpUu#f3BLDfX`rl6(%er@1M;`q-OM@xj&ZuHr z|G%G0KR;%ko$;UH{jC1qPOp1}k1y5Szgt-{*@6GJSK0QC`U9H27cBlWxb^@0v7+_s z1(rYer!swefAz;V6Gn|)34FIRKK^Hj`Oom{%KYra{|tIS-u?amwi>@J-vjjL!T$^? zm+fwrPM-VomlVV7x5fOs^CkW>Y>WS!m4E9UyOIF^79g|#ZTNEg*Y?Vu&+j!i0~1XK zlmE86{15&!oT&esrKNB5ebd?h3^hPE7uH(*)6?Yrd*H>hE)B;0`8$r8&q^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{^W^*OMQfC=$Q5Tl43JiYpCAlJ=Z-{g@+Ya5Gy`wp%7VF}ZwI{He6iUPb%TD7*W? z4zj%Sgsxe9p2j@O`{tvbBeEMmKWRMq_}1p-`J0cW?3@*3zmrM$Pg}O=pUBj_=cg~f z+s4PeB}Mq>1-876Yt;5WvbA=K_FlnKp7bi&D(6lY-yNPW=W4a{gQvSR2WIB4OEy)^e&yGyE)a&<1 z;-Uj%L;~ZL&vDu;vzB$+G|FYXi^=U-sIuYP*VWS>$4mK4zUObGJYk_q{>;vA3-}#A z=q}k@k@x9iOy#ZC(0hSCTrR5E%|u-(v~+{Zmu=4 zH9B@*BeAnwz(1zG(=^XkH{kuw8Ixc5WiT_{_P89!koV^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!yA+T3{vOU-t**L(8nQA(o=l>%2nOs;J&M# zJ9cX;%V?%qnl4`cBkH*K-21*ex1`p8J79lq#cMms9lP?as@Znmy03Lq>EpY~1>9ku z6)sN-%QIv0EsWFJ_q%RduCA(vcl({!TRoolN8Otr87aEuuNtTRy6I0+o0qs0el~aX zy=*6wRet_?mhsYE^E~AD)YR{(kYCGCV0P#wWB9IVMd4|ezdL+k+WuudXSUSr)vBvi z(tkYt>Hgz-Wciv3{)5WNe){XD|BJl+@8{=t_e<*yW9l}4oE)*2m#;r#R*HJVgUU(s zkM!^#2w;zz$8fQv!tVB?*dUXR;;nbw+P|J$RlZ+jkLd!ZYx^WF@m}U*X|-9g`9H%# z^Ote%mDSZNW2C!J>glD~rp)Y?zqUXwul}llZN&nAQL_vO8diYV21n{2DprpmQ{ zhWgh#`M+O*a8 zWyVp@@V8y>pMSWwR`q17?gqwV|2XWOqrTbmtzG0;xY}p8yNYn*&kO7=(e*iTu{vhi z#U@AotmulEe`v4z;rYBZ-W6iCaqq0T6F-X_+Wh$bhCgS^``2VjiMa7f`@84OKJ_;K zqv`o9t8I%{P11X+E1xmFMZUfMScC4#)it&kXGGk|5({4?7v=Am`y~1AW1#$;C;v)y k%F-OT?HIo->SE}6^yt*JWZ^?+4)42AKXXx+2J`=$0OnFc>i_@% literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8e2f8abc309d1e156ad312fd59ef0b5d9a92d93a GIT binary patch literal 1059 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^h-rLiJZq{xDV3Dg3w0=Rd=KU#sfEe^dEi zd+n+?ako;=ws8SF{|3HoZ@=ng`b?Af&(QDupP_b^K|KC|xh9ag@ z#eckkP7OXb*SKD)uH<1c!%LR>?`QRIE1&ZLnsA?~fpPIUH#N2Zi%SP z=kR~GnwNlO`?n`g?EQ;(jM RG!`}Rw%_W~Sit}PCIGHftq%YI literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7a8a27643142ff7ea7e115d31d92f59ff7744e8d GIT binary patch literal 1283 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^iVm&)&Of|Gvv{rLW}AK#_jeb#3{gFM^oF z56w#Y-Kv3lb`{49{QNt!?Xc z>z(NKJzLGJ4Eif8JI`U^DbpD&5&Keh75y~DoOYz#|RWzO@CyPZ4zOn;jezoq%PT)Fx_#=!suO%{#eXvv@Z09I-aA%s%jR|e`*rp+R~2V` zyzP-Z?E)veb>aM{F`u)p>t1{KpW*$Y%timo9(dfTzQFc%S7z_jU7L0UNlR|;Na$ZJ zr}e}jLuY${tZ`7Ls!MdHr$ch>ok^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!<&a6ea}tTy8UCi-=r&(TX(gVyWDU8A%AF> z(5}4gDe}2nzpgH4u#kU{J$u{7v$Nf<{kpnICH-kRbCLY2S&vF}^Df;FHLsKD%e6H+ z6(!jxKaWFp$6E&}Im1ge^2su*b1QYsZ&>HP?Vn}*j{okT*Damz7#z;5>N0FH^1pI* z+Nbxjw=~7ioQsxu^1EwksmMi_BTUC-L?uNS%ijwAXAqEF^VZAs?z7`_jGmM~ssFla zPf)xOqYBUBi>|ttJ*GVi@4OoPOyyUJ3Byx)y=*5l-hA#{mc|Y5Y>)fd%~-Q#@)MTg z_hGv4bsxKRJ#y=@=IyaOT=M+O0`A{;>cwmuL_(4--k-8N$hJZxfOU4Q>sIZQc^fHsoUGHKA!UDW^aGZhYY4$M^-pk zKK{LY)}2dVLa#Ci+`oNX|GR3^+W!pK*HonW{CVB;CGmu5POgIB`Gq2k)j=P&EnGTT z_2|NBg4ZJW+#kRE84`9+F1F}gM9w@;wUX3NQNEK(-tfmCTK{sN%GHufqG?7)?4QnA zUU2;SinZpm5AXWSHcxq3+~j{-`9$W&`#=4S?i1K#)E%dEtMynS}V!e zc|d(z#o74lUp_C%{w~&Uh^K=6oCrV6y z;c@VfcHFT)r+zbNs@E>p%2?E3nz-}c@5s8Gud-U#<9I~^*o_~R2*%yAV-#AgDfjxs ls^}9Ufeun(a%R^|tn)YCj6Ex3-TgNFz{y2j8qEK10sxrH3P}I} literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1d40d285f73e01c6d04cf41ada54605782ea8d8e GIT binary patch literal 1411 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=nR9mv&5SPT_gBX2~R%hZkqc)QjYV{F}Ny z^FeJ^b-t0H%)}GrY>|`apSb4wb;D(Sxl5lOxLV0r%_;nGf$i+{PSfg8j_KSs$^RnH zEZq3>+Slp*lf;-_`*fHWa~jS+Ju$BC@~!q8+fSVRcar^Q$b>tlk7p##vurAIP7%;x zzNYghcR{@8_P4>ePE_1Bsg$2_R`q?GjqN(~`9e`A3$LHsGDZ3Mof7+w^`=%KoAsC~ zn=cgizYe^yWL9NK`jnM9|2|B+`Q^QXxaoVAJ3op(o#|Y@W7E#r$wIRu`HD}zyuW_q z@~msh{uh#}ixtyqtl$4$Jn_=5TBg{nPrBQLmp*Zpewb;_{O^>t0b92EH_rmKR9{;?qySgIk!5!n7>3vB>K@X;#e^mLe^vmm8HqL4a zhp)P2%{|*X^^2SK?2M(sH!svrbdWdHZ!XpJ+GBKk=dohxqWw$rGH1ChUw$g?)twEA zZ52Q5r&i5d`Qe#(vf1RKYoGXBiiF%B+;x8)^W@WOE0!kPurqri4@{P=>#;Cl^t#58 zDjCU~yn=b+SJ6egYJ_<=xkyxhT`l%{adys9l~3!cdEV6j+Z$~awlJw&K|GLe|Dngf zq!>>BXK0Dh=3KKbPBVPsBu9BS(Y5K1?u)!oQ2n&_4OfB9e}+BooBLk}MaLgB{^{D~ zea~DvqE2)HUvS<7_k|01x%0cKj1Tc1F`wXlmnHGQFM*6TnkKSZy{p4`N#|12MZCx5noH=_M_eN{K%Tg98 z7c?nS+GTK9o2U6lpesYsuI-2C>izA$X}D>|=N9P+^Oxrz+VRuWH~Uc4#LLfjbiED! zA+NLJn>q_nZE2M6yXlX9mwD!JdCJG$u&{r#;rW+kcVCK2#rWH9JuvGoTa@L$55Ejv c|LD?Kz_I2%>)lmn<(>xLY*^H#!TkRw08b=Vi2wiq literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..560bf88e6517148d8487e5a69ce591cf86cb3dde GIT binary patch literal 1301 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{f!D*(Rv&D4q21c814s*7{>B4x7)|pR#Lv z=Y!x+9PRsL-Majjk>2{ejJMB1PG$0F8E?%uwQ6D2zj&0DPgB0KK= z!37(p`^{aHP{h){{9?P(&ile@o4-|D53gJ*(7WNJa-PKNhP%JNE?__ZP&eOohG%i2 z;?|6V-W~fYP8?@1czJwnR`eZ>UPqhcwWW1jKPE1bWjl80-;=||EKcI-lFof>9xsn+ zFWUQIert`VcM3OJGj%-q)6f2SUCod9h&Jcvx1}o`p7Njk6~Jy? zCC1s5duPexmw|f6B;6igxH@0ZxiC}5u_OG>!UJ+!J$SenX6QNmtXDfKDq&M<62QJ? zP5b^lZS|vO7w`S3dSxzOz{&VU;XlK#7mFG!{FyS$sy4mqEJzVPto3H9w7lktgR=Ze z+uxP!bw14dZMCfHBg@|x4TI_yFI?2caP87Rtt>Ma_f^sEWzEeh@w@9k*e|V0ZCjZB z$W~D=>UQm(=67cn7yQ}mD#G|=zsMG8TdQx3S!*`>%Y9mNblZe#;qyx?@6Y11c^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{^Meyw_kL zFF$lnplD+>@8XZPz6@2H52h}2=D+oBUZ!r}i)nhX{0o#9d^?+d`Z2?%-MX`NH%Mj* zZui-@wDIki^;-2(S?A?WzB6B6v`S?DI?a#qYtLOunEIryz0&fJ26OchJLM~-yDw%g zy0vGO<>$sb{ts_|TxIw}J^V_F@T={OoNxSRJidJ)Y~93%f1O?|J?ttwrSQ+ax-x@b z^ZnPB6uzp;y2E0w^eW~-&O_tB^-~!Fw|$VT&S+@!3>D8PuU*omUGw_;*?zU!iH!{# zCpNk=RGRHy^U~_wu6E~*)!7k@I`0fp?RLBk&~whSx%xLu;?gVA&QK;z6~3Q~JvU{) zjXHPH&1JLJ{AHDYHJIXs+>4i26iGae@z&WGy+V2Ysg(S`oY{KkJ$CM!n7DmwnRgZ@W_JncT+o>CEmAcE1bz{xg(@FAduDF>m@3r`#{nEaxkq#;*R#yz);5 z^NdUTL_IFnu8!H!cIrmaDUQ28Ha@7^n)T}UVLAEsH~-`=x1M?2T&QSWZ+!A!=)_g8 zr&ldm`d%+(PG7_PsdddulXq_}KfYlB>(#BY{$VPycekB?*vWS#eo@!?UNxtMv7Ik3 zt6cq9S+9vz%=TLy_Sy!A`iqV)f1trUF*^F2Yo>&va-+&Z zKD(BWu9?}>!{wB(s$4N;6FlMI+Q-=HD$BmVE@J^tuT$u}Z;=i^i(4g*Gp+v-=DTaj zbctv8ZbgdJZ|z<1pW*S%MO_S+Ke8=(yUJUrc@vLQV?Wm_rjI|vq|aS4KYLarfNg#I z7Rf!XB_9r(6mtAbtNGUuc5L~>-~N2(MfB`07b;3i?g*%Tv8X{gS1`3u_p;8C630XO t5AW?fFZiQPS90G;(T$ZJj~4{GiZCAbU7r=~6?4}r{YP+v2GH97HvwO1Xg2@= literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6d89abf8d4c710e0b83088235d2888bbeba8d106 GIT binary patch literal 1260 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=_y>Qt{m;C-ReeCFj2lGB_;MVg3De*Nyo{ zHs1EM+|V(7>S@W8*OSjC-nwJlTOGBtSi4bfKC|#V|1&@Ay%uNlEne;W{0}7{Z>zT8C`^vwp z1^?84bT4^zZDZ!Hx>-7Fl9CFKJ-7Su!gdAohRY@Y8TgK8e|sAp*_6uu&-U$&Nyjf= z`Pa0eCi$aTtl34K5^0GyIVn6nH{_D}*Sr3)w|emO`r27a8||*WFtQLituG+$u`W4# z#naCd)~R&HFuyXs{9ysl@@vYI!X_O4Y>#7{uS9<4A{G%I;@@pBwX1%)gD1Dm86P@Gg&ljzo%`5X|-~4|+qBNLq zO*`y!*@k)f+^{!C_n+DQDLHXpc%3-&4gTe(haxKaB1~C5OwG4R@3{3utNP=;jWwC; z&K5uNyk~Ky?6;s&&&J#ps~Ffnoh@z-o>0$J7sB{IH}w0B{b*1l)9o~Coh&9;E!Y^vV=iaFX-k1sU&{K)(Be+J$8|9+V;y4?2Q*Si1x zDv3Bfm8MSpD+367EBJwTw>%clJ|VI!ATRwki!jrUypANPVQWq zw8G7O3`_(mG>P|!Lkv}UIaOpkmOjn&T z&(m_DhwX|*4Jy+0yX>_lu-G56*V0(Pp40Q6f$3jJWng__J&@1!ec~b)t`+RIE4Ov; Zd&Y35d6vck-ifK)MFD}XB8>lU0swb<39$eG literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5314dfab35688331b2770443917cca7f3c44c13c GIT binary patch literal 1117 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$*I!mXfy`^QZkw z{Ob76Wd6-r<$qaJ{xj@P{*%G9EQj+yL%4zb`=E)5^TZPD?}@4&o13$Ock9FQ^X{>W z<)d12<`~{paY^p6uVQfX7H(w2c5iE`NiL5GV2wVj_uGGGcJ=vF>E|+O{ zG5>OM{e8Cv?VQ=yzb;zyciHWKmGzI0burxN_S;@P#jPjdu|ind#(dee2R+=xO#&Un zO0qffL-$-|XW{w2Zr$rcQl)K^O)hIr3Rw7Q$wT+;>mR#{FdjLzVe@1eN8t_XY70^V eFYur0(qJ-TU$B_@LZB;y8vBApT^h{)Zvp^^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^gY7G99PPE?+;x{?Nkz46f(-?stgB-1f15 zI_p2feWwYx?(jd5pRs_OHMigWFRR+=xKHw@R{x#$_;>SXk@;ym{yqP+fLkthUH!HB zrzRZD{m)?Q|1_X>+T(wf{~5IWH^-?z+$BAlc{tD(7G7-*o3c z!+GOh0WAL+(zhQs-u~3p@mu!#pU>_u6=7Ja_VsVZk;6Mzt5p~OVgL8bg!66tpUvw3 zSTdN_zpwqzV8!iKn{{#8jsFa%&Hgj&Tk%=9@VoTCUkkW)Fa5ssv+6O+)z)tzBA(fQ zkAYM$t)HpCS1xD%+t3BycK+_|_q~$8Mg83d`S(%`YoDL|cU3gSbp3aU{|pCSEZ{I( x`POr5t;V7T-tL#48*5(x8O`@5Cww&tbYQ#qD$}e#*j0ofS8iFC#sdETHv!I=dGi1O literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..07ac85312ee5a63bd8a2c09d686d1e011f271cd8 GIT binary patch literal 986 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$$MT7;^vTzXl2oO6P=OpE-ExxNhAu31(-N2*sW zKDq5!&1ImuU8{80^)rbr{jGaL{#Eps1>EuJTW!hG-A|0?#sbY*aVe)8W{ z`Hbm*SM7*9y(Rv~&t>axa?7;;XV|xbX~WJ5e2=D|n_R#!$v0BzWV^XYn z$}7+FWpFreRdl=It4ZZ$zPC}rvC;k^{QKB7>ge?E^8bD>YB1hbJ&Wsski^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^ibXS7bP6|NALYDYo-j+JA<9uA#qG@BjHw zf2ldM%>HR}-4w?36I+iP+u7e0ndiIkKf|>1{~2n!n%_*XI6vY3@*kI^tvB`@IQ(e= zHyd~S&v*YBzMoaU`L^@Gj{M(GLgbTo{b!iR`?JgLX!(Bzo9NH-j~#@it8@M{96$V@ z;l9%JH`i{QzZL)Qrzrc4^;SQ5fA)V|_P6W(7Tq6$4#I!u-TqexloJWDPuv4BMuYJ` zL*|r{WXGMwcdj;mlX-9qXy09yi02*m|NS;$jDD;CDzom=e};Qm8|;qGOV0oO=F*0Z zuat7?uRA-4x*mRR-7BA29~?F{r@(*84d#DUQv5gUpLg^B&d6X|e{0EClSS_wiqAg{ zGfV|K7Hnej6_5=dF0d9?YT8EBYOI#n2y{tN{r$tP48dn57j-chd(P5Wz-*G%rNL?f6{wo)CX)yo42>|KKgUbK_ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..53e7bf8e035768134d903529ff910a64f1e780a8 GIT binary patch literal 998 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^il|(aH9iHNSF2=BI5v{-@^Te}ig`|lSPaPqF*_@80=OnXHSowuL=Gsx@zGxRE4 ze!pwV@jn~^ERVDcI6lvo_p110|9sE<39Ihk{JyF(?mxplkDVS&a0@%v!mi74; zyNWREuv<1o(Kh0uD+AwbH)r$bfvMa1XFPuGD#EC=@kXWP^EsEd3*G_BvfjSdrLlnj G|4jgWtCf@h literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-12-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-12-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..619269e76bfed85e2322396e6fbb642df6040fd7 GIT binary patch literal 964 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^fr3{*Na49~Q~oc=G2{Pin-i!Eo*n(Ny+ag)qh@K z^_^UL{^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^5>Dv$y}8rhEEL_R`BHZg&=yYR)^7wk@}0 zuKMARZ+GkrExtLwSpM*ThP6TV9S^tpWL{f6|L1G<9|7!@OENQl)f60;bdinSq5ffQ z$J#Y(-6bZrFRk1+|FNuFK6gdqx~I(o(Md|38@HRemNSk?c!Q$SJRId%jCAo_g67o?t6dOaM`szZnh`Yx+X-u_||-~PbFdRq36E> z9pt2CK5d@%`^;TWOSLU;|J}4|ao4hC7g_mmt!MbzHj}yRmYu-R(At`mmz)0S$@YTk zo?-`C^M*gxd`lD8Mc(zeSMq}^;uqiIk83@bcHI(6-CU{nR>Zw9Yxz7YtNur9OD?Z@ zAAPdg;o3XPyFG$G!mcfv#*|%sH!V74XJ^^!FJ=E3?0Xps#N`Efo_S}-Dsep0a-XSj ztDd21*849UZ@;`}ym3(HG?&M|k~L?0o;=$T-!bWQS;=c_ZI`}V*{w$}8SR|%tMJ6p zj32F~))H^`bO#rUPg89FvEe~g3A5Z5#;X4ekL26FTuRtF#b0TT&j9URf4x?TJhfg=a(8R zA3x$3j@>xzywlm87H&l$6JIyEir$!M`IF6koyG!w{SWsV%S$HSo&7jpScYF^!t;+W z?4!PBOuFxUan`R7XRQwGRJXqKPhI{}mj?6X{|v3$WiFW%W^QuK@e^6nT>to(miF0r zzkMxtbccrum>t+THdM~9Qtu?PtNY7?vmZ!c`vlLepb%@9=T*TzhUkQ2IlSS zw~7R?9X_9^tRk@Fwc_hJjDKEzo!86rbVm#yU&f*a?fb81xpkK0EZIEwrkkh3j(;VA Kt_=16Zvp@au}}~I literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..68bf3cf6f6e07e2880309b15354c9a8c809a0c07 GIT binary patch literal 1289 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!xxElTRPuvyM07G$l^!}|CwtZAJ$Gjb3J%- zj=F-!eT`pSoAp+0I3mW;RKLaDzBTQOL4cT20>%odo?|45l>^Ltat zcYG?7xvDg5>Oun}m)P)d)laJ0_{U#_(W&%wqR93gFC#zQh>c0-+o15OaN2(cu2;Dw zH{Z<`baD9inTP-1-VE>Tr5O_|Z!JBvxzDB6^A{Jx(=X@wd$~K#fg-@P5 zSGTOe&?a(ubnK6|N7a^#H*c?zc*wmwA|A*t{;;UQ*4=x{^>qcm zx}y%wI6hTC=kUjK?60FWdBk4#G}Ri<+L^iZ?!AehrZ~U7w(hPh|KZd7{*@XtP89lc zuAc7-qu0H2ub$LBl3~7c<;<_VE}mU`KCbR_N!)JuM|;*aJB539Ry!_p(^>FxN3o)O z+|{FJO(vbXm)uHAEfl0k9fZ4-uvN@kvxD$lykOENI_ zAM0ZHwm1BERqF$T8ycIo+tlpY`KP*0^u(FS8@o3fPd;sU(j?G9z&If|lxLEXp3xhI z^IjSY_=6OMoVUxwIJKEAm}JzsQNbIt^j$*0RJu6*q4+RJ{e zON06NSAX%i*Fh%RKiOO|56j!{w}W_74Fl9VzP!}kC_pA$O_Wzpz DMpG5; literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5e37aff0e09d25e1f97298447e1f896dfd366c97 GIT binary patch literal 1069 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zbrTIm2%i4F4I{dH)l6dZj6WBa!*vPW>NY zZs*JXy!dpy=3fcpx>B=$BK;pa>krK+6*?8NXsTV8w*IO3`g4;{#d|Sa{&!LN-3s}J zgz~J4>c1aY)L_m3BRpzaL0+!?`)&Uj9%Z@w zNME_rV%KJg{|veR8Gg*tSisKTW;I=M_vYt+m;GnpivJN--nilVwgb;)*h~T)#FT%8 zmaEx6O3X7pem85%AN9G8x+|T3xcPrw)Wxvg{BTKw(67G2m;C=3QbXboUJHC)`sKLX f1pa?oT^dZv4|@&d^7Zy}i2rBkTGXY%{Qo8ZjhnN9 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e1b0d2739d26251b69f5f5c103f70d95f7d9dd84 GIT binary patch literal 1073 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^g?1&h~KfKlim-^Pl1Km4BtvFL%Z97hY;G z>04|0+Pbdf@=BiyqiuFuXCL)pKas)o{MNG^+2^-sUHy0D8vlKP^}nwN^8cN+VR7&L z1jas(6U_H^EliW_5HOd2BgL?w#Mh(t#{_WfPV_WTx-2Z&^ zKg0WG_Z#>BRqX%!A%j`w<#vY0Z^Q1lJnFjnTW0^~LyrF$7)%1#m|wN_c`4fMW@Qhn zNzO{XoUuy&mbirS_X_(jXF`KK&+lK#kX@g-;UCL?hJCL3-?r>HaNv)&M!Mu#8!3j% zu}Kf@p7iW@?&8~7RsZx+{O>pa8G2JU{B-3op2cwC-?d%JGvojLGHDLlY11kFd6jEj zPzJ*rduIpnBj3+4^FERLv1niSrBZ)R=S43+dX_J4_s(d}Gkk8%R{Y+Tp`y5=+{3wT z*B*P1;QtI=i+^)F2Y-%gP^RoQ{3b%`|pSNUpri`v9sE@thRlc#-axK zZ}NP}`O{aK@mB`azuEGiVdIZN3$dzZ;nzj`|M-doF#WWXjkDkM?nd>!{|w(udTz0J jmA%*`Q(yIQ|Di4orbDly(k^ay^GV+G)>R~c{r^n>O|`CT literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-12.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..498419430a9d626596a93a2ce5309f12dfb58598 GIT binary patch literal 1195 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^h*B=KBBo(SOP3lJ1l>4#sZmyM_O1SHB7R z&v2g8{{3XnZ<_r~?0;4;b-nn;IOX(O&6wVUx=YU4OI^8=x25L&rdbaR>`NE_+sYj2 zW&d>gEBj-sy;BWr7WMy-`p?kI;G4OA{~V>MkyHL&voS3Ro3${(@}B*!s;(!!Gf$j! zsI58rpFygoct&)#m4WPGo(pXM8MZb~LV4 znHuA@)S#;8sx*_7;^*|npMCtVG? zZ)&{24>#ja_g^a8ww?d5GWzH}k?oST-u{7a*nb4DpV^;wMS6+R{2#m)nZH*4-nO0n zMf)G^m*F4Zw;cFcx;j*O*UJA4Ty8)59~vC&TPvA(K*=1)XZX4Mw|2z)%p&^-?0+== z9lv_sK6S@`hJE}$!Y>;C@%k{OBlN3S;aleUFJqp*@3S$Im|eZQoqhX+`_~$5y3RXY z-FK<)Te)=jJb^j0O3Xgpj5{lG;>5x8rw+5E&-$|cB#j literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..df1dae8746eecc326fa5fec9564ad54072535760 GIT binary patch literal 1297 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#L++kmX)BjRnk`?>Qno#Id)fZolN+0Nl;kUjKO3-hbCM6EXgUuh<^lUmfLR`JZ85mHetXzXRAeOP2-SYz^9f zS!b(7&Ft3^&-@NvpZLYr{b9_t_K(K?yA#=#wH7nqKm!Wdo@(*_(O}Xy?Z4R0 z8@J=z-HZE~L*C^so@LhdjAfG9t91)jF5tJ4THgHrKf@*U+dON(PkfwE{GWmG!QYIv ztJk;hl0ACZW8zr``-37g0>7|GX)qsnW4iouUZV%kzJgC@YCq0-QvESDbl&RxlAXLy zH~te_Z(G?D?5udOB;hdoI^MWlduQGHc+FzYqB(8H11jYgF5q{Kv~^fM$6R676P>M< z$+x5x{nKQ^p6**Lve)m}7Zb*+M-uPa-%r_`Ed8IMqt4{5aqzVotKVC0Z_6m2*19j% zKJ-5WmrG68WQ8tt&xdPwQVbf7O46R)*^9Q<;ko{3&#;T)O;dMBO>o zXS3DkS>&rZZuwW!rNR9C;QF}6BWvv1MXp`n$|iHi^FKrFER6-6y7_r|bI)wrEOPvw z%C)6?FE=;-l+swho2?rbF^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!z=sEr=7p`O8wMRP*&2EulmP(rOt9y@tsMV zBJVkTd#^P0$Xvc!>4mGN-($a45_$GqciAV6=L~P^KV+@Xf6V!?IDOsA-{;+|&9*;U z-ux?ojlD(hzW>M4WAn(k$~Y;AiH*Oi$q z+@+xVc;lU{y%a<0_qHvk-^_SyVEIquS6!?& zPsXq3?N806VxM%es~r06XM5#Cebj5ExsuF_+k!7NPsj={RLSXKlMpDfPHM3E9`jN6 zKSM`CW2vC<9<9){P6r+S6)$5RyBvP^uzmZFFdySPQSK%N`e!cmTI;bce^5(ajzNs_2_~@#QdQI2PjLT;OY{Mu2O4~F4 z;k&iVGxy0{%h}oQ38^8)S@ z_uqwse_k+4d9X;870+BUHDcqt;Y#%UHnoDAqoiGxv$%ra687^3GSnp7nkd54&8*`%Hg9oU!7O<`;MWGe~JH z;Ep((QwAMWh{D%~{yT$ctDvw=cx zOm%4Gx<5-*n(C$mI`H@=d2AQjJ+a!n>f**d?ZKThl~ZpOgdR}p(qL4*929;>CF7Xg PtH%CoT^bAc|K9`v1C}@0 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..9c65e128f6152265869a47b1de6de76394491b17 GIT binary patch literal 1208 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{?69h(Plc2G-JlyqEu7N}D=6C-0@8`tQZx zdw=N`X)RV}zO^^|K$VM8#zx)CYXVQQZ1#A%?SUnS<$s1!|K|=eCTG4Ioi^jtJKD$Y zGi&=|_a%SV)Ms|D+)#hTf#Lj>{|xQV<0jVIP0U~Fxhzv)(Xq$brx+wJ9eeUbr zeAf#T4$G>w9?froSAI{9^ITcc9=d-= zuG6!h&v#7RmzI9Ij(NkXU(*(vEiX!)Xr@=Rg57IX7kd`Noa|c-{~4xt+P`1?&*a!O zy@+W!hPIyPO&+YO=8By-Z$SWyd-#kwQ~ghM%|6xtdr=p|t;$1+T1JJT@-bKRw%nd^ z@6jU%DU&`^mQ|~se0xy3V(IkU-7?>fX1=gmHamG)WzqRP_~x&0F**qPQ^o{0b4q=Zhoe$nVjt-?r@Jxx-&Y?`>PS#PdIcuFm-f zTZOkxdTgz8;_Iy~j7NBrd}>epXHfhn5}t7J#m)Z=;VJd3iyAC1ecPmVeXB~T#gv}Q zhhDB~{>$aVw|~F=Lst=ohkqx}pLOm*{cijJ49RY1MYi#XFMg>t|L?Re4Teu!f{vEm zXa4H^SMzlGV#@=Qe#n0p_|Fifv4ADl+~^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^ix$mGwL3PqoMv>Um~y{%YnkiM_1)Hy_y_ z(qNo_oA*D1P11jceXiEO6aF)t-xL4+#D4}ZyR-7&T}{_6zE!YzDTC$Lga`i_7Q5I# zQ2wL2IP@_a$Nu*dBQJiM#Q)7V=X~1grMFJ4FnW1%0oU0T&PuG4t{K@)*%){G$g9^` z4eR}^LN$a-UadWGUTN2VhBvEOxAP?Q2sfW)NUG22|M_J9RMD++lk=6{c?&$Yb(-wT z0CYpnj{gkP3jZ_QSN@~%??&=937~ENL{~qOSR?MEn=89(N8y=@bM{=%*tnL}?_*rR ztN%9VYm@!&C&Bx-3iL>4bo>h2|IK#80fY6*Cb##>-LhSn$gDhz;jp+_v;B+02R$;O z+pb<*`?%r2zL;dL9WSFNR#Y8qn#{kf($uY1>!h=mOF7>RwFaYU&rV7gY>B;F(-{|q;SrynranXmgN#=z#7``1NX3@`jzZ4$kGdK>%N=9+aD z7QDK6Qh=de(Eg#T2*b;g)fYsCJVNU`-dWl&b=2#%5fGZ^Z7sulrf`0py%*5%u*Zjf wP1&?%()qkImFm^?A5DGt*p{@jJ~+Qw{sYkPo)?pun?TXp|0B>^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zaV_MpnCy?Uc1xp|@3HeSFD>HoLvrm0z+G zJPcfx)IPJkHUCj8dxtcb|HQ>p#V z_`>h2z3xZNqqca<-kCkI^45M0_4~5f>X+4nNU{dV2?YW~Cp=X3jl|1-#$x~K14 zoW64b_abj6%i#IRp8L+rzq;|C;lQeS=ZoDg|9$KrzCE(McmMlcT75vCD?@2e#i2+s z#V64#I^^|pDsK7L?ah|*UZFm5$@J>oGSkvds%#!87`-7{gU|O5@Uv&XZ^X& z<@4VKK9hgM`)uqAkY5J9mt|E;8Zvp^V CxQR6Y literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..78f2dd80f463f9139282a4ce7d2f069c541e8f10 GIT binary patch literal 943 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^dUWHZ>bJ{AXyKWt`goHUB?D?N!<3zpo_j z-}@_o_3t*9f_41AzslXVz0FkFyNu#tH3>*xHxS&qCj^VS*OE=_-%|DOL;@A|(Fe+IC1J16l+*1un+Z7oz^ zQx_7zdSC5+|9$hPexG!A969@w>&)l9{m;FhSIeJkFlpVpzw-PO&C}U=KaZZXTeRuV z`?X9pB|7#}441P#L_QbUGkSiDuz&ve%bIUH?-Z2>RX+Z^is9mK9r@26e+A?!G6)w~ zev$uMb?&#re}=67Ex)%iWY+fa|NQx%;duS8FQF>awI}(CFx*#>`_Hgc&g1J}jYSQ@ sCnaD13P|`4W}o=J_|4Dvt|AQF`QKLZZu}||=)iEtf_*8Fmj8bf0B&%0-~a#s literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..597c85873ccbbeb17c8938cc081c16c636720dc7 GIT binary patch literal 1042 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^g?8^CdpJ|KT>77rOAonfY@A|2~kfD0~~F zEw3@pxQk)OhR6nyEiL8G*7;WEo2coCvLq{f4$am1cez?ddV{375Uc;n%nLUo+?6&< zE}78EzU<k@Cgj=NKMbuGwvT%Xp8CB5`({HZR6-QOf61oAq5 zssCq)YfNTvT3zC)EMHLH8?09?eDY}AZ>{cmd~I|7#5buNDfj1m?kPVS`a5XentCmU3%_~X*Pf97ApdW# zd_udVx%0oD{~2CiE5Ft7;_T1BZwvoETfi%rC@BB&i~alg|MsfiP&#LK1^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^excDgO5+|NHfy;dM}Vwo>6P$NvmW@(&|_ zFZ~*Ss`t`&+0NnAT^U~_TQ7A%86`x<_SygXa(|=q ze+GN|AJ6|Y#BKg}_1*oc@|kjL9i;4&n*Y`9|9Jl2Ui}+uKc2l@f1mkJw)tD-t1HZ% zulx&PT>4Er{^#%HFOL6A79G3%W8D(wo9sWX#ouyY9rSl~AJBlbQ>SfWz5g@R@PAw) z7S{eRF8<$7`Nxs-v%Y89U43_jal@|KMwz>3=ch(#%fGFA>&hVKe`$h~$6HqshJB9T pmVBz466nDF^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^e-T?In{xRuwrff0CxI{BM_FWc1R1KmM$^ ztN;D@QwOPMwkGml_5U-}`zmj6TQJv9fKRu7zoBwBsnxp%M>9Ntj`oCGH zgf}ubp0)7!X#@0_VSZxYCjMhx3)W9%nWe$Bee!$Hr_~o-85Fx^edQv)F6v@%YAFA! oxrFDd{Zx?v=Bo!D&$C_mFX>J3S&;yyPPU8Jmx=^B$p60y07qJYFaQ7m literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-13-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-13-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..2cdee593d67f605c45826439034dd63b5cd9ba0d GIT binary patch literal 1051 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zbNs@}G~?-*^9$dHc%;hTkfcvY+n!+d6qB z|HoN&_3!^pVO;eo!k8y&(SL?r{y#47c`fIEy+A?NR+)BkGL z{;Dte&(LfB)+~AH+@1d!8m{^Ae?Kej|NT~jY3tb)%zwr1zeql75qDs9>*j5*?c`0Wj`{Mb>HvPN!@8qACb{GGhf9)VG|AP5nr0{gQe6KQ8?oQQEs-is9PbB*WkP|5UZkI#GXmhkX#xLp;a- zRsP!owDHUNuM2pKi&N+627mp}Af>Hve*Vuidn*k__xGO6JzNuWJ8j(`yNWQTNjz~f zJD%hJyYSiiqo%(apLVPKieCPoK^Q2P6Z3l0vLk!DOkaLdTK*|&)h)5brD`wrlFMvw zp8pZ(%HU-qS$CxF*X{Y=ZvSWKTsir`uIBpF)$zaI?*B1MV*zLT;kzFFKYnca&#(_9 Lzo<)t`TtD-fF!vN literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..23f3d785857311eee49a5eebdab93fb66e17d936 GIT binary patch literal 1317 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-*?4wYljtwpc5?vk(_&Zu}Cr|J07T(Vg+lEb*z~g`_oT1p)R;b4u}-gf=gyf+K0W?@ zwvXZ4%SfsJ3`cyUL;W}3G`#%QuxXeI~T)SuqEq?U;i2Ux6Vy2i7UUE+b`$C($in|Dua37 z&TBQ=4{k(puoTDiZMfYt=Rd=i`;Y3mKJOR%aX;vz?&`=1)4uf_;86ajS8?)v%xSOU z9{IHyKg!Pk_CE3}cbgHY%cHF*%BvjK0AG5yQ2ed7iap+q&Blk=|z3ZcFPJM2)OHUeoa=v zL6Piz9*Hv@xnI5iqx|yc^*O%lemYOyZu2H?`DlDjDL*F{|nvu<5n$9cGc zeQoJ}-khs@lFNRczq$6q&aZi20v%-Yd-F{0GycfRe!5Xyyu3)_$^?!(m8zXj{%Sv; ieK+dWudwpmhWWd;1UiTmda;TGFu1FAX)NIXe-i){p)X+o literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..bd65d2d99006cd94f79d929c76ea897de5e452c6 GIT binary patch literal 1122 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?QgfU%Stq#9*o3wf*6L2KMYY#gs`BHQmAg z8FZhqFxlUXTlb>9mhxY9g*8Ey}fBp*5Q|^a-p8uU9UsC;V3*)ovy5ACf?rX}1 z%k-~b>c8a9D-GVaJH!Gs{xkH?tc$b1dES0%MtnB!+Bn-kRv}41JFaq1vf0s|qw%Wt zY{LB?)kmaun@pe8Vw6&|az|_Yf(5+3-jCLvF;hBq>s|JCN!HIB{jc=-R-RkCIzF3E z>Q&MW%MfO+{f^Q84|4qs&uqK#pP{1vW$2R+eM_3xu)p}v@HdO$*`MuSMI_`Io>sm* zA9b_V{I}Ut-ai}F*dENUuCopcnPjt_SADj`X(3|=ff=dn*I&B&PO8jY{D*TH}#=++;tS!{gs_J5FWvR_*H?m{(}&4j7|_PT#&ms0;T zL@&Q1|2^OEua@AWeBKj&Z|(jF-+!C%XoquNwW<2eC;vVy;QP4Mo+IY7?bP1_hC7#r zDb4I>K4H0izf-N*{MRw&H=oMQpQ}GnZ`vi|Jb$QUdX=rYeg7# hEENfK;1~Ijv8X}ZWKov}^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>9fqo?o3Ruju_}c>lY;*L08fD*2xscmFfo z|Nfsr>f9|`_NU&BFEp5*e|!76_Vwxh-#?E3x>A(2o$txdOY+}mJpXyMhASq3`9H&! zbo);ifrc#hHUB(s-Tk=?L5~_Fzuh!E=c~AD^6zC!mNGRc{Pwxm>l%66l_Bdt!y)B$ za?|S1|Iu>&khbrxPXBe@f1;sVe_yk?d(MB)n)fU+js9xrTtQqdploM{NiGGb^P#McX_kr%hWgf&Hods@uR+oPd@t6 z^nbUP|F|xfci-~FpOtnu4t((V6~LbSpMgXA`$xV>{C~^+KQ7vFf7||*iyE|3eqEgG bD#B3gDiXjr%NWQCy6DQFDiY`*|NkZc&Ju?4 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a90c44ce368cb5cf327793c779969892c7bf1a22 GIT binary patch literal 939 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$h<2%9P`IQSsYmBH}M^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-sy$jn^8rLn3+pTVH}{4pgB=4nzovCryH1RraXGt+!-#%R6qIPqr#=Zyg~SnSxmCa-uyN9|5jCAwUa%<;Lp8#{@)ZC|FVMr=!)~PLO1uGS^H1)iCyCNKQC(zUzq&!0{dF~qooROFXk|Q z*U4i381{fk`O=oB!F^_yFE8({OsJVt9G1KA^Ajyk3CTwdw!Hf^?+gEDPcZvr_bPUWx-^)b KEfxXE|2F~D1fE?0 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5567c8e59e1d69991d7f460113a46a83183dbab4 GIT binary patch literal 1110 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zY%@30gPq-FCNmw4~do@okv1blcq?vDg0! zvX^e$Jgc6+K0W64*<39@wZ5miXL>@`UGtl3#9aD%e$w(^=*9 z{^s(hHn%RZ_&tBE{>{XH4;FCqKDwK^@7vO{`nS95d)?+K?w|F@(Duxy1qqRIX$lS1 z&lVZD*f-W|U^|plo literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c93f11ef16138e13d477b8320ef7496546679b81 GIT binary patch literal 1131 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-_nSvL|7sABAOKiN=&OufMiXob|d!dA~wGO3Xh*| zZ})pKv^~4`>{_zy(ajp?L^~g@+VX9YJKqY?1ILUHu8p;PC-1qny1QjZb@Nw|n=)BtG(_V{o zUVh(aw|HyT!4JP4p7=bA<&WpTDU8S6SH!sOPN}%l*Hbu2W8LR}qDSsj7Tpy6&yX>p zeyRxL({KBfW=S&a=-E<#FZeV6$90o#hqS#k*Jfki@t}XjI?XG&%bnzeq|CJ3mok($ zZf9_2W8SN>z+0G&oxMluS*~fNa)Rpl->0Jk;&l%_S6+TEuB|~gqry(s?2}o_w%w(- zx3h*e9Jl=xa^;!fZlz6co_^X|x#;|9o62u@um7ssx_tk#ds`SbdYY~|lwBF8$?oRd z9IH3?ac01pswvS29-r+<_@{m0pXga*p}m`52Tnb4l%cA3-_~U@E-L+j4a_%ZXvzm< ztk=A?_r(G}CC5**N|LoS7B#3GwKA`WF3Ah{9q7ssW!1f8+IOD?dvY(7m|o0G$jVuE s{jbcfX*cd0eK7ti|GZ0M0c+bEpNL$=>CG>L^A>e6q`d-~VgLUo07%5hA^-pY literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8cc6dd271f30c306ab2100b27c80021717225236 GIT binary patch literal 1051 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-uC`VN;b^*ou!m?myQk@+76mZp*hFoMo3< zoR)gEzHaQAb~$)r@S9Z&Tz)dLuYB(y!10bf`RB!LPh{TapWDhi_rz=Fe9V zCsco5t-)w>3IE-~FKQFcnpE70Eq;|95$)gq6)45FB5R_j)R8!|IRAS=8caKPO({+O zF{|jV2fym7bw$Ciqj)7=u?IQ`&c3-@?5JphQ(6C%FJBflSo6QR&uFif>stRnM6dTj z?!n0c`+J&?C7mr;s>Zx<#gYE=XD>C_%0yShihqy#dcm%j|35?25`hethc#Xf{~5Bl zJ_i~LHx$)v*;oB*{<#KQ-Nei0i8kJR)_FZ$t5;@}No^@yvQK%NR=cuHz10JjPja*S zFHJu;djY?LY~lyA8HL-A7^KL2`_CY?W1rAwhUDnY_JRKyuCJ4SE5yf{CybuOYp(Nl-QL*G z^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$-zijdz)c17_3P>3+BAry1wJe4#z##{RqVQyIK$ z99Qs7->&>pyS~?^qCepEx8D>0Gvr49$y(W2zsp`Lf7*PIvbg^YE%QU()))UcbtP0@ z(|(u60={$cjFqoHy^gB?`z32~jmgd=uh&+E{}~!5#w^$~q3ZI!`|2wf@NK&N@Y?2F z{h8UTBUV4?J#EO&zBXd|!8q+{S9AN8=c{n{xPR-jczLvN|1F`%?`H+B^t1B%&oFZV z-<&^IA2no5SJ$eG9RBe8DD$G|`AZJ%e7O29V`HHL(2`k&*YfMz-lhJs6k*&^!~AGN z{o`B8K!=CTs9}F}@IQl|M%|?KKdvQJ^auIxt}U>eBsJy7>QLKK?#X@g_u2%o9)6H7 z*4+Q*Q2m4Ke+KfJ!?-ReE@pJ7{D7lWy47xTA**-LNjOIg11S6HA!b)YMQ!Ga|> kY&8}&@GibIIpfQsE(SCGrPAV;x-=MW?3)6Vum67&0M*8~A^-pY literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..caed8843b7dd35b82de98f7cd0e58d1527cd7105 GIT binary patch literal 1046 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>7bYb3^!l{Abv4{%?uNmyc|>1Xy!w}bzD8FJTm>7Cb=T`Bi%WBo@{^*<_~ zng27$UE?wS6IM9?WrQ@V+QIh@viyHk`RbpZ_W93nzyfG(*Yj=sRT|7CKeUf_|7S2* zZtt}Jv5y`9$DpqlpZ#h7ahbilw7~v}a^Zi5dM%fa)3)q2mHf{jc9y}dM*C6g>%}p3 zoIZ9^AGJP}M6dt-E$hL@ecSl|w4~Ti{}Ft?_v<|W+fV*#FdP47KBD|DVSD}e7nl7y z*RQ{KG4J@_O^M;Siv@i8Nf$Q+x-v+!?*$@}0LBf~7dPLz2o$hAD_wgQD6surm&OAA|2F}{ CI-&vq literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..750e4029d072b310fd5a83b7956b9de50f8edf10 GIT binary patch literal 1069 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>4Z_oQ+EkjBC?J^IKTz+r$e>=ASXAt!$ zoz2)(;%m&lebW6up~Xe19LKBNa`fDRD$^q`JN{>wSnvIxVSoOAhNFQoAKlox80Or* z&$mrn{`uR@EPCu(%I2eDi;X z`)oa@|1;QKuD{Q=J7P~|(WJIn9LoauPb{5mH|N>Bd$tqZ>^DylzW)9A9}VW_(n&sy zEQ{H9&61L|+5CI^>%W&{AN}~|!2ielvE}RE=l^ZBtf@Ep&v3>{{!D!=l|sYu&BX8rut%kmBs?*k4v9l>(XGf{JLyO>*u%cT}2ocIYqYnRA0TA fbIjmhdfb&j2eHMMQc8H#W&Sg4b`=R=|9=wz*fg+x literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..0479136b5bb543d448f9865f07e754d4d68acecf GIT binary patch literal 1077 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)L~|nFpS{kcvF+e|P_X2GMZgqh_ZZ`&}|Kf~jzC)f@@__9`V&4a!x9+Kb9%=!%f6*@?L&b}7xl``4+a%_LlsVDy#UW6Q6 zn|b58<7NBz?f)4bt!7X7YBDck0q=i?w{xwP|EWZ!|NZcv;ZLZ>HIsMyZ$zcpme~U> zi}`o(Ri;_>1$Gb9SbNET2QG7bxdm2r^~`(rq<^RLqX`V?m^M8h% z_8$T4%+KWC+5i2Naj$;I{qHB&{i*meZO-t&CrqAmvWIbWB4mfmR+=)gXs)>kf> k?^%}yW6d?$^UvL9{b#smKUXAxDL?sY|8rN70QUbk0jUhXpa1{> literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..84144004430aed3ce6abfe738a153fe2e9ec9d1f GIT binary patch literal 1039 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{_8RFYnqvl)dEfpJ848e}#zyHDwF8<`9%3%mX4_J2YZ zudn^s|Hf8+-hYNPAh$T;*TpV|7yGxb{m<}%e`);#^ZyKSUC#?$8T6k0d;Fi_K3mWB z@AChCnBM)*aHv}UFXI~f_m}=Nw90>&@84%KTk$_b&h*-R;f)e#U=Tz~`g=_^;3W*tUMXxOp!7fr{7s zxE}H%_kny9&?TldsjHa(Et9_tbjI{gY4)GqoB#c75*}iczCy01WB>d8|F()So~Z2Y wNt=Gw?n|Hp=QEjS)6ZJI|9R1sK`xV_%ijRVQ2XrtOiE(`bLFBg4d(wh0pP-{5C8xG literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a2b451e7d3190418af02e215e949eb987a945728 GIT binary patch literal 1044 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)N`sCp=GF+H&yAR{6)?{~0*BG%YTdod3fT z_1y4XrUvthcwwU=lfU}*U!TfaRBVd>#s1Rn{tLtZ46Q{+CRLiuSiraXpU}-KiMb{h z+?V#mKlHLmtP+3P?=SByQU7Ds(?W;9_YSfFAD1oK%e(v^NM=k;_S+{bxl6T>k ztsV7mww`_?|Ky61VQ@nR^Ex~8tNnkrwf|>eT=bveQN}t0kLN#DEa1MMKIcEf=`Hua zzq$CWdg6Zuz3uYf-(2^(r+?-4zsMu@57K7X#IEAAFSGpja{*uVo9XFGr=I-Ju+43b zPJX|)^!(pnvg`i|^Cpx`b@m3P6Q1NZe@y$&AjNQ8%56pcGwJgG40XP)dabKZ z+{xS?-;)yd>c{#}<%wCf=N|vf^zYv4_(v?_KSRO%*A6njew2qFw<H5w literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-14-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-14-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..35a3c72cffd751f55ff0e7ceeebf29cdf4cc656e GIT binary patch literal 1055 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{_xs{7UEiXE=T(p^CfW_`lQM{~0*1ZNK+- zKa1mkhE3OHTD$ckuC&a3Wt~2Y;nn#*)APSLPFa45|FHO<@Y?ci%grA){?(p&;LBnW z#!K7#wmw(3T6@lYaq>?t`Qvp8skch2H}NlN2{&zg>Bhd4A%DJPc6#%wd-A_?u3Y=r zwk16O+uCRM{Vn$&+pxiwRgZna0^YWdVQc*Ax9Z!!|NWn#SG14ei~Lj(M#~TX)=Bz* ztNFn^f7+Z~YAYfH(>0mrP2CA}YugeBx!4Bf9UVaB20zvZ=Si;FVOw`jgIWK#bnt(M z`I7Zsfs0nf>pV z$m#`I?MoN_XV}*oW2dy|_@7$O{|vR4WJ}l?we)aa! z`Tq=Z%lifIHUDRjFaFPP|Ju_33@y|CIs{f1urHXp|5$@Sg?ALtA@*1PGqj4_|KYK| z^Vzotf79weE^4s6Z~F7u9NB+)Rn>v63?400PFk8uZPdQjrNMZ+f35WFWf_Yagw=Xx PX)ItlD-!4+|NkZc_avp7 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5281a3c1f974061c034f72b39cab2d9a0f55f0fe GIT binary patch literal 1137 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#L*B~7Z>ud6B;}H1mz1(^t-QNz706+UCqxqGQcf^dF$mTm$!15ALNN{zwZ`5v;NoB zl-mv#pOly{=N1&$9$jQU8;9`=RC|?^RQyZ z-?z=$Usl=a?A*5FT49FpNtXaF9;T`*dP^&1wYA)I-rQT(Ak@WH9q1t7bL@0b*CXRL z9)7v4uMKzXx%_xSPvyiW_bY*}43%nIg>Gj}YISgy`TC#Xby(TQIV}u->wjGdbl{R{ yJf#2pKf|>pe5Z;;_>XmIFvpz^pL*e-)jR9DaQ6Af=DB-mEMS$@Sk%Sv|0V!w3dL0b literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..dfd9a75343d5f300234da511d652e7a51c106d71 GIT binary patch literal 1079 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{=1VqgfHl&v3qt+_=s+_lEm%FNS-Ul}>Zr z`&fGXTmIqSoA~4sl;VE~9u2&ta94?^eAyqrigUA@HK-`BfcSR>l>B!F#R{fSHo$0l_@Mpd2?gsz8YVH1M0Y~eRsFr#| zZVef^W1DBj-8{#Bdd{Z*41uAGBLzNiuy4yc?WxltdLd6%+Jr&uM$L)77q=(v+wbq} zlg|Eq;`i6@zb;#2w9b=(`3m#Fr5-9_cO0Itx6NRBQvQ2Fey@shL;MQ4DWUP3EMIT` zyr{wYu8_jzwN=wvISyTPWhmQjE`M{M%)UK=lUcV+Vz70Z94}k+CU(ZO-66B? literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..222c551b335183c589efadd54699fa95a4021abe GIT binary patch literal 1095 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^bb%yF%~EeyRA+kYy%+Y3iC&>mHZq_6HrQ zHw=B0)FtZ2@NLDrXGTWH_?g!-M2W3&bNROXrO_p6>E<4#4YpSg{tKOQL`>O|Y0I0% zT(eI#R2Mq1%&NV>GDEs=>xCDS4=#_$saTR3^RA5hCs$f$N?zWdYcWR!PkvF~ux=xp zzuy$buF?)?CZ#F0VN3tr+I~z@M&4=b?k$YpE7w)WU)j^i61dN1T|B#F^2PeK48`I8 zh1Esh`FV~PKIST5Un*j@+C(Q{%cSjLYR(70hy<`@&N2=1{1xh?QhWB(llf6wu3h`r z|MQZ>;x};(+R=yN5;!Dev-2cQPj!)0dB7iat}#^N!K~Lc=81cIANNnS=)b#r{-FkQ z9i3^%4kokfUp>FlHrvVMKf~**6(=({PCn1Ju9dmxKf|vTOnocsOn$4+(R;~%TI$!< z$~%+q+=+V@n%t&SJ?Z$)wYAlOvF-tOF-vnF{Y+*ksP%swnJIQHP1r1Y{b>hY;rK&l zj@d1*JOe!KwuClB@PB>&@8_ZhO_4{7HC;s*ZUpSTQn>P98TaJ(aT9a7Zr?i2lFZe` zDiXjtgZ&(Ddd2jBYG2#LZpC$;vG?x=UjMwPi{bG$KEs#(S_~qA4!oZk9*YFJGSvUS F2>?ZPs}}$O literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..01cf0e93d4b453f915e6246f5e0891b1dae0b043 GIT binary patch literal 1160 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>8BT-bV`6Z#?I)`z&I?v~-g2vo_tS3?I7| zeLBN-GPP`$|16)44@!@3&0P3dF-&<*0IOQ;BmsZ64&4P4PWYZW@TA9Nrk49M2AeM{ zm-&1S@mVH4^+B@j@z)Mg?0&70%~=~$$~+?eiEO$N>GV7Gikc2vgo>=)PSeOG5q^Jv z3T~JA`~5!yW2jKrj`FlL4ZrBCy$o@`)u!w5&#k!oDb$^Lf7C4NSi?(3E9=fH9@0!@ z-TT_s$6smn^DLnh%hxYhvk#oiTWj)UO>15LueAAh<=@I*YLNOit776b?d+GKe%zfQ zOx2J3GFFM38=ln2e45e6cH?4&>l=*)TpIc!=I^{u?k+A@e;pMSeeUB4J;uAc73O`F zdUvkokNo$n>@sbmX8{L3_AcMc;IH%{+w5oI){he`OxG%X4tdsJpwPu|X6N=DWzvE@ zE-AV4&-Z0`QAGLJh}^Mk{?Jv{7kDrNa?0`~$420o8Bhxy1F#^ zWIDTA*JU;Lr?YH+PyS~Tz*covvnJQ%VcDuXnkN=@G2FVl&*0u-Q^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)MLD$zqRm-_3Qr#XrX``R!5PY_aKu8qV29 zJ*nOP-)ncsW}E4pdG))%?|6Z!$)McR#ze9E9|2{6@)!&kt zBl+*ZZ^i?EzpLM0YANsgiKTbB&%!>znt$XS2NSgbZ*L( z$7i(vxa7>yTV$}LD6*}L|Gj)rH5bE<;~viK-dA%{Rwz7v?HVSoFTo_4+-7`2sP@@^ zhK#=%3pj!*7lb7WZ{A+8S8LA3J06auNpr*`p3L{UA>_TiQ<T8 z<}yE{fP-&Ak0JB+1q+i>nKd5S6fKb1zBPw!rUT>R`(7B|YT{JDbJ>NZEqz5>hG1E1>mxPMu8 zvf$kuZ4urH@;~~&&)U*BC7sEx{ua=uL3vZ=9t@smY5zBi;i&Zz)mcVQzNWFy(oWA= zuAWo#pJA&jL+rl;`<_%z`_C}DzSaD<*w^CEw?7^a`_I6ov4G{@$vv`h%s=LTSkc>h zYMzh%_lsb0j(MDu*B$OJ{wK;=#`4ttxvL1n{Vj}F>!a*0?0k{2s6qUE;LR0_x)}c7 F1OV{7=3@W= literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8acb2e00b0b9bd4b4dc86ff68318b1ca2a65b391 GIT binary patch literal 956 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{^d=-}H$843{o;+_|a!i9gKp(L!aPgNcP@ z!dDhp%I(dzihNwyIA5p8^R?nvyQ@O)rZ(@3^w*ew@B6O+wiW&U3I_Y<&Rhvf}3x(KniF ztgfZauDG1Vx2|}n|AnNjF~ts|Czf})iLAcVz*Fd|XZvCSU&%VZl#`MV8EpP$9X_-1 zfWx!!2lE|YXnX#-CUIkaGgn@kLcgZ{`-T5R80U(t&SMtbdE&r-2ClUwpMCYuU-|y8 z`PMeBlRY^;wXUXhA&M-gftHR^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{^u|A@0H?#Bp1+s>v0ULVxpCNCxHeh-QiH*BMYad-a$k2Yd~xi1&iCA>x4&}FG5*ic zur^zlGrjrjo<=3zQ;YO1zMp)wWwQG=1|E<42PKR}`f3)}EV{H98&)4mMJ}0SalGh1!-DVY@*W3no3Tm7$aIHA+N9*>w+EhFU|Y6){W>49JcbvS z%kAI&XXq_1H(Ec%XMdwYtUXU(Yf)tcrN9w)je^b*z%0>XrG%^{YGNXZ~k6P<`1n zH_FzKCt$&>7ylXfKPlgX8wrqY* zt+EXgOl$8rCHo#_dfulw?ZV7dj{{F8XfVh7Z|q$wx+HL#rM#DRl*J*pRaT6Rt_(?G zhhCeD{Zie#hdKG_h12t#o-6SC?af%!U>G4Y$^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^fvxW%fEo^M7zI|J(QB%huWdewc2xSsu_Z zW1dG|^25h>++Rk1yernbVCTd`eSHy=CI2(PQP0-fqiA6`?uU@_E(qx{UiU_ zJ9PzH&yf&=V+Qq8J(ea+m6u+8j?LXa)P#}!TkSoE+hYEIP2)c<`7L_x?E;tR4WGmR zWM%IVGZ%6{;_}SwSed-n+G3#--mBh}KD|)SzvG(;!{g-g`CkkFGu*%WpFv7XeVS^5 zdhGfBJ&RWWxf)F8Z?l}+p=LQH$k?6Y31xnS%*{47oM*wKB_(O zGsA)8^0f?+o>H!yJ*z%$;Y^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zcL-v4Zn;4eVbo`p?j-eq-IQN`?99@{j%7 zOpRuoyS%5M+TuTh)WYh##L3GqJYKPYdw${`=Gke_FLe2Dyxae?bovKTKlX4&Pv-ek zeo0L|AS0$^ZX;0lasjWd8q==53wOG=sZNcYIi>O7*}QvqY~L-nIod3#qHed?^z6%? zx=W{(w>>Zjna96l-K0~xpVMVuFfY2e)-NQvsXC-yRBzh3<8Bw3zc?2we7E8GCwlQm z*@?5IED5#GB<-5^Tz|y2UvK5(SpSnL21nJWa%gcVS}4!2xxj9E>M=`0rG#z9is?an zn4d&+eCr8x5IXWCNw0JFQ`^V+A671(6XO*F?n^~m2XMN$zu)yYYbxWD%KXLyVqBcLd^;P-V*ON;l*3N0%u6v<$0rxer`MbKD zitf6(TfB|+o6Pr;UG}xmE&F?oJq%`zv2ne5p21xVZ%Te%_qb@P8~K5C>E>O}f8RLp zH~YESEYFlol_ZsP-5tLsPmX*2`1HbMKiIT=cUJ#Apxw7(&-|Bhc1+1L%xl9MG`MHa zU7&N+LE?Y~Q`fHKFw0L7)r_tT78_+g{tRl*N$)?^rNQXDeXVc$%yr)kPXzAj(qJw- z$?T=Q{lWsCi~Ug=3wYwY%h&&B;ACAkXGzDJx8ZV6cdG6Atn%F?(1G*(T9H5p`TsWo DlFGs< literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c177088cda9b27386632f4348b173938a9cb16fa GIT binary patch literal 1176 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!-Flpe%iasJm=P2kx23nym4*9Jl6cLCx3oj z$9Fxz;M`i7`;CJkb3v<@|M@DP3CC`PCQoRX~OWIVe9SWzg7J;*A-X0wTDl= z7O1rU{KQvP*OO+&_WN&Mn~@o2<+^XNbZn%{2g6$r`kJqQSio;~Yv1!1nqlI~PkYb* zVcXZV9={3d$%iC8j5l*;?He_X(&bnb0i z*rg=TQprioH` z_o?alN@mGL4eAG#EtgF^DiXkYR_p7R-&dve67i-S;KXm7)IsO#lQA^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>8hOB>|Ormu$Y=HTuuc>#5u9;4tgcH6ype z9rNrNBi?qt?PJ$G{)gqupWfKYeOH&d>i^l=@}|Dti{WCsXXe|~oqhk*`V_d|x~VV~ z&PkeB^1}b#zTz(}SLTWC>dc>Yul}nzSJH$kw#W932Up7JZ}vCcvgYBVq?W%LO!{wr z8#rWlPh;QF!~Z&9OH@q-qkhcqgwU&kEl-ym&&!gWB>0(GJ+4xO(a(S5>bKF{)BiJ6 z71%Fzi&MBE6=?tdeDK5^`Dc9m>!XTpA9}8_pvm?H)57_ey&Gy%^FJ!>4tx`ICcholxF6i7o%`8MEj2H!h8}bWk{b{np&Sv*j!MWo=h5D$coe zr-@(TVQc1V^F^a&f3;^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zbpl;$w5OY`YErZ7sVOsy)+Why4Sc`jsnL z_h{{&b(wve#Fcy1I!l9Tp<# z>S0l+&3t4rwQSV{<2h*!ivKQ8-%`l`gRg$6sNIdd{Lft(B7Lo%`7s}{7Y^bT`z-l+ z;otg0T^fw{Z%kLHxqS2obKtgVFXvvjpH%<##i9nKY>NXw*QxwbmVX>z6m`UM-h;<~ zTmLgiX)Itrr}K7k@4e`0_lyiy|1)_hcFrPs%HGr3D-;S0=lo}A6$xNT@)nbn&-%}> MuT><_LH_?u0HMpX`~Uy| literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-2-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-2-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e980ce9d87a0f751a700982c13a7da43ff71eeae GIT binary patch literal 1049 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{;Zvcbrhqv;Ol{|JJh?UjG^Hmv$WU_|NdX zP4iSGPt7#D_AZ7y=6uEz>Nz#nmQ=7t+rPi&9mDgM>1M}&hJ5);QEPF%Ak(V{lgd}vozi+3(JzsIu3t~^5AP2thI8pVCO50gd!RPMRk z{l9^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>87Ld$^c=e!g?QaxL84=ysg(9WRdqPSFdW zTyyy@sOGdLck&-)(WI;UABCM`yKwo7?1wFkMaRB9^WM~!Uf9=iZLzPKp9J5IbM}We zm@L1&iap4HS*}V>>(P0Mn5jMAUpq+UmWX=jH2i1S+W%oyZ%w&?6jNREAFYkMTAB_j zJ>F=t@y?R&-6ywyc@n_7;~lr2m(%f`TK0!#>P#~Dd&g|wkrgY#GR_st?sy;g^WtL_ z2luBA9Ih{)pWg7FVV}k_>DKd13U*Th*c4_g{C)GAcG$mb_M63w8;*AKRDTTX346XK z`UrB@_>&0=V?)SGHJ z;oehC^H{z%!~YC9t&!4fg?s7`ti0VIfBZi~Z2+si(F?g1wR;x&W~#AlKGs^xQd+W) zo%Qp-uhwS|{JvCwKZMcwZSSo+{682MtrKT?ZY2LhRD|JX)H%gz;`Yt`A6Dvxow|83 z;?ATK(oGg;MFLn}W@deG);d|hvS0$A#d7cDd?7Yt|K{TifvyZnnICqX*fINK;6GEv zOYYgr{{+^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>9XN?-{m;soUBGdu`lczjxDC^ZZhzVR=3*zDG2&8M|~x=HfW zDRm``MV>lWH{|lmP5#gDb>*UHvxNO=J7VT73aDQi7}IHAQT!z_Ea!^!v?LD~$tTYm zbno82d27>Z-@=`31q>E{v)IHkrFQO`!}fAU<3G2Rr>$e}mZ}%tGJY9&_vF6XuDXz) zt_*SaQ~xvApa0KL=PNp6;%=VxUK-5qZqgYRG9_< literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5a0244350e24bdac7b4b236c49e38652377dbbd2 GIT binary patch literal 1094 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{@tBcLZL!+pgaHq4oQ%FZGK3=NWIGUz+&3 zY_;rZlXSy= zu|DCWXvgl$Y77%j@o`wJmzh?*V(#>_Ng)%Q8S3XU*caGJ)RhR-W{K`glgN0K{9fWL zZ;8mCYa0b$E$M&lAg(iE=4s&rqDxa=eXM&DIsOo<*kleZ2pV&0ev|ho_g_cATJC z@pne?e}-%8XXP*a^enL_fW121>Qz)oQUA|OIq4f;OrPA--e{G#;o$U6Hb*DRIs5Zj44>JYPVeBU?&?3QWwztdy0sIT*@E0J zO?dh6g!E7KOAV$aPdL-%W!!W>TAK%TCoBb&IM)I+^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!+{G5XJ#I)n%B-^CrjETh9D=p3A^K zY`y)aAI0g#d7JAqXA1mhIB)t_gZZ3ULO=m~U|fIYgIcRgYM)N;?rZ%O&R>&Pa(i0u z!_HufFu^W{1qSYt_Krboj4gg9Ox@R&IVnDlf3BXy!hi2i&p*9zMO1ZLyn(NFRa^1- zA5siEblw&IXOR0;XA+!v^=ZVRX-}$VX)xccvCMA?j+?v4wPD!~UnUu)!npn=uGXnM>MayTwQiHW+{-Z03_vP7tO!*phYR|>QD{F76#w~6;?sZT+ z_}1JPM+7fik9_zyir14zzhx)$lz-oMEa2C;w&irM(36Ef7v&$@bS+KgLFu~hk67YD zAE~df3762Fp7GPc?h0dI^Tu-rGFIoZ+wgE{Fu&AgQxMJGI`8otIk~;N11IzDnZ#i0 zG}%>z@srEW+H=Qs?i<=Yo10v$JE=1%&$!L`!bMkxnCan}hc@(Q*lrG7w^Su>y~K@I yMUsBJA^~j6wtcsH)|$QM)CrrFHtlh5{N4UDNFDstz|^I|V32;POJf25|C<2x=E%eV literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..86f18817e146ad28685b2c47f2ca222f392d252f GIT binary patch literal 1219 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^imT(fQ9V^ruew_$&0rv}+!RC7%0yyT|`! zjd#VF%{*V$E_uP!^Np#&bjw^t^*ON)@0J;Vn#rJSy8T=BedFTzCTo7JjSH@{F41Jk zR2ICV_59;nZeJ(Q=Yl_lHIIimu`r=^i=NEyUK#) zY!-)F1Mg1`uW??rg=^Y`N%GcD6VF|+;(9tQtvo&B<}R7!^~-8kF#AQC{1D|nUaXi` zaEVp1_Jh@xq+e&;I4&PlU-omx!&*PX5Xq-AHlJAIZ5F|J{niYhK5mH_ldAddO<`QK z{n{kn)5~wUEMHLj#(#g5ww>+LVjZ1md!IlD(cF+Wi$_}*G$sFj(%ZGd;=t<=<=D*& z6y93!_Itfdz9MA8wP6A~mwDL&u3N=_XL#E5)f~RSdQ!Cdt$udib)h+D)h)h$5#e=7 zub(`@{+3Kw>6^2r2M&n_?6~>&D z*%wB?3~%dx%?Z&bCs`%`$zbAGkSzD;9jD~Om5;!@gsVe>Ir84(@bJt3AH{tZT;F*^SLAHD!1IGhAELps{b-#z@D?2`*Dlk~Y>o@&>(m^Xz#jZ{Q5Qp>XSrxf z?7T!BaU0h7XIag$o9{N=y!pMW&&XC|QG#C literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e529cc728f0822bb4e05cfbffa92a0742305ae62 GIT binary patch literal 1213 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)NX4-IX$%BW}7h0bMNg~S zw~j3N_l6_9aYTuN|JNi!ZwAn1Bobu<4$E)f(rUvteJH!iT zG8{kSC~^Fy@5G9;=`Yp=E^R%`d$`VjZI;Dr2hnS8t=B?+zc@Jk6<=nlZqU2fs1)&F z6&w50ii`n0{m0oRbgf-^R5|LPk;Z{!;fZfgJ^!FmC&H+6Ysq(^`CmGdC7$!um(BkZ zxSG4>g=6K?e(nSJ{HM*o+M9ISDDUTYC4KvH)!A2mT~?nv=aFb>KoR#R&wn4kFW}|w zO+2$?>zT(lQ*3H0U%RF(nqa~5`D(jb7sI7Kb)%`}wW}v^WKD^Fx+%`NZ@#%{MwCg; znM>|X9o zyL`&cLP7q$P}Q$MSB9Jjn<}>nrN%-hZC0^lv7c(*u;z92O1)VRmnOZFSM4v#Skxf% zXz`*hhUgj7(l$+)#J#Yye?f4c-GavXSzXU6E}XF0f9G)P4L)^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>5qFGegd*9$E0X)kuCyU2Rsxx^+gEZ9c6N zx47qb^v|zZrvjc8oa3u+5xjio>XzM_^3%Fb{XCg`{tx%-KP#A?-_~Om%X}7O!Tn4q zq^f%3>iX=R+j!cZB^xuW5j|a5`A_iG^Dk>mCoFDf`Popj_gnSv?VlE=7b+YU%{%^k z=Bv8p*BY$2&&EYpu&y!oO0)PZvoUG;@5T2vKe?K}c1rv1DccJt6u$ks=AyQ{TDT~avcA>Xd~N8w&zLyetZny z7B!gtX;(-+FL!9l?QQPoD&B7ieay9giE z_VLTVyBL*fl(B%TU$Ok&ed9@f&)!wf|FG)V0~MwuPTf<#%g$fx(qIgFIqAX)k-XcJ ziqG*Uz6{`$P@i#RnhN82=F1-zbunz3w5L#yQ}1nq=VQC&H>yJ19{JuDb3bM-raswK zgyHL+DQ4XJu1X%O`p+;ws`snpcj4VVkLCU|JaiRd+@70r&uQi|oj1mx`ZRz>{l5tS Dea7l8 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..81aeabcd29ef4b63b0127086da7b3049f1a899e6 GIT binary patch literal 1036 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>7ho%69iRL~S^)!eq~QR{oaRxreSz^MfXB zczz+we&)mtHLHKkntsM5hKbWAq3l1y>j1XXF%hh%U5)0uOp*EZRer6ZzRAm_g2%o$ z_Wx$wzc#5+^~${vce~|V^CP2z1;V)z69h{M;@F ze2UOu*(}3gsd8#c(dMDa&e}V{@RO1H(&KhL5fciMFeA z&r2Sw3awmQu&TWFy<>E*yxi5WXEs_-WSFmCY7jbS(k2>l%=pT@Wm}Zor@3~i=qr~n zt+;LWlf|LIz4!vxt1n+Kzj@4lj#rs~W`7mK-X$+O^H??sd=@;N{O&jZ$F++yq%J-R zY&hj+&$Tpr<;~^11&y_5)3ScOneKHVYFeLM&t1v?3upc_ga3&HI`C~TpLF-|gh-h_HdfPCkpO01prHK!n*fH*hNJ)h literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..687b6b789235c63377900e8fb1b3c23e0b648d58 GIT binary patch literal 1144 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{=RFg*e|V={YHqX3i(&^TkGP-hlD?K~R1ZNs$p*(bPMZ}9zR@VY#Yf731D`TFdF$Cl6ewejl$E`8-YK9@W~ zHojXWQs>lXm;o#M@4(QySQa*yM$Jp(oG?S#{yXS?MQd)>!pv*9T0pzvFd|agyr!t98MDR_o=uX?$4x>=zfqCaL#n7fT9z zk}rP}^$WHv?aLHBRAkl@JU>vdVNHw2UEv+SE-C08?GLkDz?&;|zhteUj6U=0xYh@2 z4en)g97zqH9Md;9|7o<_j3=M6Z`#SetP5Q~?{w1@#(RzeeWC##2j05+x-!(%ZTVoa zsEeUHB<9716Z>oPe4OoicJH5IKR4mD*3EZZOP9S!vEA3aRV0Az;)e^HF0B0;y>idV zbrBpB?Orh%PkxnoO`ub6anF~tA_45F%N^AAblEj*t$x>-F>O~$*8aO9feunz0$myE H|K9`va&O7% literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..0545dc75d7d34df61776cecefd9aa036de3f1fb4 GIT binary patch literal 1080 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zabmB9Ff};?oK=!!8A1^I(@e_UEI|JVmX} z2T#h6hnj|;OG{X;pV&bvMHyQcMV zOObsE6Vey=d3^mY|Ik6I?UL$AbH4j}54T$N2c9)m+%{o?>dYBDtp`~8^Rn%%SF#1p zm^i1W%x=+?vy|)q*mcina>VJm)^Z#aPHSC>axV7`dJN_sQ#>7b# zd;woy@jGdz+&329!hGd(@ET@@2kCNCR_7Tyh<15ZnMssdF8Or7tX!}9bC{ffVc(zN zYjTdV8cYj2_FG@6Gm$7ynCbAZwE8qlpXK7yl5$rVeUomL=d;TidtKBnib=LSAglGD zC-1CWzzNG|4H~m6PM)9nD=>JAm&7}piw;tmX-62RzI^R}xy#e* zY(+vgMyt#(SC?BZf2m7@N%te?G<%IFAMCP3AL|9U?Bt4`GjD#cNC3-guB}@(uUe;k nP&q%Ker=dg>YSXI^|GuY0ZgtYc`dshHXc00q_L=r;r~ql+asa9 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..77086892bbc3508d491a126cea3e2a87434a9f1b GIT binary patch literal 1144 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^clKr-Uw?Dm?$|{J*Wy8@6xQn=Joc@Wju$ zn&)3$M=VO7d*Dy|B>S~mXP@kQs=~K3uJFBsbbZox@AaEKCTYusy#M|9cHh>dOE+_$ zPUh^psXHm#DAxP!w2#M5iG{p4@b$as<{ZveZrL*qcWQkZvNAX3O_2H$&waBq?_rR| zIsXgcqKh3TajtusH{JQeyw$4>Z$F9N;Qa66gSur6Hq(#oS|hc+d#m=QOB;-)_AF!( zjh~YIX9czsw3xmt6!EWRh)UmnUiggt z+X?>}q_o;+I4W%8U#78ulSOdlp`CIMf{%DMeirPTA)0bTg30cM(wvX$mom6!W=*#hn=$`LR+7y?(p*2b3g~X@&r3{tFC(Bpdw%xh((*yyQ z^g_9iqpq}4Me zaxEYBv9B-*bdV}*=q^!tGI3INwO5C@NT7q<^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^bVtZcJjmT=nOoRM5wg=oRPO+(P+a>P(e2wJZ1$T@Nif=B6E1UHds0F5Z>iF~XQoYF zbMeEg;;#$%KE%ZKxvo5aB`C(Xyfj;dKXZqHLeG`5T~o@-GL<|m-yC1+DYsB+j%2dj z?G;S>=0A9w^iDJ*A*lCaCquo}^3@sNtweU4G9}x;S@!Dfgn7|LuD4yQBTb#mMa(AN)RAXq_l< z6=BRi)z2_v!(2;~Hj{%#vcg}7rQAqj-s;Bw?qi<@ldweSX}2Zydjl<=$TqVtSiR}b z#*Zgfc!X)N*-J6#E*CU(W6-V&_g@wr5$AMpac8Pb$-1xrn|thqv2vZZ+s{nrS>ZMH zT;aqnhMS+f4yE=UDLND)z-Ia8@Tc`o%^|+ghuL0hKX+?YW8R$nQ*P_CizhQS$$#nN zIH>dU#ILZaeG6r0-Eqve+OezWSkm3A`&;^JKK{7C&c1R@dH5%ZBQ$jWv~-+1a`@nDlMG3mo*fcEg9g{6)uzG6ROox2GVqmyj({Bupnv{Ki``@{<-1xfL T9`4@BUht~&s7RoL{QsK(G+WIZ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6908efcdec07912411dd0edd3a1f9db578cf5e12 GIT binary patch literal 1150 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>8!P+;ZVP{snK^r&x#l&HSLd`-GUsve@Gp zchwblr}sx4yR0|s+}9NQf)Dq-UM+3A_l#|lC7bk|=L;9`MCPqsI3ewb;KaF?wtLNc z^h_d^Yg&O|!+~v&=lnBu4=OlwuuVnY{QC7j^;S80dRsm){{6zvP+#fGkiXgKms6Z0 z57!~zNt*p-#uxrGSS?81ee%XD_C>eX{|Ko{y|l#K?30{|li|Gf74~z(`a@^var5*C zJBTOmxbk?4MdXrrhc5O{t525~{Ee#U|LxuXI+C;QlqZX({o7f^ah;o=O-+1rg>lzr zFLxo!?|15tbv>QC@J?atH_1f}+O_k!Pufq7*c!=^uzAV|}w8yTzA9XY{_FuVR?}hJ&x>X7THzp5G**CvjRx zJ}3^`R@MA7xJmxq{8J5D(h|mV*Vr~Leq&Hyy5DN|)9uS&yHB}yf5rl?`o!knYyUIU z28Qoh_BH-o7sD6t^{o?*<|_YZ$gu9v6D>z`|zT*_qFxUU4dG6>$? zGb?dsDD&dCIemOp3BhaE$2~bM{V+N)B~_L~B+x?>TCr{=+x-#dZ(1 zis!8=8GRqT`rHdL7BvX{sqGJ(bw_5!&na);R5H!n!{q&mJ;CatD}&pvsSD*lzNy#$ Lw-;!V{QsK(vKG$? literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ef1cfcc360263b51812743d9269ba70e53ffe228 GIT binary patch literal 1075 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{4FPi6@M|+ z+}AH_ANO z`#MXu)wi2VlP(_LFmm zTr1-}_uTyn{~4qh7ERl*T1ZLa%kr&z)c-~5zYa?l@KorHJZy!OvLLO)Ao;|3Ev>0n4~E!!+B>?6FveX<+Ae5j$)}w# h-Cuz9?u20Gm+yhXBHy(|k94rR{d=*fON06UO#sXBpThtE literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..3cff32e98873f710e4769a05e2a8c1a4455ae783 GIT binary patch literal 1069 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!zV%6{|qhxc9XiC*_Iq{JN|d;s`y)c?OL7x z8EP&^2hHtsV*C=tut(QaHRyJmtHpVsElcoy`|o#C|1)H&f9L=E(Kpvapu+z9y9U#H=PakR#WerBvFiTK zfIg@CCthdGpJ(2B!~eT!(eIS`pYQpf2w+?7(C}bgy_B{}{0{kw`3C|Wr2e_Ye?F=4 zN$EesJkOt@2ZiL0+rRJsu=teU4WP~c8Gc=13~&_x^U42IzncEfC-bL9M@-$7WB={) ze}=VQx}X1O|7WPT2P*PE+5NB59q6?S2_63#POJP`^<#@l!Rr4Ewf`BuuH>EF*9r8= zw)uav7#2Tq{m)>N3^YB{rlbCOPyP3^v1Xf?zl+Pi2P$1<-k(-1?>FE6KSNZ5)=z=| z4Cf{Gzn`V~?2$l0(qxkWmi<|-?9wN{Gj+TZ@@ZPL_s8)cfvyaZH~Qv?%TKkP>hSP> ze@uO=NC4B~l|LPFeog+*aBa!7_{}R-41bvejqK83T5{_^K-saM-xL3d&edC5X!+Bi Zq4eZgkpR}P&o`dzIDf56V*&sFn*ad7vU30c literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..73aefd99c7fff00d05c4747858a257e267cfdb5d GIT binary patch literal 1068 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^hb@f~^v7uPwW#62D!>%xO{M+s4S(C7V1N z+w2n0X-*I3%v)0P!IvS&x8!wxrig8rT~XoLaHBY%N{+(+48De;dU~R12N)Xy*jUZq zCT}wMqrvnk`rdP`)$@P7$#RwIS{dWoeBCIlV7Kx@<$ugxdFAzD_76-L7t0tk|GwJ) zVcHtevH-q2$?|m@|6OBzSJ&;eeU*K~e}?-ej7xG3{!_4<6d1Yei}0bx|Cn7F;he{zXF(TIvmbV zX{g`r(4_zK$^5C2i9*HC)?Y6F&k!|d;*##2F@mq>|J%wC`bp`;-%I~OYUk-ZKjnXF zUG4nk=k|ZUu*4ww$ML^kG?+TJ^>cq>{+oH|p5lK7oeBR$GY(WdU%ul%gH$G?ySn`J z9~W5cT;x9=vp>}}xg`C^iv?U_@w>gZ>D=yNVV)nPc`K_^Kl~zN{)s?WhAiJTYiuMo z&v($WxA2{IyYX$$MOOw-(KUX~9-k(^asLszkavqq@4DjG&3`o(HHg=4VE^v&k7@O( e3yuHQ&p*_q!L(R-&d literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-3-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-3-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..71a315c9a483ebc4f9a01ac75305efc471cb1fdc GIT binary patch literal 1044 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>7b#NgHFHUtaacmSn5;7C-ly_pea?+NNnA zLyHRhe{Z?A-^oh;RD-F@CKnFxm9zid77k6jn!lJm_psnQ$5rsS(O-V5{HYl$DOe?o-KmM!bZ?@?JHaCXk`ChlR8!xTcqnDP(apPA2 zlOszaUo!i4l`G;0;gqfxtcrvL{ZEo5pU&}jh`+Y9DGGs_h?W=r#uS;VA|Nol+ DeR7h< literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c65b2563ae6658e2962fb5c9ff4c64133426301e GIT binary patch literal 1082 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}qmYpW2I??m+nc;ZMNAj&I(Q-GHVu!bmcHW;D4aL-**%*NvD=$XTeff6W$akg77{LRlOU5YuN`RS zgxBF~CYLn74mt27Y~573m(v=oeoNS24C=bHsa@>!Q4z+sPSYk$Yp^T(_^$u&)JN7k zLJOtMXUhLxdtzO>?`|`xDdNnFwx9j-KJN6#bdS$#a<`hqCEJCx%l0dOJ^wsT)oN<8 zgWPV`%h4xUpQx*;MT+!2{?BkV#{J0LDt>{AZQkACy7?lWLPCa@Rrd#Frys7Gbf=

edBiAk)28v pU4Qx4rp+_ZSk$22z^t(D^Wh6Unv1#^zF2#--@MkPv4H>oO#m`QtYH8E literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1fb414cb62c45a4bbcc054e19dcecc75bbfa8581 GIT binary patch literal 1203 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`l*#I+sUlYJ9HPZ>p2Xx}=>uDWi3le7R!% zw5(boog9gE#*hCkNc`|_;?l(lckXOiV}H~2@z*SdpI_Ih1~(n4k}8TlVHftIR`c22 zn8Z1CBGMWE8TJ)Ai0edn^z139SluYT^JsdMVqfCZrZb0GN<=fZyzvM*X1jv8uTHHPpZc;t%{K~zU*41caAbRa*4dJ@Fa`F>8Od)O1AiF3Ou4k+r(*_VT(!(K z*H`|me{Rp2yl2io%LRN_DvX^2`!@=|OD+DJv8GyIBIaPu#xtGT`qH!4X)NH6xtRES z>*IPE{eRaVTUVP-G`o3gg~B$wbk+WsUEg_?bQIQ4-&46#Z{y>$c@OODFU?dw@3it$ z|5FDE9htHq{>9CnorZJ!e-ww_R(@L8Wb5h@!zVF+#RBeh<@ehCt7hHXmRP>jUEyHH z`Dynr?JTxwtoto^qs?^d!`qK_k4y{l@SJPsd;CYc@~w(wfScl`p1;y*8# zXMFm6YJ#sx&6rg_DMhD13n+U zQ!WrA^y0aa-=238#~;rEsx#+Re#*(hXH<2WcTY>ojzwJzp<5@*c-XbAiCi4zHK|A3 zjfcYmDEj&I=)?%5B6?QY3+X&#Gm#`V^M=eY|!;Lv*sRQ3}`Lx K0`l$u-vj`zzvmJF literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..2ce6c5d265d4f996677b9865014f75c6e641c17b GIT binary patch literal 1189 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)NQ0dFymMj%4TO9L_k#E%>5t>Rg%4R(~cm zEMAtqK`LeuYpcpnktWU_!xP`vc;7g>ZlUV_@BXKoZ(Lw2+Op!{k|NKgMwJujz^DD*#MC%?oeUjDFX)e-}x)=w&rm!Iu_ z?aB}yaWKBhX|YM5gV^Jr57}-0-m6`;_Dbs7(;J_Z$!aWWkd~R96ne}<;&m`bYR+5E z`>W+YEb3yICu{c3mEEBJzWX1o{5Rcun)mV4`u_-YWw8D&_Cknf!t+=4hq^Qt@c+LF E0E$@a6aWAK literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8375580d52411b2eb07868e496e0a57551c23bd6 GIT binary patch literal 1147 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>6T9cNG)#B)xfr3@=|cRq4#vVz{otz;Ng> z3t#igAjYB_O47}J^A(r>44?7n-s68iOc+HE*RD~h-pS$D#lR4<&08jz<5F3|=`D&9 z3}64e__TiG{LL|puY#r~?F-_+xz57!_Y}s&qpp2fXPW2D_+}c@m%$h(vSZW4$SxZl zRX5qjpZ>46Z9b!+%%yJ0uDEgX{HUv261ID+x#4LnE$?urKIWgOSFlaqiI)ngs(t}q zMHs{16ihI-d=MC1yKwik{|x(lMHmy`r?f_%`DD|sB71y&+3^?bj{|S0OfR>b<{rxY z{O7(`ztXS#x+Gm)R`iUM(`NpRuYX>;?%|YHXbY4s3a^j9)}VIfYsK9o1&mL5wA3nc zs{S)DnhY7Ws#H{IA%bJ4k;1(N^(PYqMwL3u9NsP1{xG zPU>H{sKLaozx3p1#lM-4U3OUz3?=n3;)xGxy)P?)>AypYuNgT^V$u zO3wr^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>1`t1~HPKIF8>vE;m*9rmN=9cSi2Dd+I`S z?tK3K@v8`T&-}05zXDi|GsTXwJ>cED?SubX&88=S0INWiTBpK526?R&{&JBLmGnJ0_;t zOzr5=->y7MgSovscyF3c`h@3;o)msvRGUVDF`vfqp0LU%x0rAy&W!{omwJN{IPuE@&uu zl}i4)B6(%+`}3>b>#ljUtu>+1$!%|Y@VnXK(pbRKc6FK4!G?p!O#)pR>i^#a00D30X8-^I literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..2456c7872e0ec01e58efaecfbb1fa42129aac6aa GIT binary patch literal 1275 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^1ZwKfh}CYYDc*?^mw9BLDbpY-`_K)+u$N z`z(K-yIq(14G zHQAllMj6 zXN6CEsyJuAfAFlj*^JXlI-VTA^1&*AJ$m8GH`B_tH5Tf;eeOB&yz*1|@8>_Sd;duE z(Tg~iEtiseW8d?=6xetF?t1&x$)8r)v0h$spz3nnMT==-LA^s zx3vni3ct0fysi2E({lm$`W1IKYnvX~?Z~3``254D&5e`XolmUGo#opTCCSvcu<_)t z`Tkii)_y;|?AB=|k+dErj^lnBOhT56=7rDFV4C|N!}|!oVwdoj*HODvcYLZjXII?# zMq^QfZNKZ?1wX_Ct~_8|C&c{p+hIAzKb&VPzJJqw-Spl>*=F)2Uy%S->Dd*z0b9Ns zP2e+>asIV6?Ot4TwCsi@pDdNt+!*Sbx-^(C*YG}Ap}$Tc`_p8f$3^SyqW%_NUt1C{ oVq=@TJR^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{-Z@E7`sBtfVSlItX=p&vo|OvuShdvYiQ& zT%~#@g>ESPVfbhDst@IdD&?N4Up0$~E&U|$E~5Xp`|_XfBj*WaOg|b`6eFZCEs=-IBoDxAbRh`@`znmN^JQqx&3Ew-`wRfrD{Xo z@_$Sr0c^Hw;&Kn^=PlcH*6hZeSa%7@lP@EzLhP%8zlgr5}CAHB+dva8=)-`4Gn_OR-03EMR90>*_SgJosAV#e?4l3jY}tT}2odrVI3m dIKGTK`r+R}<;_ALJQsB_yn6v8G=TX3O#pBYhYbJ# literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..71e1ea2777e0d56d5d4ef4b784f2c396ef37815e GIT binary patch literal 1145 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#LwocG-=1k}ze&_gXI`}N`DfFo+dtmPEN8p- zk!wO-IJ4yX@{L#CZjH|UuuX=4CVyaz`w?mG9SotJ+YA|yZKi-Mf-wPl|gWmcSDm%;S(?9si~qBDdTPn?hcw>R9owYXDS zrS_VP{C|d66F2)E`{!!(|84p6f+=AUZGV96-lGcr z?AAfkGygLrHAr1lIbQdKU8bq}qMt(Z#d<9b<_o%c%QntU?d;n1MQPc`vURhTx69-x zJ>}40IH9~#^u){XZQ=hJcFld-_jrTR9PQuc7!`W*fh)Ln3T z|J$&Kjt3Pc_g`AEW_Glq$N75_4=$|vczU10f$Bb9hS-WgnbmhS60cOMT=Wt5-NL__ zc}qf`?~PySTSXYo2p_xh;PHy7VTg3Y)|18>Gr&qc~=4*_?hoqK32acV^M<)=fBT&C4sIC I_5W`I0IQ11#sB~S literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4cb8fe008c1bb98cbc79a21d78942d449eb34ed1 GIT binary patch literal 1122 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^abP^(8^^GuD4hUuRXz@g~#v{;UYFobCn3!bb_U7U54a`fErr9Ol6x6Ef_j<8b zN#OQzi5IL4nGwhLMZGtX4pzCi%xZ%6giDEcUdQ!5yy9JN^vX}U$yizV2IDM-&-1&Y zrijlon07;RVop+ofy_GV`Ojmbm+o4Tui7=usn}HiXXxcq?8?_&yTRIgmdE)Y@=>dFm+~B# zxOKPiy*V5GHm(v{+sEeTW@|TvQQ5|^L+t#2hI;=WfxcpI?rfC1Y0E0YXu7C!df>{m zW3|}}9n2Yj1iCVm{IYRY+LbSOuH<~X)SQohe>NSQc*F4EUyVf#Hs%>8AN*&y@7BZb if2~V{u`Wh_LQvDr^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!$+gZ2J(u^vc;EX2o=tslF%bpVOst4YyP>( z{onpGSTQV1ob$m!^1+j@%cL`>e36+SwXf_y!}k9SwL!A`dV!P_!-8BD^$m}gWhOOw zEDip9?d7apW%JI0WOgsUx%AokeBqiE($$mhGPt+~(T`C&~LbWXW=%zWf#GpG5D1~Xgs z5_isN0bL>qj}>^*x>&D#+|03t(dlSI(axA}uU#1mk3G8G{AAz#M@QO~zpPZLPLxQL zX(>Olf1*r?eDdV7nj?~5-g|B9+ri`_ch_M7>)F+EVl|I#JnRq6iMnsWZ|~E1@T^JH zgMt^9Po(m1oDZ~+c*6IEq5XuyjvX@u4+b^&*KOUsXhzayy>)vIrA`+(KK1seugQN} zlh&>{ab|`4<%zTIwz^E)5bd_WZRYJebLM$|U%-2x|Mq5sB+irPilgK#uN|9SzARJW zn2TWLb*>oZy}#-l>b9`v{`KdkEVcjJFQ z33O%9u*?&6f1p`ZJV*bjs|Z8FiBmHqllx|@>vr2NeYHH9d6|*Mq6X_)x2IdyGrTev neBx_&J5>3Hvz-4Ej`b>*>Xt7rb!jl}%zrO`u1jM9|Nol+-vr)z literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..9ab463bf602c9d13dba5b591e6e6823cab621e5e GIT binary patch literal 1160 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?h2~cK+SGRAQO>+pq&VGyf_6(fw!l^{Ks3 z$&9yK>$f;J$gfztRy!b9J;M8TX}Yc7!v1O9o*Px# zdGX7a#${b z?#3Ti&mX7@;h%n~L6f+p2Wj7A zkqZ4nO|fXXT$h`$(_l|IGjG%F1COsS^=DhT@A8}PVwcR=?=gQ}bNfp6w4jOm z!h0rO31FL9?Xk{gr&7`K#ghKdFRi_MG?C?m*bSS!#w)w$%nzt*H*NUOkU2@?>Y}0( zX3u3^ef~3K?AYEbD;cFw_N4SILuUV`$K5K&F94k=I{8TqSCCXcRtwf;8&AC V2hRQ~_Lx9d2J2jrKnMB%HvxEn%~1dV literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f108b350e0b1f8a059b8f59c8b3d330b99e2b0a4 GIT binary patch literal 1031 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^Z{NRd`O!lz+<=u$_C3$DD6>w9dWZiwMeR z{&D=dgW%8U$;@Z^KQA%5XD*kN{5oi6NWH|L7sh;NGMMy@KDrC7HJtV4Yt7Y$r@Qj) zT}}4yc{5plkrcy%lf@I9CO6O8t+Q75O}TW6w7d59wI0elj=2c`XSmNc_espWy7T6b zwlMlVvV4~(mr^W|{N2OyUr6ZtO?Uq@oL_VQ`&ki2wHMnSM7aN0R=?K5;}zR!kA^Qd zwoaOOr~h&Np=Gy=x6hQ}_u>DrfctG>1^a0sjc=|ie6N16*(rBZ{&DCwKR27}e^$0x zx_ins=yG>YD!R1)@Av-<*Oyi|H}BZ^Yx{qOxK(do(`JW-`@W%z5QmHBv zjKA9dt(xTd{l&T+PgP}qrL8jEd-9*ne})4qKO8r5)+y2`nNnZ9lp+7Nhuuj|^Pi#BHdj6I_|*RlwelYpbum=kjG1`Y_2(>&MGf}^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^fk2PXuf({*?c)G`RA_XE(;obqf)8%&9KlD3$&2nc@{|u?SkN;}>6H(u* zepBy1!}Ip%O8*&p864^^8MvN2zd>one}+u$GiUBMu6DZi;y=S_`9B@|AA5eYUR2R+ z|LsD3FGJc%o+opZ&0hv`ybpO8EO&MNH|_mDAJo6!_|Ig1^6vi(^LYO=)bf8^z;j;f z%h%Um7j4;hviv`TP4vIt@{e5^A}T%ZnYr9ZzH+6m+K?-Ek;PY~6(+(qJlZ;f8FzkDMOU8+w*7JJN9zBB{j*}#vtv0QUiPmQVccNyy6-LjYv&tYb5neN zYcA?y=()Xt{d;r&H~U{-<~iE@-2dbGe}=d&4aT|?H~%xl03#szKf`+ef9LD$YwX|m z|Jy4P!0@Z2qw&n^<`?t-R;}I4+i&on;lBLeDvbr~e`oH0zWyIj&-F!J8qEK10sx0& B#a93T literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-4-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-4-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5dc4a51bf8775ef259b5f4a18b776c755603c9f1 GIT binary patch literal 1059 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^eupyL#2wjE-K>cs85G+;Hd5NKTf#*Ik!? zt6mIp;c>8;aHw_bF3Y34=PzVy(D>Wu_H-GKyZ?lX-^9=VI@tX0aOi)A&9VB?nfu?* za^^kopJ93>kj1cO!X1S}=NRO=uDsn|d18mz${`W&B*NMGJGwKiUGPnf2 zn3w*a;kd8CVM|M+x`ZoFHoRJAw<@#EfsgOuSGERa!I<*IpHiCtlKwMPbur9T70mGS zGgetro3UZ`n{P`Se0J9htkTUdxc2c-tl2{K^=oaSHoEft;J(a$twHas@u}nA&+R+K z>atC6$H^Tt(*LgNiCiJ^dH#9@`G0#AxBh#xsZQTPJaOB$=6_Mf!hfHw<~h5ivT)&- z(}I7qEt5+hc&pjJUaAppn_B<-U4!o0yI0a@JdRIP)sEk+$#>iHOV*+b%vWd3FIzF| zjNE^Q*#WF=Gr!Bk`LQpn|8*raFzZ2L3NS2yuD&W2a#ZxslY{biO=OJ{Zr7anWZNqe zz+At1Is5ygzb@4_J^p>MF0D(0aoMH9>!<&m{}GZa(tSn!S^XiPSnt$V>@lS)W+m)( ST-3#oIJ1^lB+x^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^gv-$BbmsUu13BaM$o)(BWI_es=!-`15kj z(SJYwykKf*dT1^vJju-}V4`2ce9iC4eOmwCyZ_BNc|87FgHh|6#WeXeY|o>p!i(Yzy6f#-;-43wR(1b5n(h5TNZIR z<-wN&i*}`5T+CRuS>gEIpaP8re3tK2{Oqn8*B@Z~H|55(i3_e|(#;tm3x4N}bZe-!>hb zp)nJCroH^K%$+fEdIbZ&^DKrd5xI9o-p=KGyGQ0-Za5=l;32zn z&0MY%v9X;pX%-*Oeto08Wt;SUyD5zEZ?^CK%25BdW6{=2!W$Aj7d6;)pLME|Do9oC zx#-HEXY9GDOM|gz<_hU21sRJPY=!+ci&>=v_J}7)-Y8ewvZl`AO!X{aaAb#Ge^Tq@ V+HF literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ced9021cf39b751849d6675e9aa615e3d2602a2b GIT binary patch literal 910 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}ndrp56|O2PJH}e%?MFW&h2;Hn~PQTACo-AuXMrR$b;Pii@=_|2yI=kw1C`1vQ~vMn-Ady<<|XUZURfpxX( znZ;dS^7#*#Ef+oXvM_II-PV`0c=w5BFmKq>{#Q0*^|g)li`R-U?)LU{Ww6?8H@LG5A5$>a+Nuo!b zx)?Thd1)+Q+Vsb_?3$d!RlUjYU9*+>*WJ=sz&~wvbJrxsnXV!M?8Ognw2AzBwAb3L Tr)Eo_gKSJPhsL5VhW|GK$r@6= literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f1797f8366c9a03ae8c16b67a181a3177891ad40 GIT binary patch literal 1099 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*^+w+fo--W|l=A?U`2o?WKtjk7)ig{(#z} zz6^)>mwG$M+gH4QDEe&1+Uh0iZ@rm3MEFBHe-~u=cl^y@etO?Xz#`NA0iWi>#md@-_96cnn4|6~ zf0(xN;qGtS_HC_5ky&B0xlT89xb;I2+Z{4l7`O2F|yBhbm zxt_B<_=YGEi{)BMmG8(O+WW7I;m0)Zj5kZeE4(&X zhQBh7jXk~g?Hcomk8@5)JifmFb=+fMSlmkQ42xc^FfFRN=!pKir}l3dFZ^fNVjuN! z*@w6P8QN#PcfXSRq%Fj*#BnE&mC*8qvQ`0XG2)YND|*aXHF-{8pq0Rrq%MYEpSm;_ zuq^7*U;yD&QOhQ#uDK^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>8c-j4u0vGsoqtg8MIvs#LYEKE3_TwpWYQ zb$9kz^ZB~ve%lbLF8PktHutponW`#A2Qh^!$~!BS`Yf&nq}FUbR_p(1<=k>NH%ny+ z((sa3Z*XUEzzY#J`AT+g43FrR@16B7pZz z%+rn+_Q$U+3H4}r{Dl1(^A6jro{63^pA-Y9<6>jPW0~YmUIxF9 zYR`L@GVpQp&3xUpQ(9-+#}muTr9JHy|7Td+b;j)DTg|7(H`|w29;?mzJ59{IftBIU zVIF_w^*_HYV7#o*!&jR*>8IC5L!M}9iRTUC`=7X97q#ZfXoy*T$RX))5mS9f@t@5O z0yY!=tnzdHbDyhy*f{aBPT~CJTSbFU2eE}(NXT0*YS1;CY*hR5v5Z`YzvKLi4>eFcw|*ZF)QVuUaa%#Kiq&dpXXrn}%uTCe1J~*WH}?WW~ASw?IXu*ZB@_ zShjjgkWN=!iemefVpkD{+dFg(^b literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f56bee9d95154c1ab03de10ef72bf34e747067ae GIT binary patch literal 1110 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 J62SidCIB0)(WL+Y literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6167a76c338551c7c759d5bca6486938d8d4eca8 GIT binary patch literal 867 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^0Utd|Q?KGG{z%5Eos%; zo}zgC1#f_8x#!H>uicjNEkY~m?rU1uFEnA?n3$Ko)8oK7Kkd7F%u{r}oVYGwv0nef zwh3p~ZpkrzvNOnijSOv9F$<%AML8qCAU1^Fexl zoaUl=TNvNnW8dz*WAPOS`ImxA+W)>u+#is=YaRDP(-ZR#trxVn-ScMt2jMpPGuNvf zSVaQCSl;M$*`xcxJ35Ltxy4`GcqieaD+9NGl*R)7&>z-ir%PAf{LjGcHt8>iYW<2o RtFNtC)WD?y!S?@e0stt&K0g2e literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5da0a35695abb3947dd3170cda6ba359a8a924e3 GIT binary patch literal 1154 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 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8fc93158ba6c0a7d3ced6836dcfe2d2d4b074b03 GIT binary patch literal 1122 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>7)?#hg4xkI7VhUy-)E^QUwE{BOtnKP}A; zNirADshabj!7G0AG3$E$4-0rs_na{Dk^jJYaK(czqX#E<=hyC7TbwWXPxx1Tt9-h@ z^S^p7hK9YX+&gX+)ZPeTdwN;Lupbqf0``Ew1%OD0O54C458G3>T~zj~g-uZs>+Vz>2@CVp~Ox2|>d zmO5}CUw^(U!?hH_^W5edp~s|o&uN`<7y2qBzhwU3EQVbdoh;?b?mao~_bJzj>5|pt z3q}nbs}`T+?!W);Jp0+l@>7+5TJNuzWbu9ae}=UV;wo)7lqKfQ+@0R|E7a{C2REDl zHedM{e;%sJd)EKDa&nTokHW-g8DUNPWg3hpVs^DRUiH7Hkp5|f>fDPbZY(T5_KsI4 zL$I#A%^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>91Q5er??7+M*^YL7mg=B{{ZTdl|H`h>=v zsj9o@9-9(*^hLcD!@0=k=YM_vdN#syUDL-Jx9YStf4dm!um0Qeev|Xx^Vb@*JJ%K1 zKT1BUxpSBNXMumE<~JT3|F!?xh(mv_20;_|VDTKdLqc2BPSXGm_T zXMgScTZH9P`{xB5{~5N#e4S{2{-LYomfuBH=FeRjGWIy8Xsw+pdtyaOisPAy>3?7K zoYZDocd|{wLfw@AW}?jo^?z)x4ADJDP8BP^mt|V#{wRY}%`(n<-qjdKt}lG{Zx;vs zEd2ca^M8ies0Ll5RqMRB)tc3ReWhA(;K}1x%NE^i?0x(7Uj3oTnfAvD|9$_@092Jw zUs)g3=N|EEgYvBf+W#*8XV|y@*HxYgo0&Te|1&WCXLudJI(2Re%W?&oB8^pr$89vX zsybL*bdV}IEOYIX7ti9%W9EGIUQ50ks(D7%v&%np6=6&}<6QoqL08S+k8$;KZ{~k- zF(2=;|G4PN;HbK2S$*Ac`7dYcd!0A>GdcfQ{+}VPOM~&yrLdq=FZ&Bz&EEu1yk>vq ZKSQfX05k8F1&^Nq9n}9L5NPWEn*a>4szd+) literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-5-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-5-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..470bf7d5f561db64403235c485f664b2bfe98947 GIT binary patch literal 1166 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^ipCcYDu05$fiDg0J2y=@pOY%}GKG4>%X2LVRN2f`;|QTl$}5o!Kt7QZiq)h&?TF{E zzBSCHOY-KWPmdxluY3MrzTecdueS5nmTfY$2y9{BZhx(TbN!njC#Lg?Hk&2c<4<*U znUu$T`OnbMrNQJ_C^$Lo3oA@5R~Dn-`3Y%n}me`vATCIF;8*xtkp)I3I|J$KMvDT=9uxW>H_nZ4+*=%G^F#b{e8Zz z{m-y%H~%b-liy9l%8t!Y_6YvYqcSPx^Ld84oyWI^MsK)zqwjtzL&n|My;qnt9)}(- zQvUM#Wu)^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nbpM@1NBtTTT!_4|!KoMjCU*TpKx{j{`S zV0!cVhK)_s=GbkJnV5_0QV9WYzOo7cK{vENZYm&+q(cx#-I% zn+Wb0`Syi}+`p`Mzm$Ba*+E*vU{P1!wTF6%_u3T^cMbDIDF literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..45fd8488aa9aedee3919a12f75c4dd0eb4e80148 GIT binary patch literal 742 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}n7fiyDNwqP!S17IiUbEM3%KQ+&LRXYc%@ z#&;v4-?u$ip`2Mwo{(eYF%Xz33O$U sSk$G#uxPr-6ox=o5ynuzn^XG!NNsf$0dX0EF1mshsfq+T$p60y09f$(^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>9iYo0ds`pZw(eQ7h|+$3ddYwTd__p4(Oj z3mo`qpWBg;{x>=}EINtvw|7ASL&N7U&l+?pBixvxd$tw7sx1!uJ56?XeT}$GpXCzX ztg1UFj9+s6XLz)?VwuUc1rxt@p0i34eg1U;Z$kNz{*#Z{?H2#($`oata_z|;PU{m- z@);*E7+zoapTT0aN&vIIV&sCZ+H)%MyOQQs$ZP)D@keXYfey!Di`OrsJeoo#33a&~jG4*?&$o%iF9;vf8x$*mdol<%EvHUKT(x2@n45zD$MJ{?VeJCnm z_j|N;X2FrNH5+x$E9WrJamb!nv_^X7$=@6P zl?1S@`SvNsU1Vd&Cu8Y6i<1%uUsMa&bM?Owk9Pcfj{mp&e}>LQT@232C5Hc&|NCYC z&?8sR@%+1;{~5CXGpuzLVL0AY^81i|jr_l@c4u#&$+*GiR$(_K&_T@O*^*9|-ly{> Y@wR{b&+z(Dmj<)4^8QbYfb{>H01egGPyhe` literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7dc0d6d0f9b5eceda4d02f4a01cff6953087576b GIT binary patch literal 1138 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>4cC!_smu*WCB&T`S!D`;xot%DT%roc|fT zd>HSUE$39y@V}*a(BgT)zbT9&+g9uIKR4>@KE~>DZ9y`(n!_;%(G*WfNudMoe@mHv zUY=@m?N-;id!0&?|GZ$feK>)KS@XE#ys6dReIfZ~-kp)Z)jqfWXLx;4bxrrlrojIU z45sx?n|_C!(Nl}A5czceuzZ63T88+RJr{Ob=C-7Kd$!m{COlB#^8U?Hw>TF{$SbXU zRljmw=5?M7#+{3rG#2pHzlq!N_(qU4W8eM-D|??bq%2C`f7X-t$>cj6(*)m@7qG8f z!1Xq1`O5qgp}khuG`L0O4Q)2Q?%J1|lEWY}ses+mROv=c=Jv#ONjDV^bIeIe-nf8w zuDYkW&ZIj`8~!tJ@p1pHWi1V|5i>g$c~iO9eR=Q;_Nph7qj#|sHQv^l@DQ$J76 zbIu9Izqg(+EWQ!Ix;H&+$5jrxwUee&xSb=+Eu=-v`W}N6P1&WIlD^{bxRH zw{!VhZWS3^+;++M_KJU77&x2}*^>_~Srpx`Z+r55{F#fc40gF()w+_UmTB&-_fK){uP`%y*%NMe z>DZoJySW;R8sw!+?iYrC{Lk<;bgyl!-tx|k4Rab_8Pu;831FRka8Z{A^Z%OwpYg#D literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-12.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..12c53d24deb4878dd7d9c21b1539d500642cbbb3 GIT binary patch literal 1289 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!(*j-J=Y05ZxuJbj`eF?xcL6K}c^AWxKJDrGlb9|s_&xi*k?;9`hIQEs zFX{egsFL{N`0IN9qx0O+KfDip`*!JEbikeo!ZPVkUE=(zH=dNaZo51>r`63a-O_|{ zb#~Hc=RNw8i}tb~z9lqQPOao*lCKEkBd0Z1w(r_kWG)K#c*1FS)xP4GfBX+_!#`S# z*Vaa!*${hFx#yVlbGcO&i9dxMWbTwXN&ML|;j!hxfXbChm-Y151#vu^6e;mhXvNR{ zjNuP1nd*keP50drbm_Qe>vLsB2a7}NFMnQN`XT+WH80;?m07~i4dfDwXR6r06+9sS zriBrC94-O9$GvVkG zbvVF~z!)*l;96Vr!|u~pEoSFW=ij}Z`P1tk0qng$K8O9g|8dSk>C&wmKPeyg(Z6Tk zdDhx#qxr0sz{X<_=PymT>E`#6Uu90pzpXF#F<#n!_FG$=bpZRK%x|mnlVz&inYwmZ zhy<{oe6%F+yh)&g+}97UE}in{je6ysEp^Xhsp{;EJ4gNQJio&jJ5?lrG0yp8b;u-N zuhU*J9gF(U=YN~IiTw%VpBIZ7EV(5dD<1#i0wy@F8%vkXm|ZxBOJf1=D~&}B_Wy4J E03?YP-~a#s literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5fb3f834699f472ed03ef0cfe18938050790bafc GIT binary patch literal 749 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 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..38a85bd05c277428646f8e81d84663836a5d5533 GIT binary patch literal 1109 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^f|C_Vy(zZ5Dkey>R)~E0?_YE}p>mFy@N2 z^p>3Z2Wrz#75`_@iU0T0gfZ`mx9z=%lTW`s-F4k_x$`q0ZE?Tm(>)t~*BoD3dP{cO z^WZLqm;0{%ZGYJ792}?8CA2YpPw%1s3|1eX?%L(f*YNI`jQEMHFa90hbMu#E-g5EW zU1@I2)5q?5{#Eu_vq{EJmsx+>|JZ@Qa@`57mX`C9H4_6*U7xi6KG)+Nd0RdTzdg}f z`1&ZDdE7>gKP#A2%vbHum;A2QHOF0Zy{jZ}&+aR$S!Dz=nBy)9Fe!au;CjEuJo%Zg&|^tu)8j8Exyv`)W0LqNiuxarh<^x@{)Y$`iNz zj6I(%&?)E9d_HgA7siO_2mE_~UJSFlC||eVOM{6~s^9*1K literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4ee4637a1301b46661e1f2c0e769dbaa82d32816 GIT binary patch literal 1274 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^f+i4^KK|9`D99;kcfGi^X$E=B~-v{~6Bf z|0xKbQe?i6+2+suzgY|yE-RT`GxBok%;P&C{JVMmv-+uJQA$Ubzx;gv&dN_~7aQ$! zk13JwJg_d?r}JH&vXjw@1|B}cXgi}lVp6i}CQCD_p8UK_{tf>wd*R7H0$9B@Q?4mi zPunxW=ZsIsQjeg@FE4}lP5n0GjJbI5mUKzx{2$@^i|+T@{f#}BSU>gSpZ^S8uX_)C zHdhv7pJ%JV6kC1pR%%7(VwROkmM?Fp6^8XoP8A|JfFFR^{nxi2-bM~e_--3S%SC?Na zJ-zy9TEyIsLQiT|SOos8w|ZaWSg}jI`EJ159sBH@l2lSMEo*{SE6A7hE!v_q>vdRHt=Tb6 z*>(06N%DqiaTUySzAfO(6Si_$bxck9N7rMMaJPQ~*B>4_xhQ_2vPFhOpo4^2ptkqq z$;YeS{IN{ibZ$-IoJU<6%;v|h_ZB}g+af(pT2x@s^OdiTe^mdnE}B{WeO*bQ0~f>b zu>TDER)mDAZYW|rekNm4gP3NR`KJ@=c0bpBKVX*RS*pF?aO&gjf^OkWQf{~BKX(;j ne7BGHTHp4EFP`lR%2P^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^du0x6ny0Ge7k$(QaW_`KBtYCF-#021c(t zJbW{F`~EXbb)Hb)H;40U@)x!SwSO1)ls;JTYpeSFlACH7$G1K9Jv{%x5XSD@W z)lv^mFux$RA!+vS#s7XS`IMrpvf$VAKN`#?hwZA;U-^nI-u!RY(O(xG1U=NnKC#Zo z(=w<$aoi@vQ2Mc8&)F;OygQzR?S6SZyX0GMw$>f3cNsSe4pco_dijg3bHMK3rdzkY z+&1mT8IcF2uN@?|Cw+SPIBf=->n)G-rd+q~HvZeUSLpP^_D=mJjV@*vI}hGCZ=t-b z@>rqwnm;DjzDPS4R;x~M)!@77X>V5f@^k|OE`5*x3=6h? z|NCM7Lsy1`Kb{wLOQK)T&0PC%m-L~ICnq#o8p-H74)sL5o1hDV=5%#=VqTx`2$TuD%d*vvpw_9`*ROgw_&`b(F=6Eim&S$|zSBBsp i#Vh9qAKbP{;Qr3E7O__jHgzrGk**>Pfe_62|0V$Unde{t literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a2eeb7696fa72ada61d7a05caa996ab500ab960b GIT binary patch literal 1079 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!za!>Rdaze8&2*ObxtW&?y3mSyyf7;rn+sa zO?B`Mjz>Z!E4OTnW3;(^lckU|D)dI>38xH(o*h3UCmwvRBds*g-~QF(KeOjwTjZ%! zcIfPXh6x=jxfc9qnBMrGp{D-p3nqKLgs0OU=lK5|5GEiT?}* z^}TGWvT63;-~VS=?;tu)Qsilj@0(LuTPB`6J9SI1|EjfdHR|qV-v#?WE_uKdIn#X? z|HlPfpG+@zTtA&4$iz1#w6kVMYD#9K@;c@J46iRb2&(qX^Pl=$XyNvvoy$Cvl`Z75 z3k(djUp)CCyGZ}um9I>-P5ghSE&0#Ts`&8ElY6h!|FO;gz3vhC@?6?6bfA%KrP$`X93xelEydQ+4Lc{+sRcujlQX zF3(z{WB+v7qWZTx{xdwvJp5pP>;C;K{xjVF_@Cj(1@<$`eJzjA`7;0Jd;_~=x$Kvl zKSUo|{$nfu9}f9HzUqH8^SS;r)Cc@$*#8)4*8=|8DwliK#V##6KB=rr`=#@T_`~v_ ZuLlC9Ujt3M=pfhWDiXkmhS~q$1OOlGtO)=B literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-6-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-6-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..04aa96c54ee6e18885137be92ca3a5e06d1d6a2b GIT binary patch literal 1148 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 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ff45719f0c1246be24a755d3e4584a504745a60a GIT binary patch literal 1379 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{^%`K@k(9RLgBrLz?_Ih+c}Qh*h4XJ(KO^ zm3JY$6ZXeEpZ_%YMOFB>8YS25pP%Ff#Tzh)d^zx|bXiuNy4b_FYn@bHm2G~qBYqis z6vM_fS@AawMSka8iZl3`%vu*;_V_=;_0TW8lJE5%Y){oMH2yi+@X6=fe|}xJO&7j* zcV=w2hGm-NY4d&Am$%#uKNKgp`=iXseIJic&1hfkahLz$$v+y*bAL=8EW6W=y@yg52^=1HA;Mi(J5 z-_N%ESMw1Fz=CVJ0t|E-* zPp`bA)-~Oa`S0z@Umt&5QPS;u zsq!epaW01U4zlX4Tg>+E-M+@uc?s0!jO+l`QiD)!e6Sx7l{_v;6V(*BX?~C+^GiBecWl3P|{itSZeDZI`q6W#2USG~Wk}%nDX4*B)r^h9jSw2Me?|e|pno?nY zi2G4*kVc%xHA|zq0?%7k&*e{lUDU8t8U-8-Q@vW!D8Kiwc1DaIIi?u y_hZ?we?G0@hA!^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{dg7E5(~b@80zI{@NpA+PQiwhHvv*tTvrp zem}GIU`C8j^WSL?{w@Bx-h2JLf6}k&Z_YE`eCI~rbF=sV8JJ%FXXs~)cM4#RohmrD zBQ$W5e`37l>sgB{+K-CQYEC)!Nl?OeLc!usqObom2$`;bGoQ;>B)9WD|AaZ87=IuC z^!Vd?(T)9r&n0x~y%=8Fm?q?xN*uFbSKGVmoFMBa1&IUexDQx`vClgl*Xh7266heW z``V0uc~*GXBpwr?P4WjGZ9eciuJvQIx7a-O?5Q!TSCahf_gL7U+Vh`5<^s#NPo69* zb#glen>D{EPmK3}Y5sCmrrGq9z1s!W%#ht=DL=Pn&w>Y!w^n^`stKA^ez^K&T0*>U zn&8U!`=`i%zo`6S0blu}u=Rh}K02H(oyM*Bl&9ogW%8f)hmlsL+vk_cWZAN&I>c2z z*)e5WdD5BVJJnULmp)i)aOeJ-9*f{v3}4Rk-{jUcGi7EMUF+M+lwhbOREpt*nyNWR0xCqn~2xR=f2>@&)q__Y8 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6178c0fb5cd460df2ae5107028e235970fd7d3d9 GIT binary patch literal 832 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJjiyF9K_`t_`tN->t%s$|f1Uw~pTZEdTYA(7w|*>LS*se0;b3@7#x#6Qzaj3UdABzh^(K z-s;0o@sh^s0OmzK9LL<%XK5u^ENZapU(}_+0L9Fw>{RdX`Sm0$rsM4+mg>#L^G|R+ VxR5t-_6MM~+hr1#ft>LFCIE0LG$Q~2 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..0322331bafda9046ac917ed7a836b3b46f29c110 GIT binary patch literal 941 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!{IHyOHSV3>bgqp_Hu;+KljIH zmT=)a%=no7)1wB1elLfjOpmt?4+2DMlr7d5o zk8QY`t9RwWVJ**}G8fn{T?x`=4>(oCal&rP7KT7q5ysEg<}=QED#G*Ry7%K=k)sda zTD=W_CoDaG#fg7g;}4awJ^ITj!}TRz^yQ=H2d@`2PU=vR5B%rLQ1c?3U1Ukpl4%B$ zrZO`~WpgnU6=_wR5RLTpSlc}B3gegZR{i=dHrmVXlpAPmzgidkXLZ^R`_}ON86WO^ zTk>@6J3iZHhWdHgdloQtX)NGlKX6TJV<#Wyx@WIM=UvK(ez(hL{*gdehMJ2j4k_)Q zYQO79D7%EkqArGv*Fjtw3;2D0xR#t=9e?ZdHt$09M{E24&e~hnrNOYMON06UO#u2y BXH5VA literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..cbba2bf0840c46c61d6d229be36af519f9cbe140 GIT binary patch literal 1122 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}n8<{;9n<9Q5IE%%W%6W}n&D9X?#|{3ATm zXO_s0CXdwEizk*!R5cl7FhBV@VadD)*Vk4^$2>drcJ}&r>i;7Dx$XIWWS7q@x6P#~ zk7uN4@vnGOFW9y9!R_~2-@MiBRSs+a`>=q2NyeJ9Ouyg$a?v|(wBXZ|UwvPfJIHx{ zoE>~-SKhSc@7i`usI3eA&v0|~8J)$S^+c+#J@5Z&|JGkB%V>3)#rzZgiwggI4k@wV zneJ71ufh7S*7e+$WRb9E^K-<`GKvJSFAQ`QVSMtRLA)f!J9o9)9uJ$D9{)Z(^?y3? zNBCrC?OU<7k}pz*`MEAbGeeUFO0{)@rm3O#&>p{ zS0_H}Vf%aa5nH^&gZei2hp~BESLjV$6nB5;f$gnJB;Pqa{(7`xd84WMC%K!^->Mes0-*5!0h`Y}-9%vjqtdzE9`)zob6uy0W?XuVlso-dP%p8n{02cl-*e%I{h?O^0Q+ zu!j8M-7Efl2Kur2Vf5ncN7>3JBUJXn{P8`afh&(sJH5#Jbt}P lV*y{$LFPLec3WT16W`9smDHudeDUpKCRUL^SBCokHvwR3%i90| literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e05209486f6ea04bf0ca3b177e7832e1172ab420 GIT binary patch literal 1354 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`E63)wP??t8)s8C%<4gxt@Fb{(pCOU3t5% zukOx!qx8+f^FRDqedqm`*R$_)-MJ@_<&QGq=hV+`+8ZgZt>QmN?nnT; zX3g5?W>Ua{I=*vJ;FC))xPMWb0LzwC(MkxX5-ENu{4LDMi*&3@=L= zzeR8Tlw9s9UL|sj8VTwt(~UNe>b&BdO+PisZ@i>)tYNisAz@Shfd+xKtU<8eJuP4~Uy)B+3MKhB?@e_UVfxRv4Cy7)(IO{Vv`&#jofPIrH; z_{sxM>Xhx5GE}%t>0J48dzHzb_rWTWUu9hjgm0?uy)waLol4IH=kR!$O%eBw+obbK z=ZRj9tFg5+?aO|v^vYzfAZOC{!bXjM3ep?d7nC%---Jhk6YKxzc7p8Gk2}iBaW837$L?BCneNBFIwZe)Tb@tonv3blav&dCXNUH zwgj->+!E-@Q1kThUolR{huZt+L!`Qf)|(b_#c6Lan*d=EaXD-yuI z{>SozyUcrZY}UHnsa#lJTF@-y{^Psc@vfik$L0y{{E)X-Z_f9?b1N3PmYn$M@5k@_ zcCxDoV{iJ3nA>-c9c@;3iz$tJw96we{gP?Ky0^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)NXLeDM)Vdk-nFJm$FFvHIG_#*OTbM{}}f z%?aOCqPtB+9?$=`S8L;oi-+eY z|7W<>Cg8} zKR<>4ox1;@ihold`sVit7{=XxoZTxQ_OWGcE&E&%Ers60+Zck1FZ_D8LtZBHnwWgb zzw^Dxk&ZbF)s;Uk;PXv*@+s3r=JPC{lXrXBZO<~;zxiu*W!tw!o*~9E=@UbLybJ%d z*49p7B7(@zFTdDD}e(iiRDH@b>2>iDWm(#m5lJkBh7;kKKUYuw>3jRkz4eJ)R3 NGo?vmQ5VDin*bR<(WC$X literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..0c180adfaaa60173fc570cfdaf8ab118a6c045db GIT binary patch literal 1274 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 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-7-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-7-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c0d92af26cb933275ea5eb8b7bd52934af4a2f8e GIT binary patch literal 1152 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>Nszd&)WvIm*nuJGXJ;F~hT}FQ;9)l(}qI zQe$PX(4U)c!|krz_|MQE-NSb~d(ua_Ez_@i=S#10Z>nVZHtqc*!|0x%?%&_kHbM~bSCVMLWGlZ*I)gJa`WL7`% zIMe<>mc4;+&+%XLU;5`yFMHPBU;Iymv5dXv2=la{J++rFZxs!k!rWG2{A2!0SBCtU zTMDfF&#d~Z4ox^MJ;i9}Ew8_iT}2q9Tzc=9G|t?WUbwU^;_ZwX&5AaY`2RD+b!jlC z#`p_)v6-(ceCcVCy0u86Szei4MsD%XKv#zJ+C|Q^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}n9CKI*>zR^C=>z30KvoF}yf4u3t?Mm?(2 zy7zbTfzQYIq@G1QlJ|LMzvu${`StUU&1!zOwD{Uwre}^0vgz#!r`50R^>*ujcYWTE zJh_lZd#!=&3+(=RJ9=uhvT~9+G`}!Dva|Z|=h{B4o!J%Kt_3Wo8!y|sKjRgBD|Fk@ zIB%Lt8MCDFRuM+sO7~-{&u+UFI>Em3$;|c(4E8hEhpnGyXYuOe=|}rFytCi2)y3Lh zD_ZwY#{xdX-iR$RC$zc!C#4uJKB3a*Q1*G!){8Gs?nAUbe0fwP zfL&bla@3v5(;``nw;mRsEw_>o_LS~pPPpjGP_?dIj^W#S$IBrcVO<)`PF)%cn1Go7 G|4jf8tY#|! literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-1.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..681aa59911aae6d7fe46ed2d8875256b01400fb7 GIT binary patch literal 936 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;`$^!?RxRlgO68xlbcHQ(7=ie_H*$SK8)B zt2{56zCLYa7xBc}_R1%F=LoUSd)HnGK2o+PN7Cafy9wi0y|PXFm&Y%STvIC@*dKl| zH-GZGvl7W~s{7AvP0GF4^HoNQp;jc&ffb77qCcj4oZNC%Iew4LOpdQIEB__!X$w6Z ze(9g)rDGc(o<8khtmymkKf|6q{U82hKl{Do)J~S92HW_DavPt&oNg79MjC?rD;LvY*E@y_UamPixD}*@7PTLgu?Y{`qKMyZTceYncnIt27x;uwR?j zz@@PWjD_}9f4nzaZuX<@7s|&D{Yz@RVQ|hqN@D?^yQ&I{j6j9ym--e{^{X}d$>j=m g$?jV>-{~`U6=B@ZY0dSYq2$rhMO_RUQ2hTU0D0SF6951J literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..acd89260eb3492557e7cd449de65c0a10b6c3a96 GIT binary patch literal 1357 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)FJ*T&iQeNkCYE31p zS2BxC*}9H(#`7}ub=I8i|JGRcJAQ_MTGhuZbu!OyTwq>w2- zHob7gD=rRwn>U=cz9n(myEk=xyX~+g;zoorXPRtWa_{N+4s3QiS9coyFg|pC)du-n zAV%T&iRKdbF~|$K}!I3N`aP=PvR2*Zi8raKG?#V6at_qf8Sc`>ig9C*>!q zJf6Qe{wM2b%XY!|Lxswz+ooDRk=vW8v|-w7rCV%e4BJFXm{+cA_u994Lq}fk>4~3r z%AdZ~pfb^HqukeI?=I=?A8YeeA|B4YDtUWR@j<)$j{{Fz>{crjpCU0w({{I1!`B7e zajI9|ZmkWnw$)PPo1Mm!@yg)Rymxnh9%tULc0SjOjd$-zu9I+0%~|HTB(H1nq->>A zhu?~8DfrC1t-^Qq{-1iOs~@ke{@c9d=)+nYwwZ@cuCTDRUQ_?u@Q()bl#lV9?44UX z^KEtpU9-O%b?D;!yT`2R)K`8tox42ZV0i)8F`vxOmYR+89m7g|g(E-8{<@X9fi0=7 zlJjRkxyrRaW}X>#=Oxn={+v0k+RNZEp;JJ}s?fE37k|sG$KIZE3t}eOO$lJ15Se{8 zb-C%%y}J|>+h+eb8`kzrr1Y+|sOPx4^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;|BtH-Gp?ZMm9OND^F(vcg1-%x8jxn z>p%CG7Cx<9d!OU)g-8yX8Q=(c+I`n@sfi@7!aud6Uy3_pYigww~+JK9Q{d3?IKQ^|)JKFL3_B{R>z5JFU*& z{<`JzqMXC2-#6ZKzWzx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!#92Lm-lbY6WhO?d%ECE;lEFx{|Z0%Zb|d} zho)a885>zr~WTBWvyJBJ_)NEZoKjD z)qTysyrEj=$s!Mr$IaDXUUXR}F4o22@U!q+bqgNt-S4_N+Sbm5StfkW53RGM(ktGZ zeGT0G_v698ZuL@MQv+6slrS}jb!jYM0^vRVkEYFh@;c!Dibs!h%;k^lsn-c#7cT!% z?(o|>3FF3T+a}mQsIb4(U}M{Ocixp%#(onLW@XKhV)!cG@}28+ZPxutu2b`!5B_yn z@3)@sN9~IL4Cz1CT@h~CafbIl1Jlc2jd711SVaOMxZu9fR!+qYTP|N#%#+#Eel>ji zGsiy~iyCao65Ew8Es~MaSio&|*>>-dqGJUw4qo})JTcxQ@=oolQ`|kdpOeFnFLTRS Q)S$koOM?N3ng8De0KGJGVE_OC literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..976beee3aaae4e792ef7994013bfead2b21e3f33 GIT binary patch literal 894 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJjiyF8)C=^%hs0H9Pdm~bzk&FewntO>VxVzS0?vQ(O+wIllufK zLw4kiEz=%0J)fn$^fNv(Fmn4%J=nX4Gb1|0ABZF@n?Lq)4EHY$}kD|9=wzo2F0+ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a10b79bc62626a616fa3d88c36c2caa9528ebe81 GIT binary patch literal 926 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!#94ONbYPFmEx{@D{_+rZZBfI5ORg_^Zg#3 zx}%SxZ!{bbGL&~dTWnmAeaTMaW@Xf`b8IXZSEt`8sGnMSW%cI^EKEzI(kz#EF}$&p zx%apKSXjawo!<-XJ05>!+WTx@>ZNtJjt6er9o*IwI-!o;^vfZu6J4*0))?_`T)-aa zD#E~}v8ci3`=h1vXC`JAv1^@a|M(=l-^VWN`+o+RTYpy{+HN6fDDe1aebk5OmcxQC z9Yi{QuDq+sad4^J7Dk=g!g$vTug`D)iCos>JS`zA{c6AFztGQ%zOK*u5nBEHM_P7L z(Y5dF@@@?M*G(AjUIf|)w3E?4v@x$__KxVqhYo*PKUY6E=Zx)(MGeODX7P#yuyn`G h{?PSudeD_z`__k%_M$oUZ>|J7$Zehlbg2FRn*i?ZUv&Tg literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-2.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..83d2ae929e31bbef9d3e5586e9dcf11c5d3d1b3f GIT binary patch literal 934 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nVniyF8-*LPd#-!l1K8)o`*pqwn<&)Pz7tN4UAzHvOb=8EK>7tF~nEvHNNM}3RuyPfNC%sPDf zkFeV{4?Et+onCPJf&Ny8l8NhX99T5hl|dvBf-BOG-qpzb^(yw*j=rDebLwj=@?X?T zeZJ8a!S#i|M{549J)xqL=1)4uuq6G*>}U4NZavJIT=T;A1@rz7y~{-Xw6B{~Y&#^; zclG%{(JkCuh1d2PowL`w>%NsCVo{d{0~9kqT`zQh-||PgP9Hx>MYmggkvt$jL1dOw j{%(ibj71H$iw_qxOze7>XdAxarK<>|u1KJR{QsK(iTG$b literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-3.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..44c2e6e3e49a8179b8e49ba50afb36e08e216bc2 GIT binary patch literal 1186 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nVniyCY$Kf2fWZLXDUlE~?UzgKSjd-%dX z_Womg+P(H#rLB}%{x_~{$JgL%`xfrs+#a}L-nr5u-i$Szo&7bJ0OQGSF3oA$;i@5He`Z>pF2UN4(%e*%3 z|9*eq&rbW+n%fy|(XFyYg$}ZQlb6oS5k2uLW8Hbz4T3Kx^6vS%sKGX^OJe~O5c7-w z*t+;=_FCt9G4|U6(_`v|9ti*F3Ag?5J~Y?-=!Dx-@3X#trxL&3`G=Io0^a*QQMXT* zCN9!Q*q}Mfsmjtu|B3O>>)a22xZLVVnAZ~M%1~W4fBEXjh4)^+S>v#%ON06UO#lFX B_HqCK literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c93ededb18aeca279b2f0d7899e40c32553a8b21 GIT binary patch literal 1461 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@>u5ZO)dgb9atSKPsE>B93GG#_qpm3k`zy ze>rQJf99>od*+w3lX^FvTyOp3=(>FiAFtF&nov96w=?%j{r2y3{-y9AYA_HB-#ShE zcJjmthi#7+)K9f~^mVN|>#^UN=Uyy%x&5mDrOhR`HypX;b2w#w!7uaw3~{@7g)W^B z*kxt6)O@1o!6U)*CVKx-`7PJhptQ%_d{=hVv>vx3M*C+@u=krfQ@`z5*Rklu#oWgQ zPTpAZZ1HYi@58tDo|{}Q;of;BU%H6#YkYFJ$xXGrGhROP*OP8=nO)6zuHK8`#O1~M znng=kUe1qtRZ<;ndg$Z5O$ys1_LueUVE(?b=lX(*WG{hRCs)MqZu|Ce%O%4%tBf)j zuIx$9f0+6Ba^0!T9?Fp_>OVZ+{!IS7XwUw@t7=!iYR|qIAU@CO`MjAg>>0Z>m|w0{ zIlAb@bn(v#?%B*9^^C_~$4NepkdNBXedOBnA%pkH&#v3Q=Zt|$8lcS{?fKL>u&q)+kQpYYe$f5@u?l} z_&3T(tr+4p1n=eK4>Ai#$GOa!fQFDofGEVa zFz432sTN|o3SrwOOgiEJ-M{ebU!Xpl-|qXu+&7olXqH%>GrSV|BKdP#sQSu9T?}7a zr`8yL`1a|WK+Utz?Y+}~L^*FSe>gd=cu~wP_o82Z%k%O~ejgLu5tHBfOQ*xX@K=|{ h0-o4x*BuwX?!Iffw9h$Lv%l&I+xKG{K*Rpu1OU_tio5^- literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e5619151ae0edcaceaad105c93204541d89ec816 GIT binary patch literal 1241 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^hvVJKwEax^o8Gv~ayAlTWIvE&TcUyZh6i z$|e69IF^3qtKwovJISB;GxV*MP{gUjH!J>T?MZ!7>fq+NuHARb=X8$)Cqx)8R@7b7 zj!@md`w@r0NyTrn`<5?%9HX|pwsh62aPiBH`_gp#-}N1+Wn(R!XLNC_LEs((`g*gNv_UH_~+ z*#FypYSg~=zgGE*UWex_6PF1wa7dk@KBM+u-WA5OL&E(AebGzHe#sczxOH~LUH&`K z3n%{l%l@c9d)B7*no|o3w7z$L6>U4lE2hrnrncjF@gJ?a=J`hg*v;!}%@)_&K6!3* z=IQPAa`)T4*3SQY{>SCeD|nXyyd6)@2cN>eST{d+f){_ zYoFp{=T7^e_ua0cOzv-M(o3nT6@4u1%q!pdx% z^~3F;)O7Q*#JPQb5&s#yG#2np_x(|C+p;LSdxk1kaVtyOO7%lGO1)2}@3^|Ga!JzL zjzc~3&vj`qN1cAKZ>F~Bv{w%%zSNih#j*Cae)BBeiFbFU)g(;TGzoN&7Q4^CB|3P< zk%PNZEZ;|l@8{YhpUpGbJH6mZ&2eEffBPtn1zg2{Oh1_LiN4Y2)SjoF|4*w+V*&sF Fn*buL{DA-f literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-6.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7cafbd66daf41ba23cd8aec174a81f87a3902c05 GIT binary patch literal 1434 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#L#5%5d>$K*}AAHMS#zp3? zx$C_0WVN;No-;mY?z~g^#^|7*kq$lz2Ba8X{#nrZ^@^>^9vp`FrBg&@_+6i`JaKWG-9p#zcc2? z3Yn%I=vja2_{5Vh_&=|A+Pk4U;KH+}h)w1e6OG*dGc4bJ*S@u4{`CJ09MiidMX&U- z$qS3P%AM!-cDLP(=d!Esep$VB??#3PQ(3+FW+<;^kQ3WI?X^Rro`K%l&-oVY79|fp z{|q}@Bqu*n$HuiVYjI9gljIdSV=dYBKR;xzU%=F*v4Fqhd$s!C&tW<`PxkNfuIOsB znP$Vvywa4VkTca|aanqC1EbCL>WA^Xd#(!}6xXXPSO4?TL2QdZ$8BGc>BTXob9=X> zKHaH4Ve!iU46j4J-BWNg6VAM3Q*g`LMCS(2&zwJxmsQJzsrTB1ik^~X_ub{Z%;E8w zlE>#Kl>cWak()oaXjkroree+sIfWCBZ~UXdeEU!3l7o+Im2MyTw(6O^_V<^9j8nd! zJoxfu*QFn+YnC3H`=qIm;gf`QY9Cw3{KG%PZ9hDYYI~%;p4VI3Q}mbJ1#xK^zQyxi z*&9ZF`*gP={J6MOO5kzUJ@a?Fg&f}{cKqkF23zx}v(vxjZCc2gP3S%1$rnY3Phr}Jpfm4wLf>@7LFyS_^v zcXkzFJm&df{^5iTvF@Qk_BVR2TGnwJ?>@OaTkEx)bnY2z|7T17GiYfnV2h48`|x(H zm%GOHvJJdzxrL0*t)Ae)B9~o$^xN{-59_8sir6Un_I8rvB({ggDt-mJGL*-O@5^4# zvtXup{j?s3-%Fme)LN|N)%ZL4$oFXzS9Rnme{PU1UwO;(SCc)^e7;Gbi2r{R0DjA3 AW&i*H literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..205072b767ff568889c4307a732b236655cbb9dc GIT binary patch literal 687 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJjiyFAd#P^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJjiyF8-_ogX7((ibg`+M8g%Zs^=%nLk! z#zSt$zt9)q=A4$(_zt95BC;PZc^`f=-rCEG4;Q`w`0ZW_4b5&vUzipWm>uK^AdvJ)XZhMn~a59Wo-?k zUY%TZyRG*|?CstgGWl`;8U9u=9KCn9@sB`#t7w_WnwzKnxsNLsIjwkp|F%g0`*o8k zfev!H55M{P2VDEw86c^;>()$pBZb-p=`Z%LT(9t>d-b-Rk4|sTS+r%%Dvooad{<>_ zH@k{3Zhp8{FMLFW0* zKg!EvXGeGQdc6wPbWNM1HAhCK_4wZGOyeI}kNzE!_UGqVvNKc6GOk>;?AK0nt-IyD;)}Iu$b{pak)02iZ@+dG31I(!69C(~D9!)? literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-8-9.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-8-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c2471d14fe93aac7794e546ed81fd8e36d5cc7fe GIT binary patch literal 1266 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!!w<9@h~TKiFtCIuXk39&Qf#W?b`X%BEmu?c#NBGUkP9{zU4D%O6Hv9ALbsP`u5%;1E0c~ z(z5(#>W^)Cx5((|RF+*u21Xw5?AJe!Y_I>GV*f$@-&O|ArkeTpPyT19mH)VCM)~*8 z_V4Ha+bY6nby`Cv|4+kOS*@=vhwc@(O!%|rNX^>+4A=iNaGl?=tx0p9T1)R;Y!8(+AVNYy^Ne_Pro!f7&`MF+v z`6I1~pWOd!u=m~4d@6{eWhJ}9qXu&c(FFInt^GCg(`Gksm7jV#`IXhTwWV{@w+TPa znz!>Y`(AewrAK!c-`?4NX5P*(f9el4SbjDZ{;gieFqXw+-WL2{xnQ?>sh|&-4gZ>rM8Cct(eI7$Y~}Av(2}&A_2_%x0ReM z?VfAIE5?!9nyRa07}If3w@2=W#R~DjOM1^VriE)cod5Oj{#ua$rnU3Bi_RRo^+0%% zXR762EwzhZDkG=a+e%a&IwF`TLK+qzFzLsi@ho8Ei+-Sv8zY``~RB&C>#kD literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-0.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..479f8c0abffd23ad5aa0eb8ad17d7f4132817ec5 GIT binary patch literal 1019 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}pmg5sNA%9tMcnJI2drn_rI4`fh$W?LUL* zlho-u($tkduV48mx%%(?2XCXETWIDykS{W@pIfukMCn`5gH1PTjpnR{t=5g}`XB!LS-#qH!WxE{l666xN1O6J1&?`c$-Vwz-SY!w2PBtSgw1)+ z!RNJpFGJP6PWe;IukC)VdYkL7cJIaH{|sSUZ{J?0EW)UlaaLkcgSbghpo0wm(ck;k z4_u0FZZ5TQ|G~5IU+CvE{4;vo+xwp??VbL(^|MY?>=Xy%f1iq$Jhm07kNR+boBFLF zH#YNgCxw3oFx_5sv`}^Kfk?r|5*_W`AK2#T>YSPJb6M_v$6GtPPY0J)XLJ-C-B366 z)jp}_EH{S74I0cBOI%K`__FShVT^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}n94&UZ(-pU+&S^x^Qy3BUV7{xcZHEseOR zed*Z7hr3S)?3|qT<3Gc_IQJiQCXAnbR&VXCI)6wv{mj;#ms0YQ?Q)WDd|j`zt7rAZ zs5<_u=ei$7doL=K`#Y(ASA_}VmnPZG$(#AFEnl^}`N+EEwi5DDo0b?gSxGTOX)J2s zf?~UxkMH{bPJWcVBeYO>zM1{^==skl#?)(leY;=Gq<>51v|F?EqQpKev46AO|N77C zT|PUq7{2dskNR+}##|=IE>E|<#IBTTCeON6UD2V?^yVh}2hrE3SG>~9*>LC1!YLZ8i~5=E_RP{)zz literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-10.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..dd7658d34608550a970d5bd222eccf1f6fc490dc GIT binary patch literal 1517 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=atNw<>12Y@2!hlyXMMMvIfrB_G>XU(21k zZT?E`4c8_d%1!*dByGYGv;Pd6o13bWWwV|X#ru3a=BXR!y><`Fr>oJbmA34D{(jkZ z+1-_<*7G;730$&a>z<8EW`DT1`jt6@D?_N*E|&*0p3k-T%KPWQvTd_gEqt(7l~Xa| zSb_f);qZjbZMHTpXY4N3r6n1jcw@WjTXQjYM%2EUih(M@$1B;YpFb&;pJD$&is6Vy zsm14~G1@7~On!y^&RsA5SU#RFSmAYZ?c1E(drHNhZ@;tmJyjJJ`-La@zOYE@>+P4e z)>vkzRz9@#d-TEQR_oqVZj-d%axJ&8ct0npLHZGY=k$MyJ38*&I?|+iOSxkL;0#;)<{3ztL(K;D9bFIp}v;G;t!wp?0rYOw9n6cJlTS^c)P^c*H?mGT7|?ZU3ql* zjZSl{52u5jV}nuU%M0ZT_^X;9mA5SKu>ZDv`oGghZvJIlw5Ke-t?G$iz)SNx^@UU0 zpJ^=Msko)SS%Wh$?myofym4YwN$+AKmB)#p z$NZ{FAFs2zHb>m>u+f?oAD0!>#WDQRU|#>Bz3o54Hd9ukV^X4)xrY_5hgLrDW!w{9 zn6EaUCwoQ2Gft6Q!_$%nZ}$hBs{I%}PpDSux>v~NJx%2Y^pbOLoWImBk|nln;*D2H z0dl9_O72j2Q$O+elbb-J53OILcKN;97GNF{*EsO`gvF|9h36B#^D@7Syq>+dI+?c2^uPL&P;5Q~e+Ai{?G{nq`qZ$6zP3mb0eB zpKn*^x81rncR|HG>$yRWGIibyCd+GWJaF>cvFvS^ziND4-)4SG!S{RNp_k_u{G9On zli`o>Nw;ox&+a%g?X5|5W5$8shi&>am|uBp?KOI2sAAQ+q@&8{%#wO5?dh98@VBhf z$$e_3#qGv_+L-6}*F_CBS_wiwZ-(eaE9g6ZS*wC9etvzY kOJf1wtb5;nJ-Q^nDQ1hI+rGFZda0FRKAMF0Q* literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-11.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..dd5c5a1672a53a31e45f31b22926889f4791faef GIT binary patch literal 1291 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!7jM?i z4%*X{deEG~`0?+*(qAS2WS?_A`*;7JF9*IzimqQ=aXs+jQ)hwBZ`hew9%;(Dpe|Ezel?!Dxycyd@%ej)qM>z=6}yAPWyaPGUBbN}rziMoUf z>Z|McAUuSauT3wd7ek_>YF>c&zxg;7-`&_PuHO>SweS+(_4 zq3An`ZU^5~H@}WI&5qL9C;c&D;}tpgZJrDT{6cP3247D6&A#+?K9~EV_;;7K-d<~T zM?>9MjN!q&BZYDK>u$fYI(z7RZN=p~qVaS4&u%FZVGMfi(RJ%r#KpTc+qEoDJop$G z;~=DaN$UjrZ_}jc&cnJ8+i%l4(e2lQx+VJUSAG^iM zbvBkZTx$+J63uIi=wSc2;{8IGmu;bzYSpG>@@;PCeI^*$A8OEW{iuIr!!hO9xW~*_|1%uxI-DDKzL1}r zjh!Wjt&8Cc`*ppqo~%pWMRM@nWS(Go{AI|(vqvwMy(@MVVHDe${*Bk==mcl29mf|+ zu6f&W$EZnTQG>$1O`f_cT3(x0Dm?$ZvgEe*mhFA#tQ$Wa*gR*F_%ntt&*#mbDiXl3 zU3kKaNx9F}nPs)Tz6V@0x1A6$rHO G|4jh(85tD- literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-12.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a6e287a229bcc9772f574be40ceae1ccac8c7fde GIT binary patch literal 1154 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJo*Gs>ef6MC4C*?E^|C^7#Jbo{K-t^@^ zl`H=lHkD}4o@y~Y@5KK5dF(&_i9Y;({`b`mAtyfnl?!-Ium8H_*XMxp)!Qdb^>}ie zB~+0qZl}iacMrrM~<}yA1Oc<|tKl0W4>@IdMrn6)dTbPRI zF-!SVn~!YV`0&bgTf2D|R*UX*5=m!~xg2%un_k0)ug(s#MxQUwdSRovYTd*~+S=Qb zHm;eSV*h44`_Jbe)?164iyi0Nq-Vc}WA(SFpWADG25vaU_mp>{gM4uGtBo;tJCcI? zijH?(SU-PDe5cc)hpL|{CC;Bc_{TW*Y5UQ$S`YZ`?mkxEwf)Bh_C*(CCj4k$wBwXX zYwZD%0QT;TqQ9FDP1HP>t7oQZd-b5jA1>h^*XtkLRg=Cw@wt-Kdg)k4`H73V7#{4& zn^rETxMSX}ySa}hc_x2a9IzngXBD62G2fz-b=NMe`?xbQWc>>Ets(&|opmZZ1smKR zUik85wSC&w`AXg;x_278G!}5ET*^KFYuO~@d2B_j!Sns*U2`d!>5<&`c>8~bs4fjA S`EBPpHRpVO?Fw|+|C<1um)zn2 literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-13.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..cb99f3c259b247216265670e81e93a8591d24c55 GIT binary patch literal 977 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJjiyF8zRy?1nyY|Vv;Eu;ZZ)zDNO&FiW z3vRXFk}VjqxMteQo%`?S|J!D7^-$u;#?`mxKE5A!C(iTx^NDkQr+l#2THM#vpr0vr z?9n?@X3MN^f0eF8-EeD2?)n_hmU*xA(MDPAYa*-xix(_l5A>X+!LVpk&L7_;aSJlm zC$seLdY&miH}kkju|ma?@Zbw8&obEU^p}4XpZwwDw%|^^`=|diH1tLP;y<=)*Qa>7 zSMhltr4RJZSaTUD-Y5qYKh$8!8C~4yx7}IgK#0rJli!bKzbISw=%u)sF+CMy^dIJ^8$aug}t0!177=?xAC!R@&bSs9#(9 gkAIW<6;aQVvKEWF7`_^|G6Y?8We@?HRsa7c0A)yXg#Z8m literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-14.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..70a5c57cac9e824c13c91011dfc79ed99734c66e GIT binary patch literal 905 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriy8!{7)`b1IJkc9ALoo*)9e)KNVuz#k(+){XQ#ZkY*vsyl6FusoMKb(DkQ^m2Xo`=q@=ltX5 z{))A5^|dWqsy8RDzInILX67XS6FvW?Fn(Dp($K`nuJB1?0qdeJ4TkkbKUQY`zU@81 z?vto}<9~+N*Oy(F{-}2S+=p9d*bTkxl?)x^Q7mznu3!!{$H-*|Q>n z4y?&PR^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}n8BUK)(q+DCRxxMX9x;(j`>2v7Lm$A|tc z30qou{}`|Ln|spRHUxi;JwNR~L#gGz)C}gsDynmyJb6Crg^hXcv%8wg3)j_r`g-Sw z+YQ68qYPDLjS_A8h95-53+)<;qpjrD^KD#uJIg@+?kP*TIS;NIKjPm1W<7J3@yc7D z+@CD`o@YNTd)^QCwY}e?bk-mI`$gfOkNsMPs=uN#xjQXw`glbcerZ{%cjvcwrY&vgK=lt5B zwSR8qx`hjS-Gg>tdA~Mr$vkJp`{i3wzDdY3d|$wC)mrYe;JfL|ec~Pot=uQN&lUM; zO|i1*$?taIlz6G6_vSC>^Dk?=ebp+jdMRtzvQMl0Qz62r-=A(ZZDR8B%yX0Z4Nhx@ zJxEC4zj9r3!HZqw^VMp#xb>$r|?}V4Kx2>BY6rT81{a5IVJ=#0cGS9jH z`5eU%S(9mOmvq@^-?HStVqMOQGdIkgbn5p0+jBJktXRM^63 zg?^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nX78fO`FMM8w`-8%Sh*E5O#4EH8*F+8uS zUs#{}BPn0kJSMvCmws^n9(%z*tu-Ics;)idEi5w0jHkz{iO+HUvS%OVCQDfEasTEJ z{WHAx)jy%G-{HF^9eS9&wUXOSlJ6<|oTLVe^8(q^?Ub&iT*=$k8KaeG#jseW-u~Dw ze%1)dbuBYqWc%HI*rU#?`elvn)bKyqYcJVo?aE1r@_H<{Sgpaj*6eK9Nh6IlOZvk& z7j-AQ5h7{gF8(D${IFc_z@!t%-LlZXXRYj9f6y@cx_EJ#`kQS0g+Z*e#Tu zyZ7vt>wX0rRrV#z$2?XD_qgSm;gfMv!2Yh}0)DmN71@3)pR*NbJjk25?LULnM*XJJ z>Ik3LD?1KI{(X5T`?7A0d1l_jd!8wYuN>r;R+=A`O^@h5Vw8C;{Ig?9PgiosgUK6& z&&MqZU^~~nB*wdJ!<~CGHyM9&ZT@*}+4ACt_xbiuToJP*=q;b}%#%s{wTowM|M2*5 z{*o83YirJZFXlbEB+0A)_=WnYPx3;iS5$01I;-{V(xqo!sw_?V^jP^`N?eWQZtEV@!+MOeyuC+JghxKvuIK!(x2ANFfPO0A2+2p;meNh90r0Mgj`i2@$ zxw$rHm)bp=(aX*I)28J7zIv`N@40{E`SZRs`yhQ{?L8lp1CRBdOEBBb)nMK#;ASm< zt}DTK$Ei(^Zv;BXMShs?=v`|U8)hClcXraBorg4^)T!;wC^B{xVVrKalf~TW{;7#e z)MXpi+wZ+#zvZ7M$GeoUknO*dc?vvp80;GKp8^%$&c3xqPX0pL6}?H3xsMom3LmSh zOT5uO^ZdtQ{a literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-4.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..bbf6adf421023d773125ac784154f83364936935 GIT binary patch literal 1551 zcmbW!doQb9c8p7-NNY@(6d~8vrbO+KLd3E{GC~)ll2J5n)7V`S z*2+n_=Q3?1m(mGkj2Sx-u}sAXGvm_is6D&q>|eY4eb4*+^E~f+-p_euT-hkF!NbMf z1ppxc0Lm92;{#5BqJjcK0j`KZAdpB!B@{*lrL2t7QBzmN=;`9V)YHXc^^MF4`UYl( zSgeWlX0xv>NF)-DK;C6T+-Yt}BCcNoB9TaxGD=%TMVpAn;)(w`vWEa#5!eLmfr17A z1PwybpsWMH$=?YFKLz+RAOs47D#!h$*0fC`v43LSHoL4 zD5&obL>RMMKBxHjM-Qb4Hdyu{5NTrk1vjuJI;<$>uGj?N-({Boh~_^mEG~&9(&cp* z2tYrxITFVMT{e(xVjB#Xn9~x zBPh0CNz;flW-MB#eUkk<80~+_{(}AO;sGcqDE~Yt8n6e%eE@KXnd~!Hdz7SGb~PZR zt;5@;=*+Lp+%@|x)5l+In<6K%kTM|3>FXn^5m`j%o{uv{GhxtY$?D~jR0odlsj!}? z5jUM7yDl9WK)&nW!iigHv2JXt&3;YxR&x~5N~wsQz9AFKnsmfcW(n5l>N`f~dHl0L z!K(XQe&L0VM(dEw!TDkv!c2!3LaSnxT=RWU1lvk5BjD|8QEK+^9>Pv(*s(^nIb$9y zo>zk36_!0yqogv~SCemWZvf))wCQ5aTJHkPM3|W3H`pL< zN^5uP4RSKJKC6GgtfcVwM*8oJVOc{SU5FnS-02znP2IDL=i3h15u&kA7!WHK7_|-> zjBHnND1jSo)Si7Vz<#l-B3P1i`}x^7{P0H0D~vJ+>U>m>^kD5d_M8c{{|$TYPF>-V z&c?8sV``|30#lm3Qmbopvan}C5`~*&pw?u7d9D|NE!{tQtwc{axwplSDWY;I%aftj zoyIxOL%UyPHcivTS=g?`WOU^Z5ycpRgY;=$yQoEb_G-%FUEMj)oTCYaPxS2v8&&@skuO^)bC#Qut9|o8Lr7@<@yu)%rMZ={XF@o#we-XdPc-dk7D*sf0)} zQ1mc(v5NV~4s)+rlsiO2`5oqWs#yiSVh3N}*T1{UbnGKzO0cm4(cPMz1ajCpZG9U3 zo5F&bO|Mz4 zP+G1{;qJ4H=a=k{#gC`<4fToR?+JK&Bcf?;AqO(c?{ELmm7a{R2&cT|Xf`ml2)4yx z<6GIPPF=$HCeV~5(-gCeB+|R+Dj%_%d$(PkZ(mKmW;S^|gyo;+i>;(01av@rlAf5s zmyiQ@yYe?3=B}vTkO6rAyY05dOrNIasOl=<79Ch9(wdnM3s8S~TKjSc-OTlEuVbo2 zy+E4ckbj<)ZZ?uL((eo;RxwNbh9#76Fuw5Eb-W>!&!u!syjEeI|Yc zESxc5#MAhd0o*N7z&4R#XLEgddgwr0Wkux8Mjv-wBGhf-gl%&Q4UX|b6p=0s|1`|v RX7_&MZdbb8FFz|A{sS8JxqAQr literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-5.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..355ec3c1119f9fca9747563a7631684777f66a6e GIT binary patch literal 1756 zcmbW!c{J2(7zgm*Z}wr(Xqt=$8Czr>V`)bAFezIkON7c+)+~*(ON2rxMN(-{Q1*_Xz0&>~ySXtQ*=Q{8j#Irp!7@Aoln@3df)N(R5X9Gu;iM#Gq@^T@#Le>RN}EZlazx@5J!Mr* zEeeGqqqJ?iKG{HBn?n9E1Vp3J7-5Wrh=>GPmMBa9&sqBoz@h*}z#Iya007!(eN!35nW1@8b13m2EwGC{1j_d=3F zapZ*TVw9X|<>L(w-8^}1@32I)5PqWsK~h0cX^XN7MMqape;d`ze20al6@BL(N2k5c z`&?Xo4jww}>*pU3ek>v~D*8AhDLLg->glxfoZRyl@-AM=zkL11&5~Qp(z5cZ>ig`P z+PVkzPnuhva-KbZ(c077*FP{g^olz%`TEVPI{5V;JW&Wh7; zZGW)Hx@-H!Lx**t0Q+=`9N%uk5Ve}+mew%GO(@6}(uzaYsFmV;%Yoef^o%d19}NyH zD}2wHmX_$v4|3XX&cC=17gByBp|@bA3l?@X8hx9Q&*o^5FKbxC1c zm#Ir@LJd-Bjwf1Tgn()G?u{JAoUTLbpvIBB?uzpxs-}CY!||Il4xZcg`EINcVz%db zQDA+AUR4q~O(P*K{F`IZ0rWHW@wcn2s4~ypTSsi#RFlhty#b|og8D}H!|Wxn*O^~Ue6Q*T6O(8RMQE@QCj z%%G1EwEW51n(CzR4!u$LtMuOz|SFxc1W?{ zK)HZ3N19s;C6IOuF}s*VTK^*JqfX$o>r3JMUWs}OBtOzIOx-bEkXk}|h5eqN?; z6|vBg~th%evA)T12TqwuNiAqsKfI_o*Z{d z<;pA;tnU-OTIlc1V>K~v47qy-;_;ejX@}e+forg>Y`fz@C(WlZ zttOm&zMF@IW(9gW@NF`0x}7QMD$biRJN(ohd3r4bHd zIi!(}C&@}VR->OG6}Fl8Z#PUX2Pe)+dpDezxA3jwKKj6`yN2js8CJ`ANYQr1i#wv! z;zg3aWrfiVncVbD2bZd8$#}Yg&#o;>1prl)VQ(ybc090QlbWFvb@fG1aewVn@p(QA59|RvW1pM~YNh$=8oTbZS=F zab&L!E!I6xzJM1Kb!V1kX)PJ<;!lN_B$G8ql@I6nBo#F=Vjb;`H*Df`Oq`yq%IfVP UD;2c65i8}Ez#TX{ zcNGy(Atd86#$|v(=maqpg@JQ$U|@jA;-YfVpjn+dr@yN2bKdu#_c_mbKIdH}Y3Y z<3PgW?OirFI8o_zI?-;cyDQDjaSNUHW(bHvq0k0sGYrOzW{tO|{pYN;16V!47Vv?B zHUI<*Lb2f54S=ZI6Au0!;Lm^%C=8B3>Y?-vbPcj~00e|WAuuQ$4uk2s6LjwY3=221 zrg|cbIiX0K7#uB0QmRMts_j@G&^t@s@=Z$NjH4<)BAgBGPSDx z%YN)gstvUTU+g5by%w=8GG#^lqv{=F^{*^ zEJs%_?tWdhG?Eik?+#gA^t$-$<$z;U`GI={#zv%lg)g;!t3e>+r_-%n4}v3{2U47j z$eb>eWuhc0Ybv;teLZy;H6tT#xJ~vvDp&O+<#f0bPY0c3pHpbIo7SD%YKjiE7f1#w z0`_7;dDT@zHwErD#p4t;6OS)5+4hmM`xbjQ~B`$x6d$u53kLW^=y zHQomeK0*$-+Y)rAcP6$oJJ!i?>xw_JTxelhBQ==~>HL~YLa@h1FJbQ8tvKV^@jBvK ze_EaL`KuRt&JEp}+b$6*W?_}plrKG_B)nl_Uu#AZK=vIaq|bKn=Zo7jo2HcVB{z;q zC6C?~M`;@szZaE--Ezi|w6s_Bd?c>KkW*GUm9v{)9^A8SeW3!DxCVULh65MGc}iKu zp-#(h9w?${3v_>!d2V!x(OVvA1G^}V>1458_Rqr7`GU<1O?zEqU(HLRIM7=Y$R*T= zM5ZdNOzaB_{YM0L1YftD;bzRf&PG82MpQMuvRkd~s!Qf?&-`jq5pmWQOpi4*trA4hI}S6(9x zZey387Zr4wJV_l+$_NA78My^=M*k~j`JT_+&N_zW0~w9?WA|0?0A+)*cbNVqwP_bM z^zdb?u&8^a(sBMlC!TTDPzbMKV|eI9&ndLei9tlybY@J@XCpPOP4ZlxF>59xc2A|X zUr`Org*04GpB6bhAJk;N05|1}%aysx&p9Pt>%cSmm_z$W^3>Tr_L8y zyP;PR>1yR>QlmWGgPPZx>wt?gU%B`xXQw4&w2c_Dlrm6v_-PqC%2~1JMy8i->`pWH zX!!1H!ec$1f|x^|e1`%2F9<71b@?#ceWjNP>~B%lb3bWICs>Nkbu;VBG_xtW6I?5M z7#ga6Q9dQuFDTeZxt?{j;=98EgD!W0p#>9iaV}@4xr?fm&Bru9j6_Qto+Wnp*Ul^i zG9sqK^L;BC@|ivc&9E!_ literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-7.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..08bede5752f298a6c095a68f9e4c21b33f40fdc3 GIT binary patch literal 818 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nJjiyFAluu+Ze`sg3cUVWbgH=g+W#N|`_ zA6xCHJ-6(Q5BF!TiB>u;wPVZP7BlAsl6u5bNLFh^e68T Ge-i+BI3Xke literal 0 HcmV?d00001 diff --git a/http2-showcase/webroot/img/stairway_to_heaven-9-8.jpeg b/http2-showcase/webroot/img/stairway_to_heaven-9-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..84c0225ae7dd2cc3f3eaa3bf1aa6e3c8ec521163 GIT binary patch literal 1618 zcmbW!cTm%37zglQHX+ckmk9(CAb89Wg|PQ3B1;M5K){MvgDgShlqp*fD9bV}l%aws zVT+)QFbv9)A)M@ufGiQAL3{08|7!bv?|tr`d!Kvn{oH#reDnd}GBYwY0zhB@0I?Qu zGzRDcY;ZUN4r4Rr_DQfx#hDOFFre-#_=g!+v z?H$}N{&dOXvgZ{)|LXyPH-c_PMBa&tj){#+N&O`)JtH&g{)68Ni+(RIDJ^^YtcqS; zQ(IU6@>OeFdk3SltFM1xaOmCe$mrzM^vvws{KDeW#^$H3?Va7d&-=$N5CHkkV%6`k zf4I0=E-(}dfg+AwAaEdSL%5+ZaV0p9t`)-7hgX6W#>S_YTu|A9#4B5`^Sk-JWfvfj zCnYzIY2Rf34i^5uWPic_c8vlY5D@G0Al!g9u)EZ=A&~E1fp&2&CK;lF+y{G6`^gU1 zUmcha$kE8b)bcrluwovQtZoy*2PM0z^VLLfc^*wZXMMsId6rI6>UPy{(pd`jNcp)V z&v^Z7&cgluwRzhHYadwIN+fMLLnHT=l7queO^I_A&lMZ3ydp20o@HbVB%*mX$xS`a zOcxtxjG|^8>e;@QQd0D}r*{OfPh)t_0QPEYwQ^F2J+b~@s32i_ytjq%gd5svw`|mZ zKd}H;*Dx^Ucg?$;wx*yHq%(gde>vM=Xrw)V5>OdJui zI3Da+y?&S~xy_KPnN2*UO-{T?tdNObt$%)?MI4fhY4^e>v@Qta?#7E_))jy7`MP+lWLt@clOm6o@x2RA>7rOjS2ey|SzVv#a}g3a7W{rkx~iMCHdsED%AX zw+@?9o!X#pT4O}0g)Z_czn>h`Iq|AD)Ey{AZ+NX(9Cr5|77O43k zxDc1S&RFQ;K;odR<;(O<`v*O|*=snDK)ffm-kl7R9W}SFOjF2z{bZCGn4Bhkd69nJd@`&P8k``;eCX-WR@7&DxzqQA>!l#Y+aEO>wjbK)a;_vH1Gr7H z?1Y#)46U!)4!{7t0S;V9r?{_J>xQiw`r!>~t-d@r)yq5QdQg&&zLC;%*_plncB`QO z23w&5a}vjK_8oq^9MZmdmR1rkS(l^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!_zevP8L_^$`o$#^XYn1aJ2XUL*a#I%XeJ* zoXC8%wEK3%zEHvWb5@Hv&iN{9e7|c!XJx{+vo=PzPi|Ro&v1f;e7pV9?AtM_U*s}^ zHt7o~zFK~%L1XQw=!&IZCz|du+>t4FamNiAL8a&W@0mIsIheb0$ERDquY!z)^3+wz z{%9TBzAR02e}`d$*_oaH-b=U3%{c!&WXtQ`exB2ZT?$_x_|NbbG?)9dS<{v0l}`TK6(U5zz|1#@y)G$a@T9i(^l&YHn{AZDe) zyYqp!l{c>0er4IlJwk11tp`-y7>*adZH}7wZr+7xua7guYn@Jrk=?>1?oWlng$~kmz1A zEmvl<{jdKF6BbyWj7jX5DJYEUR^V;ol6gMs%%+<*`=XDXsr!}aE#UC{#b8C zAN#6Oc0SNS>}|>Qt4DVoSh%dqneq5{|8wnM3x9;Qp8dOTe%`OVNe55<)XNv2`+S$; zzxS)lUs$YJoo$i6t0d*;lg5@D3&qRN57<30SgXtLkn306c}DET(tBabSsG8~RR^#u zTS=%_oH)kMe0!_Nu79g}@2%Ht{PVhEf2qh3j$1CW5{>@~yEK@dp6wC8*qv!^Xmjj% zQ%mVV`S?q#A`j_q73BW&e8zXdd5hPI1hBPUonpM`=L-4E6SfDxnf$K)@KB+`>E!0h z6iarMzQ3P1|70v`Fuvr!;nnX)k5d}kFMO3>xpr=LZ08Xv*KKoIH{KNseSi63!a(&J|MsQytO|| j&$mTg4CkBuF0Xz2*mX-^@pfI6Q|7|=x-=H>|Gx Date: Sun, 14 May 2017 15:38:04 +0100 Subject: [PATCH 04/11] Fixed typo in spring example readme. --- spring-examples/README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-examples/README.adoc b/spring-examples/README.adoc index 738588e26..f7650163a 100644 --- a/spring-examples/README.adoc +++ b/spring-examples/README.adoc @@ -12,7 +12,7 @@ The link:spring-example/README.adoc[Vert.x Spring Example] shows how you can acc == Spring Boot Clustering -The link:spring-boot-clustering/README.adoc[Spring Boot Clustering Examples] show how you can setup a clustered Vert.x embedded in Spring Boot. +The link:springboot-clustering/README.adoc[Spring Boot Clustering Examples] show how you can setup a clustered Vert.x embedded in Spring Boot. == Spring Verticle Factory From a8c3d2ec89ed38510bc210ba9b35f39c254f1edd Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Tue, 16 May 2017 17:41:43 +0200 Subject: [PATCH 05/11] add an example using gRPC and SSL --- grpc-examples/pom.xml | 6 ++++++ .../src/main/resources/tls/client-truststore.jks | Bin 0 -> 782 bytes .../src/main/resources/tls/server-keystore.jks | Bin 0 -> 2071 bytes 3 files changed, 6 insertions(+) create mode 100644 grpc-examples/src/main/resources/tls/client-truststore.jks create mode 100644 grpc-examples/src/main/resources/tls/server-keystore.jks diff --git a/grpc-examples/pom.xml b/grpc-examples/pom.xml index 222ad2fec..6a11960f4 100644 --- a/grpc-examples/pom.xml +++ b/grpc-examples/pom.xml @@ -34,6 +34,12 @@ true + + io.netty + netty-tcnative-boringssl-static + 1.1.33.Fork26 + + org.mortbay.jetty.alpn jetty-alpn-agent diff --git a/grpc-examples/src/main/resources/tls/client-truststore.jks b/grpc-examples/src/main/resources/tls/client-truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..fbb345f0cd3bb9345af03259132fc417d070befe GIT binary patch literal 782 zcmezO_TO6u1_mY|W(3n*C8@DU zz|6$R#KfXg@1tzM%f_kI=F#?@mywa1mBB#7P{=@ljX9KsS(q~?KRGccBfq%BKu(<3 z(9F=l$k4zNNE$=|xgZ9Ni$hlvqY|?5jI0dIO^o~uKo@W^H8Cs@om>ZJ&JlsT=`$DFlF(P z_Z($k<=y`?h8@0o=jr$P0S1gSChRei$uwk-;I_ObS(Wx7TzT`IAA7E~Jk6Jgtzufb z&10ej%RVc)O&d%q_tl2I+O(BLNp*Mb^uS)%Nd`t5g&!ZsdsjRY zGb01zVnqXa16g2*%kr^^v4~vu*T2+Il@8OYwg2!Y%g^5S=w<62*B?RNscv1O5ciZOaLTmNzt4_;Y(a&Hb z7rkZ{_H#7jOQ@fc+c_cnKVBzrg%r$3QLK0Gp47p2bU|#^INnhdtFId^iMp^ h!*l1JKt7ob)A+aMez5$KXfyG6S=h;X_V2GB004s=L8t%# literal 0 HcmV?d00001 diff --git a/grpc-examples/src/main/resources/tls/server-keystore.jks b/grpc-examples/src/main/resources/tls/server-keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..8e68758e08cbce2416d358437f2dc5670d464939 GIT binary patch literal 2071 zcmV+y2|Ev&K4Ff%?E1K1X?yn8 ziN}Nd>Fv|Ot&;6gRL$hk%iPh&px zP@g-;y%?*4q4y2r$z>xp)c`_}(upfrz$ zPR?Bs);~eIa!e;K;*f&Q7frr<{#M!KlP@2r4O$xBEcg4hi?7AqSlxY!RE%NNadn0D zrL0Fw6Xgf?nTZMxuvj_on8z-B(vz6@N7g~3uYFAD<)~)Sts;ExzDvO3noxx_X?GcF#KyaRuIY&M@DGlx|EPneaSDPpJBZvy zOb;V;#$pN5XjySZ&u%sxmDtZqAYa>LuJEp2cZfbF3brJcq?Ex)&U`C{i17~WiCPA4 zX>3um8Vjf@yO39kYAuzILc%lCX{Sd8V6|;VvNkznr4r%yVJOdrJ^SulhU=g6ZGN#A z)xF@M=l!CGV<5TSJ43A($&otE_du*9Jb0|r$|4i2B6bN6XUl6An^ zgWj_KbW;PR@2^52*mbsf89(04lzcmvTmIjBh|;H&hgBPoRU6>GSoHzcZpSEeh2Bd= zIg)2ag0oWW7V3B$I73K2Z^G zO?*rJry(%{r7k=Ua*o|UU}f#{RCX9yMc&`SJ`<^|^A#XwA|)E5UP$Qj}|^|qjS zY)E;(8w?e>2wfSr*&2QR;f|=jn;4o4JQcZ`IV|7FJ+E}0ssWpHonz58oGG0!f&X&^ z)LvRc21U#jbbA^^x8F4&}N$jenHUGm-hT65}kV_M2;5 z!Dm{WYyn|6go=&$Kq=0M(&~1=@>8EQ;|6g`bb`FFXwqnPDZy_gg!+3X0sg={zLz+C zntR6x+tIvR*PPAoQuFLb2>0W^z@v2mcN0zZT8IVFVrfSR3&SGKi;1^P&#?=^0xM7H z^zAM{&olTSpe0t;$r(_A;z6I(!MAVnrTV^j8%qzaCOXTgP9%1@l*ouedx}E;GSape{td~|vaa046W4TH(+L>3 zKm4Wn7}T~=mm+gASDiXPqU>cAHt4T0>gUYA(>?1UCod@a{xX<^f|3G2y)-!qgKfiN zfj{1wdl)YBLM!B@F2IAFd0_~u`o2PPoh-(XyxiX^WNkC@KHnDbC6NNV^ZD1gFnV3D zee90lF$6&LNQU&6fqJo5C#KP1OpQZY;R*>Y-n$DbTEPe zA}|dG2`Yw2hW8Bt0RaU71A+k$05F093Ic)w0RWWlAZ&MqZ};YHL4UO3Uo`S=n3V*o z48YGH3Bj>~zJoW&0RjvMc;%@czr8*aCAUCNJ>>HFEnn$hG5}H^T~^}|;mddTGfJQ} z6Uq0@3;mDj@3$wDkY#3*qpSngJeb3A?@k7xu#}_3?+AAFA4mTIR>RfY<@cXZFaem5 zyfPeVF$Y)+Io26^X7E=dv)uT+)`aD67+rb-rM5_s7zDmL9aw*2A|<9R>qc9S#H*1QgRxFWQ3J zVOfpb)%x+or@iqL_Fym#1_>&LNQU33QEMls@^VOaJN%A}Axp%!2#(5v3){@k%IwYLg>2C1=pA zUa$X*V5b_OveCV^vzHRBF5e}VX{e6?JRV!AlqF@LIge}H_A{IUJWHHTjFO*GTywZ~ zs5uyiHUi~c!KWb~4>*ToO4MSa{ugFQNx8gH4ji&=)RvLH2{fB6ZMVkqqW}2 Date: Tue, 16 May 2017 17:44:21 +0200 Subject: [PATCH 06/11] add the GRPC + SSL example --- .../io/vertx/example/grpc/ssl/Client.java | 41 ++++++++++++++++ .../io/vertx/example/grpc/ssl/Server.java | 47 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java create mode 100644 grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java diff --git a/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java new file mode 100644 index 000000000..1089103ad --- /dev/null +++ b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java @@ -0,0 +1,41 @@ +package io.vertx.example.grpc.ssl; + +import io.grpc.ManagedChannel; +import io.grpc.examples.helloworld.GreeterGrpc; +import io.grpc.examples.helloworld.HelloRequest; +import io.vertx.core.AbstractVerticle; +import io.vertx.core.net.JksOptions; +import io.vertx.example.grpc.util.Runner; +import io.vertx.grpc.VertxChannelBuilder; + +/** + * @author Julien Viet + */ +public class Client extends AbstractVerticle { + + public static void main(String[] args) { + Runner.runExample(Client.class); + } + + @Override + public void start() throws Exception { + ManagedChannel channel = VertxChannelBuilder + .forAddress(vertx, "localhost", 50051) + .usePlaintext(true) + .useSsl(options -> options.setSsl(true) + .setUseAlpn(true) + .setTrustStoreOptions(new JksOptions() + .setPath("tls/client-truststore.jks") + .setPassword("wibble"))) + .build(); + GreeterGrpc.GreeterVertxStub stub = GreeterGrpc.newVertxStub(channel); + HelloRequest request = HelloRequest.newBuilder().setName("Julien").build(); + stub.sayHello(request, asyncResponse -> { + if (asyncResponse.succeeded()) { + System.out.println("Succeeded " + asyncResponse.result().getMessage()); + } else { + asyncResponse.cause().printStackTrace(); + } + }); + } +} diff --git a/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java new file mode 100644 index 000000000..0b60a8b79 --- /dev/null +++ b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java @@ -0,0 +1,47 @@ +package io.vertx.example.grpc.ssl; + +import io.grpc.examples.helloworld.GreeterGrpc; +import io.grpc.examples.helloworld.HelloReply; +import io.grpc.examples.helloworld.HelloRequest; +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Future; +import io.vertx.core.net.JksOptions; +import io.vertx.example.grpc.util.Runner; +import io.vertx.grpc.VertxServer; +import io.vertx.grpc.VertxServerBuilder; + +/** + * @author Julien Viet + */ +public class Server extends AbstractVerticle { + + public static void main(String[] args) { + Runner.runExample(Server.class); + } + + @Override + public void start() throws Exception { + VertxServer server = VertxServerBuilder.forPort(vertx, 50051) + .addService(new GreeterGrpc.GreeterVertxImplBase() { + @Override + public void sayHello(HelloRequest request, Future future) { + System.out.println("Hello " + request.getName()); + future.complete(HelloReply.newBuilder().setMessage(request.getName()).build()); + } + }) + .useSsl(options -> options + .setSsl(true) + .setUseAlpn(true) + .setKeyStoreOptions(new JksOptions() + .setPath("tls/server-keystore.jks") + .setPassword("wibble"))) + .build(); + server.start(ar -> { + if (ar.succeeded()) { + System.out.println("gRPC service started"); + } else { + System.out.println("Could not start server " + ar.cause().getMessage()); + } + }); + } +} From 77aa53295ea4a35d7663f7632f59fef47e337392 Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Mon, 22 May 2017 09:09:11 +0200 Subject: [PATCH 07/11] A simple example using SSL. --- grpc-examples/README.adoc | 19 +++++++++++++++++++ .../io/vertx/example/grpc/ssl/Client.java | 3 +-- .../io/vertx/example/grpc/ssl/Server.java | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/grpc-examples/README.adoc b/grpc-examples/README.adoc index 678575845..ce02b40c8 100644 --- a/grpc-examples/README.adoc +++ b/grpc-examples/README.adoc @@ -74,6 +74,25 @@ You can run the server and then run the client. You can read more about it on the http://www.grpc.io/docs/quickstart/java.html[gRPC website] +== SSL example + +This example is the _Hello World example_ with SSL configuration. + +It shows a simple gRPC service that invokes a service that +takes takes an `HelloRequest` string wrapper and returns an `HelloReply` string wrapper. The communication uses SSL. + +link:src/main/java/io/vertx/example/grpc/ssl/Server.java[gRPC server example] + +The gRPC service extends the `GreeterGrpc.GreeterVertxImplBase` generated class and +implements the service logic. + +link:src/main/java/io/vertx/example/grpc/ssl/Client.java[gRPC client example] + +The gRPC client creates an instance of the `GreeterGrpc.newVertxStub` generated class and +then use it to invoke the service. + +You can run the server and then run the client. + == Route Guide example This example is adapted from the https://github.com/grpc/grpc-java/tree/master/examples[gRPC examples]. diff --git a/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java index 1089103ad..f9cbdf5a7 100644 --- a/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java +++ b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Client.java @@ -20,8 +20,7 @@ public static void main(String[] args) { @Override public void start() throws Exception { ManagedChannel channel = VertxChannelBuilder - .forAddress(vertx, "localhost", 50051) - .usePlaintext(true) + .forAddress(vertx, "localhost", 8080) .useSsl(options -> options.setSsl(true) .setUseAlpn(true) .setTrustStoreOptions(new JksOptions() diff --git a/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java index 0b60a8b79..c315af72e 100644 --- a/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java +++ b/grpc-examples/src/main/java/io/vertx/example/grpc/ssl/Server.java @@ -21,7 +21,7 @@ public static void main(String[] args) { @Override public void start() throws Exception { - VertxServer server = VertxServerBuilder.forPort(vertx, 50051) + VertxServer server = VertxServerBuilder.forPort(vertx, 8080) .addService(new GreeterGrpc.GreeterVertxImplBase() { @Override public void sayHello(HelloRequest request, Future future) { From 21b79e88cffe69aba4241b96086c2c8bb4674b24 Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Mon, 22 May 2017 09:15:46 +0200 Subject: [PATCH 08/11] drop a line in the main readme --- README.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.adoc b/README.adoc index 1a28a27ce..59a7c6576 100644 --- a/README.adoc +++ b/README.adoc @@ -239,3 +239,7 @@ the event bus. === Vert.x fatjar examples The link:fatjar-examples/README.adoc[Vert.x fatjar Examples] show how you can build fatjar with Maven or Gradle. + +=== Http/2 Showcase + +This link:http2-showcase/README.md application highlights the benefits of HTTP/2 when dealing with latency on the web. From 26a6a66339a20045c1db47e7529b6ea67beae0be Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Mon, 22 May 2017 09:22:42 +0200 Subject: [PATCH 09/11] Dropped a line in the readme file to link to the example. --- web-examples/README.adoc | 12 ++++++++---- .../io/vertx/example/web/vertxbus/java/Client.java | 14 ++++---------- .../io/vertx/example/web/vertxbus/java/Server.java | 2 +- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/web-examples/README.adoc b/web-examples/README.adoc index de193ed9e..a68a2c90f 100644 --- a/web-examples/README.adoc +++ b/web-examples/README.adoc @@ -134,6 +134,10 @@ Before running the example you need to download the dependencies, the easiest fo Run the server either in your IDE or on the command line, then run the node client `npm start`. +== EventBus Bridge - Java client + +The link:src/main/java/io/vertx/example/web/vertxbus/java contains an example of communication between a client and a service using the SockJS event bus. This example is written in java, and the client interacts using SockJS (in Java, using the web socket protocol). + == Real-time - client side event bus This example demonstrates a full duplex connection between the browser and the server side. @@ -167,7 +171,7 @@ When you get the index page in your browser you should see it update every secon == Real-time - chat service This example demonstrates 2-way communication between the client and the server using the event bus bridge -and web sockets. +and web sockets. The link:src/main/java/io/vertx/example/web/chat/Server.java[Java real-time chat example] @@ -175,10 +179,10 @@ The link:src/main/java/io/vertx/example/web/chat/webroot/index.html[index.html] bootstraps the vertxbus.js bridge from the client and uses jQuery to handle manipulating the DOM and registering event handlers. -When you load the index page in a browser, you should see a div for chat messages and -an input field where you can enter your own messages. Typing in the input field and +When you load the index page in a browser, you should see a div for chat messages and +an input field where you can enter your own messages. Typing in the input field and pressing ENTER will cause the input to be sent via the event bus to the server. The server -will accept the message, prepend it with a timestamp and publish back to all registered +will accept the message, prepend it with a timestamp and publish back to all registered listeners (e.g. All connected clients). Take note of the addInboundPermitted and addOutboundPermitted settings on the BridgeOptions object to be sure that you authorize the correct messages to traverse the event bus bridge in the appropriate direction. diff --git a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java index b0cef5c21..4119b7e9d 100644 --- a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java +++ b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java @@ -15,23 +15,17 @@ public static void main(String[] args) { System.out.println("Connected"); sendPing(ws); - vertx.setPeriodic(5000, id -> { - sendPing(ws); - }); + vertx.setPeriodic(5000, id -> sendPing(ws)); // Register JsonObject msg = new JsonObject().put("type", "register").put("address", "feed"); ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); - ws.handler(buff -> { - System.out.println(buff); - }); - }, fail -> { - System.out.println("Failed: " + fail); - }); + ws.handler(System.out::println); + }, fail -> System.out.println("Failed: " + fail)); } - static void sendPing(WebSocket ws) { + private static void sendPing(WebSocket ws) { JsonObject msg = new JsonObject().put("type", "ping"); ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); } diff --git a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java index 82edfc851..5979fd859 100644 --- a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java +++ b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java @@ -48,7 +48,7 @@ public void start() throws Exception { EventBus eb = vertx.eventBus(); - vertx.setPeriodic(1000l, t -> { + vertx.setPeriodic(1000L, t -> { // Create a timestamp string String timestamp = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(Date.from(Instant.now())); From 3ed0316f6117af6b51ad674744f9b064d8def98f Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Mon, 22 May 2017 09:24:05 +0200 Subject: [PATCH 10/11] Mark the vert.x event bus bridge - java example as non polyglot. --- web-examples/codetrans-config.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web-examples/codetrans-config.json b/web-examples/codetrans-config.json index adda44a9d..8f6d1773e 100644 --- a/web-examples/codetrans-config.json +++ b/web-examples/codetrans-config.json @@ -48,6 +48,10 @@ "package": "io.vertx.example.web.realtime" }, + { + "package": "io.vertx.example.web.vertxbus.java" + }, + // Rest, JS only { "package": "io.vertx.example.web.rest", @@ -55,4 +59,4 @@ } ] -} \ No newline at end of file +} From 65f2dcec424ea68b679aca0812e71e1123bd5ccf Mon Sep 17 00:00:00 2001 From: Clement Escoffier Date: Mon, 22 May 2017 11:30:54 +0200 Subject: [PATCH 11/11] revert PR #191 until we find a better way to deal with the sockJS protocol --- web-examples/README.adoc | 4 -- web-examples/codetrans-config.json | 4 -- .../example/web/vertxbus/java/Client.java | 33 ----------- .../example/web/vertxbus/java/Server.java | 58 ------------------- 4 files changed, 99 deletions(-) delete mode 100644 web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java delete mode 100644 web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java diff --git a/web-examples/README.adoc b/web-examples/README.adoc index a68a2c90f..a899051f3 100644 --- a/web-examples/README.adoc +++ b/web-examples/README.adoc @@ -134,10 +134,6 @@ Before running the example you need to download the dependencies, the easiest fo Run the server either in your IDE or on the command line, then run the node client `npm start`. -== EventBus Bridge - Java client - -The link:src/main/java/io/vertx/example/web/vertxbus/java contains an example of communication between a client and a service using the SockJS event bus. This example is written in java, and the client interacts using SockJS (in Java, using the web socket protocol). - == Real-time - client side event bus This example demonstrates a full duplex connection between the browser and the server side. diff --git a/web-examples/codetrans-config.json b/web-examples/codetrans-config.json index 8f6d1773e..9661f8322 100644 --- a/web-examples/codetrans-config.json +++ b/web-examples/codetrans-config.json @@ -48,10 +48,6 @@ "package": "io.vertx.example.web.realtime" }, - { - "package": "io.vertx.example.web.vertxbus.java" - }, - // Rest, JS only { "package": "io.vertx.example.web.rest", diff --git a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java deleted file mode 100644 index 4119b7e9d..000000000 --- a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Client.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.vertx.example.web.vertxbus.java; - -import io.vertx.core.Vertx; -import io.vertx.core.http.HttpClient; -import io.vertx.core.http.WebSocket; -import io.vertx.core.json.JsonObject; - -public class Client { - - public static void main(String[] args) { - Vertx vertx = Vertx.vertx(); - HttpClient client = vertx.createHttpClient(); - - client.websocket(8080, "localhost", "/eventbus/websocket", ws -> { - System.out.println("Connected"); - sendPing(ws); - - vertx.setPeriodic(5000, id -> sendPing(ws)); - - // Register - JsonObject msg = new JsonObject().put("type", "register").put("address", "feed"); - ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); - - ws.handler(System.out::println); - }, fail -> System.out.println("Failed: " + fail)); - } - - private static void sendPing(WebSocket ws) { - JsonObject msg = new JsonObject().put("type", "ping"); - ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); - } - -} diff --git a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java b/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java deleted file mode 100644 index 5979fd859..000000000 --- a/web-examples/src/main/java/io/vertx/example/web/vertxbus/java/Server.java +++ /dev/null @@ -1,58 +0,0 @@ -package io.vertx.example.web.vertxbus.java; - -import java.text.DateFormat; -import java.time.Instant; -import java.util.Date; - -import io.vertx.core.AbstractVerticle; -import io.vertx.core.eventbus.EventBus; -import io.vertx.core.json.JsonObject; -import io.vertx.example.util.Runner; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.handler.sockjs.BridgeOptions; -import io.vertx.ext.web.handler.sockjs.PermittedOptions; -import io.vertx.ext.web.handler.sockjs.SockJSHandler; - -/** - * A {@link io.vertx.core.Verticle} which bridges Java to the @{link EventBus}. - */ -public class Server extends AbstractVerticle { - - // Convenience method so you can run it in your IDE - public static void main(String[] args) { - Runner.runExample(Server.class); - } - - @Override - public void start() throws Exception { - - Router router = Router.router(vertx); - - // Allow events for the designated addresses in/out of the event bus bridge - BridgeOptions opts = new BridgeOptions() - .addOutboundPermitted(new PermittedOptions().setAddress("feed")); - - // Create the event bus bridge and add it to the router. - SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts); - router.route("/eventbus/*").handler(ebHandler); - - // Start the web server and tell it to use the router to handle requests. - vertx.createHttpServer().requestHandler(router::accept) - .listen(8080, "localhost", ar -> { - if (ar.succeeded()) { - System.out.printf("Server started on localhost:%s", ar.result().actualPort()); - } else if (ar.failed()) { - System.out.printf("Failed: %s", ar.cause()); - } - }); - - EventBus eb = vertx.eventBus(); - - vertx.setPeriodic(1000L, t -> { - // Create a timestamp string - String timestamp = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(Date.from(Instant.now())); - - eb.send("feed", new JsonObject().put("now", timestamp)); - }); - } -}