templates.swift 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. *
  3. * Copyright 2017, Google Inc.
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are
  8. * met:
  9. *
  10. * * Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * * Redistributions in binary form must reproduce the above
  13. * copyright notice, this list of conditions and the following disclaimer
  14. * in the documentation and/or other materials provided with the
  15. * distribution.
  16. * * Neither the name of Google Inc. nor the names of its
  17. * contributors may be used to endorse or promote products derived from
  18. * this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. *
  32. */
  33. // GENERATED: DO NOT EDIT
  34. //
  35. // This file contains base64 encodings of templates used for Swift GRPC code generation.
  36. //
  37. func loadTemplates() -> [String:String] {
  38. var templates : [String:String] = [:]
  39. templates["client-call-bidistreaming.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoQmlkaXJlY3Rpb25hbCBTdHJlYW1pbmcpCnt7IGFjY2VzcyB9fSBwcm90b2NvbCB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgLy8vIENhbGwgdGhpcyB0byB3YWl0IGZvciBhIHJlc3VsdC4gQmxvY2tpbmcuCiAgZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0KICAvLy8gQ2FsbCB0aGlzIHRvIHdhaXQgZm9yIGEgcmVzdWx0LiBOb25ibG9ja2luZy4KICBmdW5jIHJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzCiAgCiAgLy8vIENhbGwgdGhpcyB0byBzZW5kIGVhY2ggbWVzc2FnZSBpbiB0aGUgcmVxdWVzdCBzdHJlYW0uCiAgZnVuYyBzZW5kKF8gbWVzc2FnZTp7eyBtZXRob2R8aW5wdXQgfX0sIGVycm9ySGFuZGxlcjpAZXNjYXBpbmcgKEVycm9yKS0+KCkpIHRocm93cwogIAogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIHNlbmRpbmcgY29ubmVjdGlvbi4gQmxvY2tpbmcuCiAgZnVuYyBjbG9zZVNlbmQoKSB0aHJvd3MKICAvLy8gQ2FsbCB0aGlzIHRvIGNsb3NlIHRoZSBzZW5kaW5nIGNvbm5lY3Rpb24uIE5vbmJsb2NraW5nLgogIGZ1bmMgY2xvc2VTZW5kKGNvbXBsZXRpb246QGVzY2FwaW5nICgpLT4oKSkgdGhyb3dzCiAgCiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICBmdW5jIGNhbmNlbCgpCn0KCnt7IGFjY2VzcyB9fSBleHRlbnNpb24ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgIHZhciByZXR1cm5FcnJvciA6IHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PwogICAgdmFyIHJldHVybk1lc3NhZ2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgcmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5NZXNzYWdlID0gcmVzcG9uc2UKICAgICAgICByZXR1cm5FcnJvciA9IGVycm9yCiAgICAgICAgc2VtLnNpZ25hbCgpCiAgICAgIH0KICAgICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogICAgfQogICAgaWYgbGV0IHJldHVybkVycm9yID0gcmV0dXJuRXJyb3IgewogICAgICB0aHJvdyByZXR1cm5FcnJvcgogICAgfQogICAgcmV0dXJuIHJldHVybk1lc3NhZ2UKICB9CgogIGZ1bmMgY2xvc2VTZW5kKCkgdGhyb3dzIHsKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIHRyeSBjbG9zZVNlbmQoKSB7CiAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogIH0KfQoKZmlsZXByaXZhdGUgZmluYWwgY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX1JbXBsOiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgcHJpdmF0ZSB2YXIgY2FsbCA6IENhbGwKCiAgLy8vIENyZWF0ZSBhIGNhbGwuCiAgaW5pdChfIGNoYW5uZWw6IENoYW5uZWwpIHsKICAgIHNlbGYuY2FsbCA9IGNoYW5uZWwubWFrZUNhbGwoInt7IC58cGF0aDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IikKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gc3RhcnQgYSBjYWxsLiBOb25ibG9ja2luZy4KICBmdW5jIHN0YXJ0KG1ldGFkYXRhOk1ldGFkYXRhLCBjb21wbGV0aW9uOkBlc2NhcGluZyAoQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgdHJ5IHNlbGYuY2FsbC5zdGFydCguYmlkaVN0cmVhbWluZywgbWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICAgICAgcmV0dXJuIHNlbGYKICB9CgogIGZ1bmMgcmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKSB0aHJvd3MgewogICAgZG8gewogICAgICB0cnkgY2FsbC5yZWNlaXZlTWVzc2FnZSgpIHsoZGF0YSkgaW4KICAgICAgICBpZiBsZXQgZGF0YSA9IGRhdGEgewogICAgICAgICAgaWYgbGV0IHJldHVybk1lc3NhZ2UgPSB0cnk/IHt7IG1ldGhvZHxvdXRwdXQgfX0oc2VyaWFsaXplZERhdGE6ZGF0YSkgewogICAgICAgICAgICBjb21wbGV0aW9uKHJldHVybk1lc3NhZ2UsIG5pbCkKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbXBsZXRpb24obmlsLCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5pbnZhbGlkTWVzc2FnZVJlY2VpdmVkKQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZW5kT2ZTdHJlYW0pCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmdW5jIHNlbmQoXyBtZXNzYWdlOnt7IG1ldGhvZHxpbnB1dCB9fSwgZXJyb3JIYW5kbGVyOkBlc2NhcGluZyAoRXJyb3IpLT4oKSkgdGhyb3dzIHsKICAgIGxldCBtZXNzYWdlRGF0YSA9IHRyeSBtZXNzYWdlLnNlcmlhbGl6ZWREYXRhKCkKICAgIHRyeSBjYWxsLnNlbmRNZXNzYWdlKGRhdGE6bWVzc2FnZURhdGEsIGVycm9ySGFuZGxlcjplcnJvckhhbmRsZXIpCiAgfQoKICBmdW5jIGNsb3NlU2VuZChjb21wbGV0aW9uOkBlc2NhcGluZyAoKS0+KCkpIHRocm93cyB7CiAgICB0cnkgY2FsbC5jbG9zZSgpIHsKICAgICAgY29tcGxldGlvbigpCiAgICB9CiAgfQoKICBmdW5jIGNhbmNlbCgpIHsKICAgIGNhbGwuY2FuY2VsKCkKICB9Cn0KCi8vLXslIGlmIGdlbmVyYXRlX21vY2tfY29kZSAlfQovLy8gU2ltcGxlIGZha2UgaW1wbGVtZW50YXRpb24gb2Yge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gdGhhdCByZXR1cm5zIGEgcHJldmlvdXNseS1kZWZpbmVkIHNldCBvZiByZXN1bHRzCi8vLyBhbmQgc3RvcmVzIHNlbnQgdmFsdWVzIGZvciBsYXRlciB2ZXJpZmljYXRpb24uCmNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19U3R1Yjoge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHZhciBpbnB1dHM6IFt7eyBtZXRob2R8aW5wdXQgfX1dID0gW10KICB2YXIgb3V0cHV0czogW3t7IG1ldGhvZHxvdXRwdXQgfX1dID0gW10KICAKICBmdW5jIHJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzIHsKICAgIGlmIGxldCBvdXRwdXQgPSBvdXRwdXRzLmZpcnN0IHsKICAgICAgb3V0cHV0cy5yZW1vdmVGaXJzdCgpCiAgICAgIGNvbXBsZXRpb24ob3V0cHV0LCBuaWwpCiAgICB9IGVsc2UgewogICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZW5kT2ZTdHJlYW0pCiAgICB9CiAgfQoKICBmdW5jIHNlbmQoXyBtZXNzYWdlOnt7IG1ldGhvZHxpbnB1dCB9fSwgZXJyb3JIYW5kbGVyOkBlc2NhcGluZyAoRXJyb3IpLT4oKSkgdGhyb3dzIHsKICAgIGlucHV0cy5hcHBlbmQobWVzc2FnZSkKICB9CgogIGZ1bmMgY2xvc2VTZW5kKGNvbXBsZXRpb246QGVzY2FwaW5nICgpLT4oKSkgdGhyb3dzIHsgY29tcGxldGlvbigpIH0KCiAgZnVuYyBjYW5jZWwoKSB7IH0KfQovLy17JSBlbmRpZiAlfQo="
  40. templates["client-call-clientstreaming.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoQ2xpZW50IFN0cmVhbWluZykKe3sgYWNjZXNzIH19IHByb3RvY29sIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAvLy8gQ2FsbCB0aGlzIHRvIHNlbmQgZWFjaCBtZXNzYWdlIGluIHRoZSByZXF1ZXN0IHN0cmVhbS4gTm9uYmxvY2tpbmcuCiAgZnVuYyBzZW5kKF8gbWVzc2FnZTp7eyBtZXRob2R8aW5wdXQgfX0sIGVycm9ySGFuZGxlcjpAZXNjYXBpbmcgKEVycm9yKS0+KCkpIHRocm93cwogIAogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UuIEJsb2NraW5nLgogIGZ1bmMgY2xvc2VBbmRSZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0KICAvLy8gQ2FsbCB0aGlzIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlLiBOb25ibG9ja2luZy4KICBmdW5jIGNsb3NlQW5kUmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKSB0aHJvd3MKICAKICAvLy8gQ2FuY2VsIHRoZSBjYWxsLgogIGZ1bmMgY2FuY2VsKCkKfQoKe3sgYWNjZXNzIH19IGV4dGVuc2lvbiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgZnVuYyBjbG9zZUFuZFJlY2VpdmUoKSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICB2YXIgcmV0dXJuRXJyb3IgOiB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8KICAgIHZhciByZXR1cm5SZXNwb25zZSA6IHt7IG1ldGhvZHxvdXRwdXQgfX0hCiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICBkbyB7CiAgICAgIHRyeSBjbG9zZUFuZFJlY2VpdmUoKSB7cmVzcG9uc2UsIGVycm9yIGluCiAgICAgICAgcmV0dXJuUmVzcG9uc2UgPSByZXNwb25zZQogICAgICAgIHJldHVybkVycm9yID0gZXJyb3IKICAgICAgICBzZW0uc2lnbmFsKCkKICAgICAgfQogICAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgdGhyb3cgZXJyb3IKICAgIH0KICAgIGlmIGxldCByZXR1cm5FcnJvciA9IHJldHVybkVycm9yIHsKICAgICAgdGhyb3cgcmV0dXJuRXJyb3IKICAgIH0KICAgIHJldHVybiByZXR1cm5SZXNwb25zZQogIH0KfQoKZmlsZXByaXZhdGUgZmluYWwgY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX1JbXBsOiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgcHJpdmF0ZSB2YXIgY2FsbCA6IENhbGwKCiAgLy8vIENyZWF0ZSBhIGNhbGwuCiAgaW5pdChfIGNoYW5uZWw6IENoYW5uZWwpIHsKICAgIHNlbGYuY2FsbCA9IGNoYW5uZWwubWFrZUNhbGwoInt7IC58cGF0aDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IikKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gc3RhcnQgYSBjYWxsLiBOb25ibG9ja2luZy4KICBmdW5jIHN0YXJ0KG1ldGFkYXRhOk1ldGFkYXRhLCBjb21wbGV0aW9uOkBlc2NhcGluZyAoQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgdHJ5IHNlbGYuY2FsbC5zdGFydCguY2xpZW50U3RyZWFtaW5nLCBtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogICAgICByZXR1cm4gc2VsZgogIH0KCiAgZnVuYyBzZW5kKF8gbWVzc2FnZTp7eyBtZXRob2R8aW5wdXQgfX0sIGVycm9ySGFuZGxlcjpAZXNjYXBpbmcgKEVycm9yKS0+KCkpIHRocm93cyB7CiAgICBsZXQgbWVzc2FnZURhdGEgPSB0cnkgbWVzc2FnZS5zZXJpYWxpemVkRGF0YSgpCiAgICB0cnkgY2FsbC5zZW5kTWVzc2FnZShkYXRhOm1lc3NhZ2VEYXRhLCBlcnJvckhhbmRsZXI6ZXJyb3JIYW5kbGVyKQogIH0KCiAgZnVuYyBjbG9zZUFuZFJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzIHsKICAgIGRvIHsKICAgICAgdHJ5IGNhbGwucmVjZWl2ZU1lc3NhZ2UoKSB7KHJlc3BvbnNlRGF0YSkgaW4KICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLAogICAgICAgICAgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgY29tcGxldGlvbihyZXNwb25zZSwgbmlsKQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICB9CiAgICAgIH0KICAgICAgdHJ5IGNhbGwuY2xvc2UoY29tcGxldGlvbjp7fSkKICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICB0aHJvdyBlcnJvcgogICAgfQogIH0KCiAgZnVuYyBjYW5jZWwoKSB7CiAgICBjYWxsLmNhbmNlbCgpCiAgfQp9CgovLy17JSBpZiBnZW5lcmF0ZV9tb2NrX2NvZGUgJX0KLy8vIFNpbXBsZSBmYWtlIGltcGxlbWVudGF0aW9uIG9mIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19Ci8vLyBzdG9yZXMgc2VudCB2YWx1ZXMgZm9yIGxhdGVyIHZlcmlmaWNhdGlvbiBhbmQgZmluYWxsIHJldHVybnMgYSBwcmV2aW91c2x5LWRlZmluZWQgcmVzdWx0LgpjbGFzcyB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fVN0dWI6IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICB2YXIgaW5wdXRzOiBbe3sgbWV0aG9kfGlucHV0IH19XSA9IFtdCiAgdmFyIG91dHB1dDoge3sgbWV0aG9kfG91dHB1dCB9fT8KCiAgZnVuYyBzZW5kKF8gbWVzc2FnZTp7eyBtZXRob2R8aW5wdXQgfX0sIGVycm9ySGFuZGxlcjpAZXNjYXBpbmcgKEVycm9yKS0+KCkpIHRocm93cyB7CiAgICBpbnB1dHMuYXBwZW5kKG1lc3NhZ2UpCiAgfQogIAogIGZ1bmMgY2xvc2VBbmRSZWNlaXZlKGNvbXBsZXRpb246QGVzY2FwaW5nICh7eyBtZXRob2R8b3V0cHV0IH19Pywge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/KS0+KCkpIHRocm93cyB7CiAgICBjb21wbGV0aW9uKG91dHB1dCEsIG5pbCkKICB9CgogIGZ1bmMgY2FuY2VsKCkgeyB9Cn0KLy8teyUgZW5kaWYgJX0K"
  41. templates["client-call-serverstreaming.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoU2VydmVyIFN0cmVhbWluZykKe3sgYWNjZXNzIH19IHByb3RvY29sIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAvLy8gQ2FsbCB0aGlzIHRvIHdhaXQgZm9yIGEgcmVzdWx0LiBCbG9ja2luZy4KICBmdW5jIHJlY2VpdmUoKSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fQogIC8vLyBDYWxsIHRoaXMgdG8gd2FpdCBmb3IgYSByZXN1bHQuIE5vbmJsb2NraW5nLgogIGZ1bmMgcmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKSB0aHJvd3MKICAKICAvLy8gQ2FuY2VsIHRoZSBjYWxsLgogIGZ1bmMgY2FuY2VsKCkKfQoKe3sgYWNjZXNzIH19IGV4dGVuc2lvbiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgdmFyIHJldHVybkVycm9yIDoge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/CiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgcmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5SZXNwb25zZSA9IHJlc3BvbnNlCiAgICAgICAgcmV0dXJuRXJyb3IgPSBlcnJvcgogICAgICAgIHNlbS5zaWduYWwoKQogICAgICB9CiAgICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIH0KICAgIGlmIGxldCByZXR1cm5FcnJvciA9IHJldHVybkVycm9yIHsKICAgICAgdGhyb3cgcmV0dXJuRXJyb3IKICAgIH0KICAgIHJldHVybiByZXR1cm5SZXNwb25zZQogIH0KfQoKZmlsZXByaXZhdGUgZmluYWwgY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX1JbXBsOiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgcHJpdmF0ZSB2YXIgY2FsbCA6IENhbGwKCiAgLy8vIENyZWF0ZSBhIGNhbGwuCiAgaW5pdChfIGNoYW5uZWw6IENoYW5uZWwpIHsKICAgIHNlbGYuY2FsbCA9IGNoYW5uZWwubWFrZUNhbGwoInt7IC58cGF0aDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IikKICB9CgogIC8vLyBDYWxsIHRoaXMgb25jZSB3aXRoIHRoZSBtZXNzYWdlIHRvIHNlbmQuIE5vbmJsb2NraW5nLgogIGZ1bmMgc3RhcnQocmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19LAogICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IE1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KSAtPiAoKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIGxldCByZXF1ZXN0RGF0YSA9IHRyeSByZXF1ZXN0LnNlcmlhbGl6ZWREYXRhKCkKICAgICAgdHJ5IGNhbGwuc3RhcnQoLnNlcnZlclN0cmVhbWluZywKICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6cmVxdWVzdERhdGEsCiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246Y29tcGxldGlvbikKICAgICAgcmV0dXJuIHNlbGYKICB9CgogIGZ1bmMgcmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKSB0aHJvd3MgewogICAgZG8gewogICAgICB0cnkgY2FsbC5yZWNlaXZlTWVzc2FnZSgpIHsocmVzcG9uc2VEYXRhKSBpbgogICAgICAgIGlmIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEgewogICAgICAgICAgaWYgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgICBjb21wbGV0aW9uKHJlc3BvbnNlLCBuaWwpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmVuZE9mU3RyZWFtKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICBmdW5jIGNhbmNlbCgpIHsKICAgIGNhbGwuY2FuY2VsKCkKICB9Cn0KCi8vLXslIGlmIGdlbmVyYXRlX21vY2tfY29kZSAlfQovLy8gU2ltcGxlIGZha2UgaW1wbGVtZW50YXRpb24gb2Yge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gdGhhdCByZXR1cm5zIGEgcHJldmlvdXNseS1kZWZpbmVkIHNldCBvZiByZXN1bHRzLgpjbGFzcyB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fVN0dWI6IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICB2YXIgb3V0cHV0czogW3t7IG1ldGhvZHxvdXRwdXQgfX1dID0gW10KICAKICBmdW5jIHJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzIHsKICAgIGlmIGxldCBvdXRwdXQgPSBvdXRwdXRzLmZpcnN0IHsKICAgICAgb3V0cHV0cy5yZW1vdmVGaXJzdCgpCiAgICAgIGNvbXBsZXRpb24ob3V0cHV0LCBuaWwpCiAgICB9IGVsc2UgewogICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZW5kT2ZTdHJlYW0pCiAgICB9CiAgfQoKICBmdW5jIGNhbmNlbCgpIHsgfQp9Ci8vLXslIGVuZGlmICV9Cg=="
  42. templates["client-call-unary.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoVW5hcnkpCnt7IGFjY2VzcyB9fSBwcm90b2NvbCB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICBmdW5jIGNhbmNlbCgpCn0KCi8vLyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWUgfX0gKFVuYXJ5KQpmaWxlcHJpdmF0ZSBmaW5hbCBjbGFzcyB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fUltcGw6IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIFJ1biB0aGUgY2FsbC4gQmxvY2tzIHVudGlsIHRoZSByZXBseSBpcyByZWNlaXZlZC4KICAvLy8gLSBUaHJvd3M6IGBCaW5hcnlFbmNvZGluZ0Vycm9yYCBpZiBlbmNvZGluZyBmYWlscy4gYENhbGxFcnJvcmAgaWYgZmFpbHMgdG8gY2FsbC4gYHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19YCBpZiByZWNlaXZlcyBubyByZXNwb25zZS4KICBmdW5jIHJ1bihyZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IE1ldGFkYXRhKSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB2YXIgcmV0dXJuQ2FsbFJlc3VsdCA6IENhbGxSZXN1bHQhCiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19PwogICAgXyA9IHRyeSBzdGFydChyZXF1ZXN0OnJlcXVlc3QsIG1ldGFkYXRhOm1ldGFkYXRhKSB7cmVzcG9uc2UsIGNhbGxSZXN1bHQgaW4KICAgICAgcmV0dXJuUmVzcG9uc2UgPSByZXNwb25zZQogICAgICByZXR1cm5DYWxsUmVzdWx0ID0gY2FsbFJlc3VsdAogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIGlmIGxldCByZXR1cm5SZXNwb25zZSA9IHJldHVyblJlc3BvbnNlIHsKICAgICAgcmV0dXJuIHJldHVyblJlc3BvbnNlCiAgICB9IGVsc2UgewogICAgICB0aHJvdyB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5lcnJvcihjOiByZXR1cm5DYWxsUmVzdWx0KQogICAgfQogIH0KCiAgLy8vIFN0YXJ0IHRoZSBjYWxsLiBOb25ibG9ja2luZy4KICAvLy8gLSBUaHJvd3M6IGBCaW5hcnlFbmNvZGluZ0Vycm9yYCBpZiBlbmNvZGluZyBmYWlscy4gYENhbGxFcnJvcmAgaWYgZmFpbHMgdG8gY2FsbC4KICBmdW5jIHN0YXJ0KHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CgogICAgICBsZXQgcmVxdWVzdERhdGEgPSB0cnkgcmVxdWVzdC5zZXJpYWxpemVkRGF0YSgpCiAgICAgIHRyeSBjYWxsLnN0YXJ0KC51bmFyeSwKICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6cmVxdWVzdERhdGEpCiAgICAgIHsoY2FsbFJlc3VsdCkgaW4KICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gY2FsbFJlc3VsdC5yZXN1bHREYXRhLAogICAgICAgICAgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgY29tcGxldGlvbihyZXNwb25zZSwgY2FsbFJlc3VsdCkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIGNhbGxSZXN1bHQpCiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZWxmCiAgfQoKICBmdW5jIGNhbmNlbCgpIHsKICAgIGNhbGwuY2FuY2VsKCkKICB9Cn0K"
  43. templates["client.swift"] = "Ly8teyUgZm9yIHNlcnZpY2UgaW4gZmlsZS5zZXJ2aWNlcyAlfQoKLy8vIFR5cGUgZm9yIGVycm9ycyB0aHJvd24gZnJvbSBnZW5lcmF0ZWQgY2xpZW50IGNvZGUuCnt7IGFjY2VzcyB9fSBlbnVtIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19IDogRXJyb3IgewogIGNhc2UgZW5kT2ZTdHJlYW0KICBjYXNlIGludmFsaWRNZXNzYWdlUmVjZWl2ZWQKICBjYXNlIGVycm9yKGM6IENhbGxSZXN1bHQpCn0KCi8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2RzICV9Ci8vLXslIGlmIG1ldGhvZHxtZXRob2RJc1VuYXJ5ICV9Ci8vLXslIGluY2x1ZGUgImNsaWVudC1jYWxsLXVuYXJ5LnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNTZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAiY2xpZW50LWNhbGwtc2VydmVyc3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNDbGllbnRTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAiY2xpZW50LWNhbGwtY2xpZW50c3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNCaWRpU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgImNsaWVudC1jYWxsLWJpZGlzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGVuZGZvciAlfQoKLy8vIEluc3RhbnRpYXRlIHt7IC58c2VydmljZWNsYXNzOmZpbGUsc2VydmljZSB9fUltcGwsIHRoZW4gY2FsbCBtZXRob2RzIG9mIHRoaXMgcHJvdG9jb2wgdG8gbWFrZSBBUEkgY2FsbHMuCnt7IGFjY2VzcyB9fSBwcm90b2NvbCB7eyAufHNlcnZpY2VjbGFzczpmaWxlLHNlcnZpY2UgfX0gewogIHZhciBjaGFubmVsOiBDaGFubmVsIHsgZ2V0IH0KCiAgLy8vIFRoaXMgbWV0YWRhdGEgd2lsbCBiZSBzZW50IHdpdGggYWxsIHJlcXVlc3RzLgogIHZhciBtZXRhZGF0YTogTWV0YWRhdGEgeyBnZXQgfQoKICAvLy8gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIHNlcnZpY2UgaG9zdCBuYW1lIHRvIGJlIG92ZXJyaWRkZW4uCiAgLy8vIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCB0byBtYWtlIGNhbGxzIHRvICJsb2NhbGhvc3Q6ODA4MCIKICAvLy8gYXBwZWFyIHRvIGJlIHRvICJleGFtcGxlLmNvbSIuCiAgdmFyIGhvc3QgOiBTdHJpbmcgeyBnZXQgfQoKICAvLy8gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIHNlcnZpY2UgdGltZW91dCB0byBiZSBvdmVycmlkZGVuLgogIHZhciB0aW1lb3V0IDogVGltZUludGVydmFsIHsgZ2V0IH0KICAKICAvLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kcyAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc1VuYXJ5ICV9CiAgLy8vIFN5bmNocm9ub3VzLiBVbmFyeS4KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oXyByZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0pIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19CiAgLy8vIEFzeW5jaHJvbm91cy4gVW5hcnkuCiAgZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KF8gcmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19LAogICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCBDYWxsUmVzdWx0KS0+KCkpIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzU2VydmVyU3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gU2VydmVyLXN0cmVhbWluZy4KICAvLy8gU2VuZCB0aGUgaW5pdGlhbCBtZXNzYWdlLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIGdldCBzdHJlYW1lZCByZXNwb25zZXMuCiAgZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KF8gcmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19LCBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQ2xpZW50U3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gQ2xpZW50LXN0cmVhbWluZy4KICAvLy8gVXNlIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCB0byBzdHJlYW0gbWVzc2FnZXMgYW5kCiAgLy8vIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCB3YWl0IGZvciBhIGZpbmFsIHJlc3BvbnNlLgogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQmlkaVN0cmVhbWluZyAlfQogIC8vLyBBc3luY2hyb25vdXMuIEJpZGlyZWN0aW9uYWwtc3RyZWFtaW5nLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIHN0cmVhbSBtZXNzYWdlcywKICAvLy8gdG8gd2FpdCBmb3IgcmVwbGllcywgYW5kIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fQogIC8vLXslIGVuZGlmICV9CgogIC8vLXslIGVuZGZvciAlfQp9Cgp7eyBhY2Nlc3MgfX0gZmluYWwgY2xhc3Mge3sgLnxzZXJ2aWNlY2xhc3M6ZmlsZSxzZXJ2aWNlIH19SW1wbDoge3sgLnxzZXJ2aWNlY2xhc3M6ZmlsZSxzZXJ2aWNlIH19IHsKICB7eyBhY2Nlc3MgfX0gcHJpdmF0ZShzZXQpIHZhciBjaGFubmVsOiBDaGFubmVsCgogIHt7IGFjY2VzcyB9fSB2YXIgbWV0YWRhdGEgOiBNZXRhZGF0YQoKICB7eyBhY2Nlc3MgfX0gdmFyIGhvc3QgOiBTdHJpbmcgewogICAgZ2V0IHsKICAgICAgcmV0dXJuIHNlbGYuY2hhbm5lbC5ob3N0CiAgICB9CiAgICBzZXQgewogICAgICBzZWxmLmNoYW5uZWwuaG9zdCA9IG5ld1ZhbHVlCiAgICB9CiAgfQoKICB7eyBhY2Nlc3MgfX0gdmFyIHRpbWVvdXQgOiBUaW1lSW50ZXJ2YWwgewogICAgZ2V0IHsKICAgICAgcmV0dXJuIHNlbGYuY2hhbm5lbC50aW1lb3V0CiAgICB9CiAgICBzZXQgewogICAgICBzZWxmLmNoYW5uZWwudGltZW91dCA9IG5ld1ZhbHVlCiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlIGEgY2xpZW50LgogIHt7IGFjY2VzcyB9fSBpbml0KGFkZHJlc3M6IFN0cmluZywgc2VjdXJlOiBCb29sID0gdHJ1ZSkgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIGNoYW5uZWwgPSBDaGFubmVsKGFkZHJlc3M6YWRkcmVzcywgc2VjdXJlOnNlY3VyZSkKICAgIG1ldGFkYXRhID0gTWV0YWRhdGEoKQogIH0KCiAgLy8vIENyZWF0ZSBhIGNsaWVudCB0aGF0IG1ha2VzIHNlY3VyZSBjb25uZWN0aW9ucyB3aXRoIGEgY3VzdG9tIGNlcnRpZmljYXRlIGFuZCAob3B0aW9uYWwpIGhvc3RuYW1lLgogIHt7IGFjY2VzcyB9fSBpbml0KGFkZHJlc3M6IFN0cmluZywgY2VydGlmaWNhdGVzOiBTdHJpbmcsIGhvc3Q6IFN0cmluZz8pIHsKICAgIGdSUEMuaW5pdGlhbGl6ZSgpCiAgICBjaGFubmVsID0gQ2hhbm5lbChhZGRyZXNzOmFkZHJlc3MsIGNlcnRpZmljYXRlczpjZXJ0aWZpY2F0ZXMsIGhvc3Q6aG9zdCkKICAgIG1ldGFkYXRhID0gTWV0YWRhdGEoKQogIH0KCiAgLy8teyUgZm9yIG1ldGhvZCBpbiBzZXJ2aWNlLm1ldGhvZHMgJX0KICAvLy17JSBpZiBtZXRob2R8bWV0aG9kSXNVbmFyeSAlfQogIC8vLyBTeW5jaHJvbm91cy4gVW5hcnkuCiAge3sgYWNjZXNzIH19IGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSkKICAgIHRocm93cwogICAgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX1JbXBsKGNoYW5uZWwpLnJ1bihyZXF1ZXN0OnJlcXVlc3QsIG1ldGFkYXRhOm1ldGFkYXRhKQogIH0KICAvLy8gQXN5bmNocm9ub3VzLiBVbmFyeS4KICB7eyBhY2Nlc3MgfX0gZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KF8gcmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19LAogICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCBDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fUltcGwoY2hhbm5lbCkuc3RhcnQocmVxdWVzdDpyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzU2VydmVyU3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gU2VydmVyLXN0cmVhbWluZy4KICAvLy8gU2VuZCB0aGUgaW5pdGlhbCBtZXNzYWdlLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIGdldCBzdHJlYW1lZCByZXNwb25zZXMuCiAge3sgYWNjZXNzIH19IGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwgY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fUltcGwoY2hhbm5lbCkuc3RhcnQocmVxdWVzdDpyZXF1ZXN0LCBtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0NsaWVudFN0cmVhbWluZyAlfQogIC8vLyBBc3luY2hyb25vdXMuIENsaWVudC1zdHJlYW1pbmcuCiAgLy8vIFVzZSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBvYmplY3QgdG8gc3RyZWFtIG1lc3NhZ2VzIGFuZAogIC8vLyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgd2FpdCBmb3IgYSBmaW5hbCByZXNwb25zZS4KICB7eyBhY2Nlc3MgfX0gZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KGNvbXBsZXRpb246IEBlc2NhcGluZyAoQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzCiAgICAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX1JbXBsKGNoYW5uZWwpLnN0YXJ0KG1ldGFkYXRhOm1ldGFkYXRhLCBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQmlkaVN0cmVhbWluZyAlfQogIC8vLyBBc3luY2hyb25vdXMuIEJpZGlyZWN0aW9uYWwtc3RyZWFtaW5nLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIHN0cmVhbSBtZXNzYWdlcywKICAvLy8gdG8gd2FpdCBmb3IgcmVwbGllcywgYW5kIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogIHt7IGFjY2VzcyB9fSBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fUltcGwoY2hhbm5lbCkuc3RhcnQobWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICB9CiAgLy8teyUgZW5kaWYgJX0KCiAgLy8teyUgZW5kZm9yICV9Cn0KCi8vLXslIGlmIGdlbmVyYXRlX21vY2tfY29kZSAlfQovLy8gU2ltcGxlIGZha2UgaW1wbGVtZW50YXRpb24gb2Yge3sgLnxzZXJ2aWNlY2xhc3M6ZmlsZSxzZXJ2aWNlIH19IHRoYXQgcmV0dXJucyBhIHByZXZpb3VzbHktZGVmaW5lZCBzZXQgb2YgcmVzdWx0cwovLy8gYW5kIHN0b3JlcyByZXF1ZXN0IHZhbHVlcyBwYXNzZWQgaW50byBpdCBmb3IgbGF0ZXIgdmVyaWZpY2F0aW9uLgovLy8gTm90ZTogY29tcGxldGlvbiBibG9ja3MgYXJlIE5PVCBjYWxsZWQgd2l0aCB0aGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCBhc3luY2hyb25vdXMgdW5hcnkgY2FsbHMgYXJlIE5PVCBpbXBsZW1lbnRlZCEKY2xhc3Mge3sgLnxzZXJ2aWNlY2xhc3M6ZmlsZSxzZXJ2aWNlIH19U3R1Yjoge3sgLnxzZXJ2aWNlY2xhc3M6ZmlsZSxzZXJ2aWNlIH19IHsKICB2YXIgY2hhbm5lbDogQ2hhbm5lbCB7IGZhdGFsRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCIpIH0KICB2YXIgbWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgdmFyIGhvc3QgPSAiIgogIHZhciB0aW1lb3V0OiBUaW1lSW50ZXJ2YWwgPSAwCiAgCiAgLy8teyUgZm9yIG1ldGhvZCBpbiBzZXJ2aWNlLm1ldGhvZHMgJX0KICAvLy17JSBpZiBtZXRob2R8bWV0aG9kSXNVbmFyeSAlfQogIHZhciB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19UmVxdWVzdHM6IFt7eyBtZXRob2R8aW5wdXQgfX1dID0gW10KICB2YXIge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fVJlc3BvbnNlczogW3t7IG1ldGhvZHxvdXRwdXQgfX1dID0gW10KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oXyByZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0pIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX1SZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCkKICAgIGRlZmVyIHsge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fVJlc3BvbnNlcy5yZW1vdmVGaXJzdCgpIH0KICAgIHJldHVybiB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19UmVzcG9uc2VzLmZpcnN0IQogIH0KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oXyByZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIENhbGxSZXN1bHQpLT4oKSkgdGhyb3dzIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgIGZhdGFsRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCIpCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzU2VydmVyU3RyZWFtaW5nICV9CiAgdmFyIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX1SZXF1ZXN0czogW3t7IG1ldGhvZHxpbnB1dCB9fV0gPSBbXQogIHZhciB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19Q2FsbHM6IFt7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fV0gPSBbXQogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwgY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19UmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpCiAgICAgIGRlZmVyIHsge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fUNhbGxzLnJlbW92ZUZpcnN0KCkgfQogICAgICByZXR1cm4ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fUNhbGxzLmZpcnN0IQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0NsaWVudFN0cmVhbWluZyAlfQogIHZhciB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19Q2FsbHM6IFt7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fV0gPSBbXQogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIGRlZmVyIHsge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fUNhbGxzLnJlbW92ZUZpcnN0KCkgfQogICAgICByZXR1cm4ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fUNhbGxzLmZpcnN0IQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0JpZGlTdHJlYW1pbmcgJX0KICB2YXIge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fUNhbGxzOiBbe3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX1dID0gW10KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICBkZWZlciB7IHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX1DYWxscy5yZW1vdmVGaXJzdCgpIH0KICAgICAgcmV0dXJuIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX1DYWxscy5maXJzdCEKICB9CiAgLy8teyUgZW5kaWYgJX0KCiAgLy8teyUgZW5kZm9yICV9Cn0KLy8teyUgZW5kaWYgJX0KCi8vLXslIGVuZGZvciAlfQo="
  44. templates["main.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGV8ZmlsZURlc2NyaXB0b3JOYW1lIH19CiAqCiAqLwoKLyoKICogQ29weXJpZ2h0IDIwMTgsIGdSUEMgQXV0aG9ycyBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IEZvdW5kYXRpb24KaW1wb3J0IERpc3BhdGNoCmltcG9ydCBnUlBDCmltcG9ydCBTd2lmdFByb3RvYnVmCi8vLXslIGlmIGNsaWVudCAlfQovLy17JSBpbmNsdWRlICJjbGllbnQuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIHNlcnZlciAlfQovLy17JSBpbmNsdWRlICJzZXJ2ZXIuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Cg=="
  45. templates["server-session-bidistreaming.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChCaWRpcmVjdGlvbmFsIFN0cmVhbWluZykKe3sgYWNjZXNzIH19IHByb3RvY29sIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IDoge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb24gewogIC8vLyBSZWNlaXZlIGEgbWVzc2FnZS4gQmxvY2tzIHVudGlsIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBvciB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KICBmdW5jIHJlY2VpdmUoKSB0aHJvd3MgLT4ge3sgbWV0aG9kfGlucHV0IH19CgogIC8vLyBTZW5kIGEgbWVzc2FnZS4gTm9uYmxvY2tpbmcuCiAgZnVuYyBzZW5kKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0sIGNvbXBsZXRpb246IEBlc2NhcGluZyAoKS0+KCkpIHRocm93cwogIAogIC8vLyBDbG9zZSBhIGNvbm5lY3Rpb24uIEJsb2NrcyB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCiAgZnVuYyBjbG9zZSgpIHRocm93cwp9CgpmaWxlcHJpdmF0ZSBmaW5hbCBjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fUltcGwgOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbkltcGwsIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBwcm92aWRlciA6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19CgogIC8vLyBDcmVhdGUgYSBzZXNzaW9uLgogIGluaXQoaGFuZGxlcjpnUlBDLkhhbmRsZXIsIHByb3ZpZGVyOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBzdXBlci5pbml0KGhhbmRsZXI6aGFuZGxlcikKICB9CgogIGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8aW5wdXQgfX0gewogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgdmFyIHJlcXVlc3RNZXNzYWdlIDoge3sgbWV0aG9kfGlucHV0IH19PwogICAgdHJ5IHNlbGYuaGFuZGxlci5yZWNlaXZlTWVzc2FnZSgpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICBkbyB7CiAgICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgICBwcmludCgiZXJyb3IgXChlcnJvcikiKQogICAgICAgIH0KICAgICAgfQogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIGlmIGxldCByZXF1ZXN0TWVzc2FnZSA9IHJlcXVlc3RNZXNzYWdlIHsKICAgICAgcmV0dXJuIHJlcXVlc3RNZXNzYWdlCiAgICB9IGVsc2UgewogICAgICB0aHJvdyB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbQogICAgfQogIH0KCiAgZnVuYyBzZW5kKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0sIGNvbXBsZXRpb246IEBlc2NhcGluZyAoKS0+KCkpIHRocm93cyB7CiAgICB0cnkgaGFuZGxlci5zZW5kUmVzcG9uc2UobWVzc2FnZTpyZXNwb25zZS5zZXJpYWxpemVkRGF0YSgpKSB7Y29tcGxldGlvbigpfQogIH0KCiAgZnVuYyBjbG9zZSgpIHRocm93cyB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRTdGF0dXMoc3RhdHVzQ29kZTpzZWxmLnN0YXR1c0NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogIH0KCiAgLy8vIFJ1biB0aGUgc2Vzc2lvbi4gSW50ZXJuYWwuCiAgZnVuYyBydW4ocXVldWU6RGlzcGF0Y2hRdWV1ZSkgdGhyb3dzIHsKICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZE1ldGFkYXRhKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsKICAgICAgcXVldWUuYXN5bmMgewogICAgICAgIGRvIHsKICAgICAgICAgIHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oc2Vzc2lvbjpzZWxmKQogICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgcHJpbnQoImVycm9yIFwoZXJyb3IpIikKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLXslIGlmIGdlbmVyYXRlX21vY2tfY29kZSAlfQovLy8gU2ltcGxlIGZha2UgaW1wbGVtZW50YXRpb24gb2Yge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gdGhhdCByZXR1cm5zIGEgcHJldmlvdXNseS1kZWZpbmVkIHNldCBvZiByZXN1bHRzCi8vLyBhbmQgc3RvcmVzIHNlbnQgdmFsdWVzIGZvciBsYXRlciB2ZXJpZmljYXRpb24uCmNsYXNzIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19U3R1YiA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uU3R1Yiwge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHZhciBpbnB1dHM6IFt7eyBtZXRob2R8aW5wdXQgfX1dID0gW10KICB2YXIgb3V0cHV0czogW3t7IG1ldGhvZHxvdXRwdXQgfX1dID0gW10KCiAgZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxpbnB1dCB9fSB7CiAgICBpZiBsZXQgaW5wdXQgPSBpbnB1dHMuZmlyc3QgewogICAgICBpbnB1dHMucmVtb3ZlRmlyc3QoKQogICAgICByZXR1cm4gaW5wdXQKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmVuZE9mU3RyZWFtCiAgICB9CiAgfQoKICBmdW5jIHNlbmQoXyByZXNwb25zZToge3sgbWV0aG9kfG91dHB1dCB9fSwgY29tcGxldGlvbjogQGVzY2FwaW5nICgpLT4oKSkgdGhyb3dzIHsKICAgIG91dHB1dHMuYXBwZW5kKHJlc3BvbnNlKQogIH0KCiAgZnVuYyBjbG9zZSgpIHRocm93cyB7IH0KfQovLy17JSBlbmRpZiAlfQo="
  46. templates["server-session-clientstreaming.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChDbGllbnQgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gcHJvdG9jb2wge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgLy8vIFJlY2VpdmUgYSBtZXNzYWdlLiBCbG9ja3MgdW50aWwgYSBtZXNzYWdlIGlzIHJlY2VpdmVkIG9yIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgogIGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8aW5wdXQgfX0KCiAgLy8vIFNlbmQgYSByZXNwb25zZSBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCiAgZnVuYyBzZW5kQW5kQ2xvc2UoXyByZXNwb25zZToge3sgbWV0aG9kfG91dHB1dCB9fSkgdGhyb3dzCn0KCmZpbGVwcml2YXRlIGZpbmFsIGNsYXNzIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19SW1wbCA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uSW1wbCwge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHByaXZhdGUgdmFyIHByb3ZpZGVyIDoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0KCiAgLy8vIENyZWF0ZSBhIHNlc3Npb24uCiAgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlciwgcHJvdmlkZXI6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBzZWxmLnByb3ZpZGVyID0gcHJvdmlkZXIKICAgIHN1cGVyLmluaXQoaGFuZGxlcjpoYW5kbGVyKQogIH0KCiAgZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxpbnB1dCB9fSB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB2YXIgcmVxdWVzdE1lc3NhZ2UgOiB7eyBtZXRob2R8aW5wdXQgfX0/CiAgICB0cnkgc2VsZi5oYW5kbGVyLnJlY2VpdmVNZXNzYWdlKCkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIHJlcXVlc3RNZXNzYWdlID0gdHJ5PyB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgIH0KICAgICAgc2VtLnNpZ25hbCgpCiAgICB9CiAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICBpZiByZXF1ZXN0TWVzc2FnZSA9PSBuaWwgewogICAgICB0aHJvdyB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbQogICAgfQogICAgcmV0dXJuIHJlcXVlc3RNZXNzYWdlIQogIH0KCiAgZnVuYyBzZW5kQW5kQ2xvc2UoXyByZXNwb25zZToge3sgbWV0aG9kfG91dHB1dCB9fSkgdGhyb3dzIHsKICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZFJlc3BvbnNlKG1lc3NhZ2U6cmVzcG9uc2Uuc2VyaWFsaXplZERhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6c2VsZi5zdGF0dXNDb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ01ldGFkYXRhOnNlbGYudHJhaWxpbmdNZXRhZGF0YSkKICB9CgogIC8vLyBSdW4gdGhlIHNlc3Npb24uIEludGVybmFsLgogIGZ1bmMgcnVuKHF1ZXVlOkRpc3BhdGNoUXVldWUpIHRocm93cyB7CiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRNZXRhZGF0YShpbml0aWFsTWV0YWRhdGE6aW5pdGlhbE1ldGFkYXRhKSB7CiAgICAgIHF1ZXVlLmFzeW5jIHsKICAgICAgICBkbyB7CiAgICAgICAgICB0cnkgc2VsZi5wcm92aWRlci57eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KHNlc3Npb246c2VsZikKICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgIHByaW50KCJlcnJvciBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgovLy17JSBpZiBnZW5lcmF0ZV9tb2NrX2NvZGUgJX0KLy8vIFNpbXBsZSBmYWtlIGltcGxlbWVudGF0aW9uIG9mIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHRoYXQgcmV0dXJucyBhIHByZXZpb3VzbHktZGVmaW5lZCBzZXQgb2YgcmVzdWx0cwovLy8gYW5kIHN0b3JlcyBzZW50IHZhbHVlcyBmb3IgbGF0ZXIgdmVyaWZpY2F0aW9uLgpjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fVN0dWI6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uU3R1Yiwge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHZhciBpbnB1dHM6IFt7eyBtZXRob2R8aW5wdXQgfX1dID0gW10KICB2YXIgb3V0cHV0OiB7eyBtZXRob2R8b3V0cHV0IH19PwoKICBmdW5jIHJlY2VpdmUoKSB0aHJvd3MgLT4ge3sgbWV0aG9kfGlucHV0IH19IHsKICAgIGlmIGxldCBpbnB1dCA9IGlucHV0cy5maXJzdCB7CiAgICAgIGlucHV0cy5yZW1vdmVGaXJzdCgpCiAgICAgIHJldHVybiBpbnB1dAogICAgfSBlbHNlIHsKICAgICAgdGhyb3cge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZW5kT2ZTdHJlYW0KICAgIH0KICB9CgogIGZ1bmMgc2VuZEFuZENsb3NlKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0pIHRocm93cyB7CiAgICBvdXRwdXQgPSByZXNwb25zZQogIH0KCiAgZnVuYyBjbG9zZSgpIHRocm93cyB7IH0KfQovLy17JSBlbmRpZiAlfQo="
  47. templates["server-session-serverstreaming.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChTZXJ2ZXIgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gcHJvdG9jb2wge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgLy8vIFNlbmQgYSBtZXNzYWdlLiBOb25ibG9ja2luZy4KICBmdW5jIHNlbmQoXyByZXNwb25zZToge3sgbWV0aG9kfG91dHB1dCB9fSwgY29tcGxldGlvbjogQGVzY2FwaW5nICgpLT4oKSkgdGhyb3dzCn0KCmZpbGVwcml2YXRlIGZpbmFsIGNsYXNzIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19SW1wbCA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uSW1wbCwge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHByaXZhdGUgdmFyIHByb3ZpZGVyIDoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0KCiAgLy8vIENyZWF0ZSBhIHNlc3Npb24uCiAgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlciwgcHJvdmlkZXI6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBzZWxmLnByb3ZpZGVyID0gcHJvdmlkZXIKICAgIHN1cGVyLmluaXQoaGFuZGxlcjpoYW5kbGVyKQogIH0KCiAgZnVuYyBzZW5kKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0sIGNvbXBsZXRpb246IEBlc2NhcGluZyAoKS0+KCkpIHRocm93cyB7CiAgICB0cnkgaGFuZGxlci5zZW5kUmVzcG9uc2UobWVzc2FnZTpyZXNwb25zZS5zZXJpYWxpemVkRGF0YSgpKSB7Y29tcGxldGlvbigpfQogIH0KCiAgLy8vIFJ1biB0aGUgc2Vzc2lvbi4gSW50ZXJuYWwuCiAgZnVuYyBydW4ocXVldWU6RGlzcGF0Y2hRdWV1ZSkgdGhyb3dzIHsKICAgIHRyeSBzZWxmLmhhbmRsZXIucmVjZWl2ZU1lc3NhZ2UoaW5pdGlhbE1ldGFkYXRhOmluaXRpYWxNZXRhZGF0YSkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIGRvIHsKICAgICAgICAgIGxldCByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgICAvLyB0byBrZWVwIHByb3ZpZGVycyBmcm9tIGJsb2NraW5nIHRoZSBzZXJ2ZXIgdGhyZWFkLAogICAgICAgICAgLy8gd2UgZGlzcGF0Y2ggdGhlbSB0byBhbm90aGVyIHF1ZXVlLgogICAgICAgICAgcXVldWUuYXN5bmMgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgdHJ5IHNlbGYucHJvdmlkZXIue3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0OnJlcXVlc3RNZXNzYWdlLCBzZXNzaW9uOiBzZWxmKQogICAgICAgICAgICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZFN0YXR1cyhzdGF0dXNDb2RlOnNlbGYuc3RhdHVzQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nTWV0YWRhdGE6c2VsZi50cmFpbGluZ01ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOnt9KQogICAgICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgICAgICBwcmludCgiZXJyb3I6IFwoZXJyb3IpIikKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgcHJpbnQoImVycm9yOiBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgovLy17JSBpZiBnZW5lcmF0ZV9tb2NrX2NvZGUgJX0KLy8vIFNpbXBsZSBmYWtlIGltcGxlbWVudGF0aW9uIG9mIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHRoYXQgcmV0dXJucyBhIHByZXZpb3VzbHktZGVmaW5lZCBzZXQgb2YgcmVzdWx0cwovLy8gYW5kIHN0b3JlcyBzZW50IHZhbHVlcyBmb3IgbGF0ZXIgdmVyaWZpY2F0aW9uLgpjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fVN0dWIgOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvblN0dWIsIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICB2YXIgb3V0cHV0czogW3t7IG1ldGhvZHxvdXRwdXQgfX1dID0gW10KCiAgZnVuYyBzZW5kKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0sIGNvbXBsZXRpb246IEBlc2NhcGluZyAoKS0+KCkpIHRocm93cyB7CiAgICBvdXRwdXRzLmFwcGVuZChyZXNwb25zZSkKICB9CgogIGZ1bmMgY2xvc2UoKSB0aHJvd3MgeyB9Cn0KLy8teyUgZW5kaWYgJX0K"
  48. templates["server-session-unary.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChVbmFyeSBTdHJlYW1pbmcpCnt7IGFjY2VzcyB9fSBwcm90b2NvbCB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uIHsgfQoKZmlsZXByaXZhdGUgZmluYWwgY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX1JbXBsIDoge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb25JbXBsLCB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gUnVuIHRoZSBzZXNzaW9uLiBJbnRlcm5hbC4KICBmdW5jIHJ1bihxdWV1ZTpEaXNwYXRjaFF1ZXVlKSB0aHJvd3MgewogICAgdHJ5IGhhbmRsZXIucmVjZWl2ZU1lc3NhZ2UoaW5pdGlhbE1ldGFkYXRhOmluaXRpYWxNZXRhZGF0YSkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIGxldCByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgbGV0IHJlcGx5TWVzc2FnZSA9IHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0ocmVxdWVzdDpyZXF1ZXN0TWVzc2FnZSwgc2Vzc2lvbjogc2VsZikKICAgICAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRSZXNwb25zZShtZXNzYWdlOnJlcGx5TWVzc2FnZS5zZXJpYWxpemVkRGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6c2VsZi5zdGF0dXNDb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6c2VsZi5zdGF0dXNNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nTWV0YWRhdGE6c2VsZi50cmFpbGluZ01ldGFkYXRhKQogICAgICB9CiAgICB9CiAgfQp9CgovLy17JSBpZiBnZW5lcmF0ZV9tb2NrX2NvZGUgJX0KLy8vIFRyaXZpYWwgZmFrZSBpbXBsZW1lbnRhdGlvbiBvZiB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fS4KY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX1TdHViIDoge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb25TdHViLCB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7IH0KLy8teyUgZW5kaWYgJX0K"
  49. templates["server.swift"] = "Ly8teyUgZm9yIHNlcnZpY2UgaW4gZmlsZS5zZXJ2aWNlcyAlfQoKLy8vIFR5cGUgZm9yIGVycm9ycyB0aHJvd24gZnJvbSBnZW5lcmF0ZWQgc2VydmVyIGNvZGUuCnt7IGFjY2VzcyB9fSBlbnVtIHt7IC58c2VydmVyZXJyb3I6ZmlsZSxzZXJ2aWNlIH19IDogRXJyb3IgewogIGNhc2UgZW5kT2ZTdHJlYW0KfQoKLy8vIFRvIGJ1aWxkIGEgc2VydmVyLCBpbXBsZW1lbnQgYSBjbGFzcyB0aGF0IGNvbmZvcm1zIHRvIHRoaXMgcHJvdG9jb2wuCnt7IGFjY2VzcyB9fSBwcm90b2NvbCB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSB7CiAgLy8teyUgZm9yIG1ldGhvZCBpbiBzZXJ2aWNlLm1ldGhvZHMgJX0KICAvLy17JSBpZiBtZXRob2R8bWV0aG9kSXNVbmFyeSAlfQogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0IDoge3sgbWV0aG9kfGlucHV0IH19LCBzZXNzaW9uIDoge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0pIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19CiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBpZiBtZXRob2R8bWV0aG9kSXNTZXJ2ZXJTdHJlYW1pbmcgJX0KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0ocmVxdWVzdCA6IHt7IG1ldGhvZHxpbnB1dCB9fSwgc2Vzc2lvbiA6IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KSB0aHJvd3MKICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0NsaWVudFN0cmVhbWluZyAlfQogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShzZXNzaW9uIDoge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0pIHRocm93cwogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQmlkaVN0cmVhbWluZyAlfQogIGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShzZXNzaW9uIDoge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0pIHRocm93cwogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgZW5kZm9yICV9Cn0KCi8vLyBDb21tb24gcHJvcGVydGllcyBhdmFpbGFibGUgaW4gZWFjaCBzZXJ2aWNlIHNlc3Npb24uCnt7IGFjY2VzcyB9fSBwcm90b2NvbCB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgdmFyIHJlcXVlc3RNZXRhZGF0YSA6IE1ldGFkYXRhIHsgZ2V0IH0KCiAgdmFyIHN0YXR1c0NvZGUgOiBTdGF0dXNDb2RlIHsgZ2V0IH0KICB2YXIgc3RhdHVzTWVzc2FnZSA6IFN0cmluZyB7IGdldCB9CiAgdmFyIGluaXRpYWxNZXRhZGF0YSA6IE1ldGFkYXRhIHsgZ2V0IH0KICB2YXIgdHJhaWxpbmdNZXRhZGF0YSA6IE1ldGFkYXRhIHsgZ2V0IH0KfQoKZmlsZXByaXZhdGUgY2xhc3Mge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb25JbXBsOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgdmFyIGhhbmRsZXIgOiBnUlBDLkhhbmRsZXIKICB2YXIgcmVxdWVzdE1ldGFkYXRhIDogTWV0YWRhdGEgeyByZXR1cm4gaGFuZGxlci5yZXF1ZXN0TWV0YWRhdGEgfQoKICB2YXIgc3RhdHVzQ29kZSA6IFN0YXR1c0NvZGUgPSAub2sKICB2YXIgc3RhdHVzTWVzc2FnZSA6IFN0cmluZyA9ICJPSyIKICB2YXIgaW5pdGlhbE1ldGFkYXRhIDogTWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgdmFyIHRyYWlsaW5nTWV0YWRhdGEgOiBNZXRhZGF0YSA9IE1ldGFkYXRhKCkKCiAgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlcikgewogICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgogIH0KfQoKLy8teyUgaWYgZ2VuZXJhdGVfbW9ja19jb2RlICV9CmNsYXNzIHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uU3R1Yjoge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb24gewogIHZhciByZXF1ZXN0TWV0YWRhdGEgPSBNZXRhZGF0YSgpCgogIHZhciBzdGF0dXNDb2RlID0gU3RhdHVzQ29kZS5vawogIHZhciBzdGF0dXNNZXNzYWdlID0gIk9LIgogIHZhciBpbml0aWFsTWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgdmFyIHRyYWlsaW5nTWV0YWRhdGEgPSBNZXRhZGF0YSgpCn0KLy8teyUgZW5kaWYgJX0KCi8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2RzICV9Ci8vLXslIGlmIG1ldGhvZHxtZXRob2RJc1VuYXJ5ICV9Ci8vLXslIGluY2x1ZGUgInNlcnZlci1zZXNzaW9uLXVuYXJ5LnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNTZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAic2VydmVyLXNlc3Npb24tc2VydmVyc3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNDbGllbnRTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAic2VydmVyLXNlc3Npb24tY2xpZW50c3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNCaWRpU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgInNlcnZlci1zZXNzaW9uLWJpZGlzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGVuZGZvciAlfQoKLy8vIE1haW4gc2VydmVyIGZvciBnZW5lcmF0ZWQgc2VydmljZQp7eyBhY2Nlc3MgfX0gZmluYWwgY2xhc3Mge3sgLnxzZXJ2ZXI6ZmlsZSxzZXJ2aWNlIH19IHsKICBwcml2YXRlIHZhciBhZGRyZXNzOiBTdHJpbmcKICBwcml2YXRlIHZhciBzZXJ2ZXI6IGdSUEMuU2VydmVyCiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXI6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19PwoKICAvLy8gQ3JlYXRlIGEgc2VydmVyIHRoYXQgYWNjZXB0cyBpbnNlY3VyZSBjb25uZWN0aW9ucy4KICB7eyBhY2Nlc3MgfX0gaW5pdChhZGRyZXNzOlN0cmluZywKICAgICAgICAgICAgICBwcm92aWRlcjp7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc2VsZi5zZXJ2ZXIgPSBnUlBDLlNlcnZlcihhZGRyZXNzOmFkZHJlc3MpCiAgfQoKICAvLy8gQ3JlYXRlIGEgc2VydmVyIHRoYXQgYWNjZXB0cyBzZWN1cmUgY29ubmVjdGlvbnMuCiAge3sgYWNjZXNzIH19IGluaXQ/KGFkZHJlc3M6U3RyaW5nLAogICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZVVSTDpVUkwsCiAgICAgICAgICAgICAgIGtleVVSTDpVUkwsCiAgICAgICAgICAgICAgIHByb3ZpZGVyOnt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBnUlBDLmluaXRpYWxpemUoKQogICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcwogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBndWFyZAogICAgICBsZXQgY2VydGlmaWNhdGUgPSB0cnk/IFN0cmluZyhjb250ZW50c09mOiBjZXJ0aWZpY2F0ZVVSTCwgZW5jb2Rpbmc6IC51dGY4KSwKICAgICAgbGV0IGtleSA9IHRyeT8gU3RyaW5nKGNvbnRlbnRzT2Y6IGtleVVSTCwgZW5jb2Rpbmc6IC51dGY4KQogICAgICBlbHNlIHsKICAgICAgICByZXR1cm4gbmlsCiAgICB9CiAgICBzZWxmLnNlcnZlciA9IGdSUEMuU2VydmVyKGFkZHJlc3M6YWRkcmVzcywga2V5OmtleSwgY2VydHM6Y2VydGlmaWNhdGUpCiAgfQoKICAvLy8gU3RhcnQgdGhlIHNlcnZlci4KICB7eyBhY2Nlc3MgfX0gZnVuYyBzdGFydChxdWV1ZTpEaXNwYXRjaFF1ZXVlID0gRGlzcGF0Y2hRdWV1ZS5nbG9iYWwoKSkgewogICAgZ3VhcmQgbGV0IHByb3ZpZGVyID0gc2VsZi5wcm92aWRlciBlbHNlIHsKICAgICAgZmF0YWxFcnJvcigpIC8vIHRoZSBzZXJ2ZXIgcmVxdWlyZXMgYSBwcm92aWRlcgogICAgfQogICAgc2VydmVyLnJ1biB7KGhhbmRsZXIpIGluCiAgICAgIHByaW50KCJTZXJ2ZXIgcmVjZWl2ZWQgcmVxdWVzdCB0byAiICsgaGFuZGxlci5ob3N0CiAgICAgICAgKyAiIGNhbGxpbmcgIiArIGhhbmRsZXIubWV0aG9kCiAgICAgICAgKyAiIGZyb20gIiArIGhhbmRsZXIuY2FsbGVyCiAgICAgICAgKyAiIHdpdGggIiArIFN0cmluZyhkZXNjcmliaW5nOmhhbmRsZXIucmVxdWVzdE1ldGFkYXRhKSApCgogICAgICBkbyB7CiAgICAgICAgc3dpdGNoIGhhbmRsZXIubWV0aG9kIHsKICAgICAgICAvLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kcyAlfQogICAgICAgIGNhc2UgInt7IC58cGF0aDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IjoKICAgICAgICAgIHRyeSB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fUltcGwoaGFuZGxlcjpoYW5kbGVyLCBwcm92aWRlcjpwcm92aWRlcikucnVuKHF1ZXVlOnF1ZXVlKQogICAgICAgIC8vLXslIGVuZGZvciAlfQogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAvLyBoYW5kbGUgdW5rbm93biByZXF1ZXN0cwogICAgICAgICAgdHJ5IGhhbmRsZXIucmVjZWl2ZU1lc3NhZ2UoaW5pdGlhbE1ldGFkYXRhOk1ldGFkYXRhKCkpIHsocmVxdWVzdERhdGEpIGluCiAgICAgICAgICAgIHRyeSBoYW5kbGVyLnNlbmRSZXNwb25zZShzdGF0dXNDb2RlOi51bmltcGxlbWVudGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZToidW5rbm93biBtZXRob2QgIiArIGhhbmRsZXIubWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpNZXRhZGF0YSgpKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgcHJpbnQoIlNlcnZlciBlcnJvcjogXChlcnJvcikiKQogICAgICB9CiAgICB9CiAgfQp9Ci8vLXslIGVuZGZvciAlfQo="
  50. return templates
  51. }