Commit 5b19ba44 authored by guozhipeng's avatar guozhipeng

Initial commit

parents
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: cloud-cap-risk-management
Upstream-Contact: uwe.klinger@sap.com
Source: https://github.com/sap-samples/cloud-cap-risk-management
Disclaimer: The code in this project may include calls to APIs (“API Calls”) of
SAP or third-party products or services developed outside of this project
(“External Products”).
“APIs” means application programming interfaces, as well as their respective
specifications and implementing code that allows software to communicate with
other software.
API Calls to External Products are not licensed under the open source license
that governs this project. The use of such API Calls and related External
Products are subject to applicable additional agreements with the relevant
provider of the External Products. In no event shall the open source license
that governs this project grant any rights in or to any External Products,or
alter, expand or supersede any terms of the applicable additional agreements.
If you have a valid license agreement with SAP for the use of a particular SAP
External Product, then you may make use of any API Calls included in this
project’s code for that SAP External Product, subject to the terms of such
license agreement. If you do not have a valid license agreement for the use of
a particular SAP External Product, then you may only make use of any API Calls
in this project for that SAP External Product for your internal, non-productive
and non-commercial test and evaluation of such API Calls. Nothing herein grants
you any rights to use or access any SAP External Product, or provide any third
parties the right to use of access any SAP External Product, through API Calls.
Files: *
Copyright: 2021 SAP SE or an SAP affiliate company and cloud-cap-risk-management contributors
License: Apache-2.0
Files: docs/assets/sylesheets/* docs/assets/javascripts/worker/* docs/assets/javascripts/bundle* docs/assets/javascripts/vendor*
Copyright: Copyright (c) 2016-2020 Martin Donath <martin.donath@squidfunk.com>
License: MIT
Files: docs/assets/javascripts/lunr/*
Copyright: Copyright (C) 2013 by Oliver Nightingale
License: MIT
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed 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.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed 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.
MIT License Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Welcome
Welcome to this tutorial for application development on SAP Business Technology Platform (SAP BTP). We provide information and examples on how to develop and deploy an application based on [SAP Cloud Application Programming Model (CAP)](https://cap.cloud.sap/) on SAP BTP using different tools and services step by step.
It's planned to provide multiple modules that are built upon each other. You can start the tutorial with the first module, or start in between, because the source code for every tutorial module is provided in this repository.
## Download and Installation
If you want to start from a specific tutorial module, get the name of its branch from the [tutorial](http://sap-samples.github.io/cloud-cap-risk-management), download this repository and switch to the desired branch:
```bash
git clone https://github.com/SAP-samples/cloud-cap-risk-management
cd cloud-cap-risk-management
git checkout <branch>
```
## Known Issues
You can find the known issues [here](https://github.com/SAP-samples/cloud-cap-risk-management/issues).
## How to Obtain Support
Check out the documentation for:
* [CAP aka "capire"](https://cap.cloud.sap/docs/advanced/troubleshooting)
* [SAP BTP](https://help.sap.com/viewer/product/CP/Cloud/)
In case you have a question, find a bug, or otherwise need support to use SAP products, use:
* [CAP Community](https://answers.sap.com/tags/9f13aee1-834c-4105-8e43-ee442775e5ce)
* [SAP Community](https://community.sap.com/)
* [SAP BTP Support Components](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/08d1103928fb42f3a73b3f425e00e13c.html)
If you face a problem with the example application or the description, feel free to create an [issue](https://github.com/SAP-samples/cloud-cap-risk-management/issues).
## Contributing
If you have suggestions on how to improve the tutorial, you are welcome to provide your input [here](https://github.com/SAP-samples/cloud-cap-risk-management/issues).
## License
[![REUSE status](https://api.reuse.software/badge/github.com/SAP-samples/cloud-cap-risk-management)](https://api.reuse.software/info/github.com/SAP-samples/cloud-cap-risk-management)
Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the [LICENSE](LICENSES/Apache-2.0.txt) file.
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/SAP-samples/cloud-cap-risk-management/assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>SAP BTP Application Development</title>
<link rel="stylesheet" href="/SAP-samples/cloud-cap-risk-management/assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="/SAP-samples/cloud-cap-risk-management/assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="/SAP-samples/cloud-cap-risk-management/styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL("/SAP-samples/cloud-cap-risk-management/",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="/SAP-samples/cloud-cap-risk-management/." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="/SAP-samples/cloud-cap-risk-management/markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/SAP-samples/cloud-cap-risk-management/." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="/SAP-samples/cloud-cap-risk-management/markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/SAP-samples/cloud-cap-risk-management/." class="md-nav__link">
Welcome
</a>
</li>
<li class="md-nav__item">
<a href="/SAP-samples/cloud-cap-risk-management/Kyma/" class="md-nav__link">
Run a CAP Application on Kyma
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "/SAP-samples/cloud-cap-risk-management/", "features": [], "search": "/SAP-samples/cloud-cap-risk-management/assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="/SAP-samples/cloud-cap-risk-management/assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://github.com/SAP-samples/cloud-cap-risk-management/CF-Logon/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>CF Logon - SAP BTP Application Development</title>
<link rel="stylesheet" href="../assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
CF Logon
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Welcome
</a>
</li>
<li class="md-nav__item">
<a href="../Kyma/" class="md-nav__link">
Run a CAP Application on Kyma
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management/edit/master/docs/CF-Logon.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
</a>
<h1>CF Logon</h1>
<p>If you don't know whether you are logged on to Cloud Foundry or if you are wondering to which Cloud Foundry org and space are you logged on, you can always use <code>cf target</code> in a command line window to find out. If you aren't logged on already, go to your SAP BTP cockpit by using one of the following links, depending on the landscape you want to deploy to:</p>
<div class="tabbed-set" data-tabs="1:3"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><label for="__tabbed_1_1">Trial</label><div class="tabbed-content">
<p><a href="https://cockpit.hanatrial.ondemand.com/">https://cockpit.hanatrial.ondemand.com/</a></p>
</div>
<input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><label for="__tabbed_1_2">Canary</label><div class="tabbed-content">
<p><a href="https://account.int.sap.eu2.hana.ondemand.com">https://account.int.sap.eu2.hana.ondemand.com</a></p>
</div>
<input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><label for="__tabbed_1_3">Live</label><div class="tabbed-content">
<p><a href="https://account.hana.ondemand.com/">https://account.hana.ondemand.com/</a></p>
</div>
</div>
<div class="admonition info">
<p class="admonition-title">Make sure you've installed the Cloud Foundry CLI (as described in <a href="../Prepare-Dev-Environment-CAP/#install-the-cloud-foundry-command-line-interface">Step 6: Install the Cloud Foundry command line interface</a>) before proceeding with the steps below.</p>
</div>
<ol>
<li>
<p>Enter your <strong>Global Account</strong>. If you are using a trial account, choose <strong>Go To Your Trial Account</strong>.</p>
</li>
<li>
<p>Choose <strong>Account Explorer</strong>.</p>
</li>
<li>
<p>In the <strong>Subaccounts</strong> tab, choose the subaccount to which you want to deploy your service and application.</p>
<p><img alt="Choose Subaccount" src="../markdown/images/choose_subaccount.png" /></p>
</li>
<li>
<p>On the subaccount page, gather all the data to log in to Cloud Foundry (CF).</p>
<ul>
<li><code>API Endpoint</code></li>
<li><code>Org Name</code></li>
<li><code>Space Name</code></li>
</ul>
<p><img alt="CF Data in SAP BTP Cockpit" src="../markdown/images/cfdatacloudcockpit.png" /></p>
</li>
<li>
<p>Open a command line window.</p>
</li>
<li>
<p>Set the Cloud Foundry API endpoint.</p>
<div class="highlight"><pre><span></span><code>cf<span class="w"> </span>api<span class="w"> </span>&lt;API<span class="w"> </span>Endpoint<span class="w"> </span>of<span class="w"> </span>your<span class="w"> </span>landscape&gt;
</code></pre></div>
</li>
<li>
<p>Log in to your Cloud Foundry account, using your SAP BTP credentials.</p>
<div class="highlight"><pre><span></span><code>cf<span class="w"> </span>login
</code></pre></div>
</li>
</ol>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="../assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://github.com/SAP-samples/cloud-cap-risk-management/Kyma/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>Run a CAP Application on Kyma - SAP BTP Application Development</title>
<link rel="stylesheet" href="../assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#run-a-cap-application-on-kyma" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Run a CAP Application on Kyma
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Welcome
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Run a CAP Application on Kyma
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Run a CAP Application on Kyma
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#preface" class="md-nav__link">
Preface
</a>
</li>
<li class="md-nav__item">
<a href="#disclaimer" class="md-nav__link">
Disclaimer
</a>
</li>
<li class="md-nav__item">
<a href="#preconditions" class="md-nav__link">
Preconditions
</a>
<nav class="md-nav" aria-label="Preconditions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#sap-btp-application-development-example" class="md-nav__link">
SAP BTP Application Development Example
</a>
</li>
<li class="md-nav__item">
<a href="#local-software" class="md-nav__link">
Local Software
</a>
</li>
<li class="md-nav__item">
<a href="#enable-kyma-in-sap-btp-subaccount" class="md-nav__link">
Enable Kyma in SAP BTP Subaccount
</a>
</li>
<li class="md-nav__item">
<a href="#option-1-create-your-own-sap-btp-trial-account" class="md-nav__link">
Option 1: Create Your Own SAP BTP Trial Account
</a>
</li>
<li class="md-nav__item">
<a href="#option-2-use-your-existing-sap-btp-subaccount" class="md-nav__link">
Option 2: Use Your Existing SAP BTP Subaccount
</a>
</li>
<li class="md-nav__item">
<a href="#enable-cloud-foundry" class="md-nav__link">
Enable Cloud Foundry
</a>
</li>
<li class="md-nav__item">
<a href="#install-the-cloud-foundry-cli" class="md-nav__link">
Install the Cloud Foundry CLI
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#run-the-cap-application-in-a-docker-container-locally" class="md-nav__link">
Run the CAP Application in a Docker Container Locally
</a>
<nav class="md-nav" aria-label="Run the CAP Application in a Docker Container Locally">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#build-a-docker-container" class="md-nav__link">
Build a Docker Container
</a>
</li>
<li class="md-nav__item">
<a href="#run-the-docker-container" class="md-nav__link">
Run the Docker Container
</a>
<nav class="md-nav" aria-label="Run the Docker Container">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#check-the-content-of-the-docker-container" class="md-nav__link">
Check the Content of the Docker Container
</a>
</li>
<li class="md-nav__item">
<a href="#run-your-cap-service" class="md-nav__link">
Run Your CAP Service
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#add-sap-fiori-ui" class="md-nav__link">
Add SAP Fiori UI
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#deploy-to-kyma" class="md-nav__link">
Deploy to Kyma
</a>
<nav class="md-nav" aria-label="Deploy to Kyma">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#log-in-to-kyma-kubernetes-cluster" class="md-nav__link">
Log In to Kyma (Kubernetes Cluster)
</a>
</li>
<li class="md-nav__item">
<a href="#prepare-the-docker-registry" class="md-nav__link">
Prepare the Docker Registry
</a>
</li>
<li class="md-nav__item">
<a href="#push-docker-image" class="md-nav__link">
Push Docker Image
</a>
</li>
<li class="md-nav__item">
<a href="#deploy-the-cap-application" class="md-nav__link">
Deploy the CAP Application
</a>
</li>
<li class="md-nav__item">
<a href="#expose-cap-application-to-the-public-internet" class="md-nav__link">
Expose CAP Application to the Public Internet
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#add-sap-hana-cloud" class="md-nav__link">
Add SAP HANA Cloud
</a>
<nav class="md-nav" aria-label="Add SAP HANA Cloud">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prepare-cap-application-for-sap-hana-cloud" class="md-nav__link">
Prepare CAP Application for SAP HANA Cloud
</a>
</li>
<li class="md-nav__item">
<a href="#create-and-deploy-sap-hana-hdi-container" class="md-nav__link">
Create and Deploy SAP HANA HDI Container
</a>
</li>
<li class="md-nav__item">
<a href="#workaround-use-hdi-deployer-in-docker-container" class="md-nav__link">
Workaround: Use HDI Deployer in Docker Container
</a>
</li>
<li class="md-nav__item">
<a href="#add-sap-hana-hdi-container-credentials" class="md-nav__link">
Add SAP HANA HDI Container Credentials
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#create-a-secret-for-sap-hana-hdi-container-credentials" class="md-nav__link">
Create a Secret for SAP HANA HDI Container Credentials
</a>
<nav class="md-nav" aria-label="Create a Secret for SAP HANA HDI Container Credentials">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#connect-the-cap-application-to-the-sap-hana-hdi-container" class="md-nav__link">
Connect the CAP Application to the SAP HANA HDI Container
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
Summary
</a>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
Troubleshooting
</a>
<nav class="md-nav" aria-label="Troubleshooting">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#viewing-the-applications-log" class="md-nav__link">
Viewing the Application's Log
</a>
</li>
<li class="md-nav__item">
<a href="#execute-commands-in-the-applications-container" class="md-nav__link">
Execute Commands in the Application's Container
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#teardown" class="md-nav__link">
Teardown
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#preface" class="md-nav__link">
Preface
</a>
</li>
<li class="md-nav__item">
<a href="#disclaimer" class="md-nav__link">
Disclaimer
</a>
</li>
<li class="md-nav__item">
<a href="#preconditions" class="md-nav__link">
Preconditions
</a>
<nav class="md-nav" aria-label="Preconditions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#sap-btp-application-development-example" class="md-nav__link">
SAP BTP Application Development Example
</a>
</li>
<li class="md-nav__item">
<a href="#local-software" class="md-nav__link">
Local Software
</a>
</li>
<li class="md-nav__item">
<a href="#enable-kyma-in-sap-btp-subaccount" class="md-nav__link">
Enable Kyma in SAP BTP Subaccount
</a>
</li>
<li class="md-nav__item">
<a href="#option-1-create-your-own-sap-btp-trial-account" class="md-nav__link">
Option 1: Create Your Own SAP BTP Trial Account
</a>
</li>
<li class="md-nav__item">
<a href="#option-2-use-your-existing-sap-btp-subaccount" class="md-nav__link">
Option 2: Use Your Existing SAP BTP Subaccount
</a>
</li>
<li class="md-nav__item">
<a href="#enable-cloud-foundry" class="md-nav__link">
Enable Cloud Foundry
</a>
</li>
<li class="md-nav__item">
<a href="#install-the-cloud-foundry-cli" class="md-nav__link">
Install the Cloud Foundry CLI
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#run-the-cap-application-in-a-docker-container-locally" class="md-nav__link">
Run the CAP Application in a Docker Container Locally
</a>
<nav class="md-nav" aria-label="Run the CAP Application in a Docker Container Locally">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#build-a-docker-container" class="md-nav__link">
Build a Docker Container
</a>
</li>
<li class="md-nav__item">
<a href="#run-the-docker-container" class="md-nav__link">
Run the Docker Container
</a>
<nav class="md-nav" aria-label="Run the Docker Container">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#check-the-content-of-the-docker-container" class="md-nav__link">
Check the Content of the Docker Container
</a>
</li>
<li class="md-nav__item">
<a href="#run-your-cap-service" class="md-nav__link">
Run Your CAP Service
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#add-sap-fiori-ui" class="md-nav__link">
Add SAP Fiori UI
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#deploy-to-kyma" class="md-nav__link">
Deploy to Kyma
</a>
<nav class="md-nav" aria-label="Deploy to Kyma">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#log-in-to-kyma-kubernetes-cluster" class="md-nav__link">
Log In to Kyma (Kubernetes Cluster)
</a>
</li>
<li class="md-nav__item">
<a href="#prepare-the-docker-registry" class="md-nav__link">
Prepare the Docker Registry
</a>
</li>
<li class="md-nav__item">
<a href="#push-docker-image" class="md-nav__link">
Push Docker Image
</a>
</li>
<li class="md-nav__item">
<a href="#deploy-the-cap-application" class="md-nav__link">
Deploy the CAP Application
</a>
</li>
<li class="md-nav__item">
<a href="#expose-cap-application-to-the-public-internet" class="md-nav__link">
Expose CAP Application to the Public Internet
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#add-sap-hana-cloud" class="md-nav__link">
Add SAP HANA Cloud
</a>
<nav class="md-nav" aria-label="Add SAP HANA Cloud">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prepare-cap-application-for-sap-hana-cloud" class="md-nav__link">
Prepare CAP Application for SAP HANA Cloud
</a>
</li>
<li class="md-nav__item">
<a href="#create-and-deploy-sap-hana-hdi-container" class="md-nav__link">
Create and Deploy SAP HANA HDI Container
</a>
</li>
<li class="md-nav__item">
<a href="#workaround-use-hdi-deployer-in-docker-container" class="md-nav__link">
Workaround: Use HDI Deployer in Docker Container
</a>
</li>
<li class="md-nav__item">
<a href="#add-sap-hana-hdi-container-credentials" class="md-nav__link">
Add SAP HANA HDI Container Credentials
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#create-a-secret-for-sap-hana-hdi-container-credentials" class="md-nav__link">
Create a Secret for SAP HANA HDI Container Credentials
</a>
<nav class="md-nav" aria-label="Create a Secret for SAP HANA HDI Container Credentials">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#connect-the-cap-application-to-the-sap-hana-hdi-container" class="md-nav__link">
Connect the CAP Application to the SAP HANA HDI Container
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
Summary
</a>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
Troubleshooting
</a>
<nav class="md-nav" aria-label="Troubleshooting">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#viewing-the-applications-log" class="md-nav__link">
Viewing the Application's Log
</a>
</li>
<li class="md-nav__item">
<a href="#execute-commands-in-the-applications-container" class="md-nav__link">
Execute Commands in the Application's Container
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#teardown" class="md-nav__link">
Teardown
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management/edit/master/docs/Kyma.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
</a>
<h1 id="run-a-cap-application-on-kyma">Run a CAP Application on Kyma</h1>
<details class="note">
<summary>Additional Documentation</summary>
<ul>
<li><a href="https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/b8e16869e64a4abe93cc194aa6fdacf5.html">Administration and Operations in the Kyma Environment</a></li>
</ul>
</details>
<h2 id="preface">Preface</h2>
<p>SAP recently released the <a href="https://blogs.sap.com/2020/05/12/get-a-fully-managed-runtime-based-on-kyma-and-kubernetes/">SAP Business Technology Platform, Kyma runtime</a>, a managed Kubernetes offering with Kyma.</p>
<p>Kyma is much about extending existing applications, but you also get a full-blown Kubernetes cluster including <a href="https://istio.io/latest/docs/concepts/what-is-istio/#what-is-a-service-mesh">Istio service mesh</a> that you can use to build a standalone cloud application.</p>
<p>In this tutorial, you deploy an application built with the SAP Cloud Application Programming Model (CAP) to an <em>SAP Business Technology Platform, Kyma runtime</em> cluster. The CAP application has an OData service, SAP Fiori UI and uses SAP HANA as a database.</p>
<p>The <a href="https://github.com/SAP-samples/cloud-cap-risk-management">SAP BTP Application Development</a> example is used as starting point.</p>
<p>The tutorial can be also done with any other Kyma installation, but you need an SAP HANA database and an HDI container and you then need to do the part with SAP HANA credentials differently.</p>
<p>The CAP part is probably the smallest in the tutorial: Frankly speaking, just package it into a docker container and run it. But the tutorial also describes how to get a small docker registry running. If you are experienced with Kubernetes, you can skip some sections.</p>
<p>Since SAP HANA Cloud isn’t yet available for Kyma, you take it from Cloud Foundry. It's a bit tricky to copy the credentials, but at the end it's just copying and pasting values. Scripts are provided to help you here. So, don't get distracted by this.</p>
<h2 id="disclaimer">Disclaimer</h2>
<p>Note, that this tutorial is intended to give an introduction in the topic and not for deploying productive applications.</p>
<p>CAP doesn't officially support <em>Kubernetes</em> and <em>Kyma</em> as a platform right now.</p>
<h2 id="preconditions">Preconditions</h2>
<p>These are preconditions to do this tutorial:</p>
<h3 id="sap-btp-application-development-example">SAP BTP Application Development Example</h3>
<p>You can find the starting point of this tutorial in the <a href="https://github.com/SAP-samples/cloud-cap-risk-management/tree/cap/freestyle-ui5-app">cap/freestyle</a> branch:</p>
<ol>
<li>
<p>Go to the directory where you want to create the example.</p>
</li>
<li>
<p>Create a folder for your example:</p>
<p>For example:</p>
<div class="highlight"><pre><span></span><code>mkdir<span class="w"> </span>cap-kyma-app
</code></pre></div>
</li>
<li>
<p>Clone the example GitHub repository and checkout the example branch:</p>
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/SAP-samples/cloud-cap-risk-management
<span class="nb">cd</span><span class="w"> </span>cloud-cap-risk-management
git<span class="w"> </span>checkout<span class="w"> </span>cap/freestyle-ui5-app
</code></pre></div>
</li>
<li>
<p>Copy all files from the example to your folder, except the <code>.git</code> folder:</p>
<p>For example:</p>
<div class="highlight"><pre><span></span><code>cp<span class="w"> </span>-r<span class="w"> </span>.gitignore<span class="w"> </span><span class="k">$(</span>ls<span class="w"> </span>-1A<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>-v<span class="w"> </span>.git<span class="k">)</span><span class="w"> </span>../cap-kyma-app
</code></pre></div>
</li>
<li>
<p>Open a new project in your source editor for the folder <code>cap-kyma-app</code>:</p>
<p>For Visual Studio Code:</p>
<div class="highlight"><pre><span></span><code><span class="nb">cd</span><span class="w"> </span>../cap-kyma-app
code<span class="w"> </span>.
</code></pre></div>
</li>
</ol>
<p>Find the final code in the <a href="https://github.com/SAP-samples/cloud-cap-risk-management/tree/kyma/app">kyma/app</a> branch.</p>
<h3 id="local-software">Local Software</h3>
<p>The following local software is required:</p>
<ul>
<li><code>node</code> (<a href="https://nodejs.org/en/download/">Node.js</a> version 12.x or 14.x is recommended)</li>
<li><code>@sap/cds-dk</code> NPM package (<code>npm install --global @sap/cds-dk</code>)</li>
<li><code>docker</code> (for example, <a href="https://www.docker.com/products/docker-desktop">Docker Desktop</a> for macOS or Windows)</li>
<li>A source code editor (<a href="https://code.visualstudio.com/">Visual Studio Code</a> is recommended)</li>
<li><code>bash</code> or <code>zsh</code> shell to run the command snippets on MacOS or Linux, or <a href="https://gitforwindows.org/">Git Bash</a> for Windows, MinGW, or <a href="https://www.cygwin.com/">Cygwin</a>)</li>
<li><code>kubectl</code> (<a href="https://kubernetes.io/docs/tasks/tools/">Kubernetes Command Line tool</a>), see this <a href="https://developers.sap.com/tutorials/cp-kyma-download-cli.html">tutorial</a> how to install it</li>
<li><code>helm</code> (<a href="https://helm.sh/docs/intro/install/">Helm Chart Command Line</a>, not needed if you use an existing docker registry)</li>
<li><code>cf</code> (<a href="https://docs.cloudfoundry.org/cf-cli/install-go-cli.html">Cloud Foundry Command Line Interface (CLI)</a>)</li>
<li><code>git</code> (<a href="https://git-scm.com/downloads">Git Downloads</a> )</li>
<li>(For Windows users only): You have installed the <a href="https://sqlite.org/download.html">SQLite</a> tools for Windows. Find the steps how to install it in the <a href="https://cap.cloud.sap/docs/advanced/troubleshooting#how-do-i-install-sqlite-on-windows">Troubleshooting guide</a> in the CAP documentation.</li>
</ul>
<p>If you have a Mac, many of the commands can be installed using Homebrew (<code>brew install ...</code>). For Windows, there's a similar offering called Chocolatey. Refer to the binary installers of the components otherwise.</p>
<h3 id="enable-kyma-in-sap-btp-subaccount">Enable Kyma in SAP BTP Subaccount</h3>
<p>You need an SAP BTP Subaccount with consumption-based model (that is, Cloud Credits). Kyma is currently supported on Azure landscapes only, as of September 2020. Although Kyma is needed at a later point in the tutorial, it’s recommended to start with this step, because the Kyma provisioning can take some time.</p>
<p>For this tutorial you have two options:</p>
<p><strong>Option 1:</strong> <a href="#option-1-create-your-own-sap-btp-trial-account">Create Your Own SAP BTP Trial Account</a></p>
<p><strong>Option 2:</strong> <a href="#option-2-use-your-existing-sap-btp-subaccount">Use an Existing SAP BTP Subaccount</a></p>
<h3 id="option-1-create-your-own-sap-btp-trial-account">Option 1: Create Your Own SAP BTP Trial Account</h3>
<ol>
<li>Go to <a href="https://cockpit.eu10.hana.ondemand.com/trial/#/home/trial">SAP BTP Cockpit</a>.</li>
<li>Choose <strong>Go To Your Trial Account</strong>.</li>
<li>If you don't have a user, you need to <a href="https://developers.sap.com/tutorials/hcp-create-trial-account.html">register</a> for a free.</li>
<li>Wait for the completion of the on-boarding.</li>
<li>You should land on the <strong>Subaccounts</strong> page of your <strong>Global Account</strong> on trial.</li>
<li>Choose <strong>trial</strong>.</li>
<li>Go to <strong>Kyma Environment</strong>.</li>
<li>Choose <strong>Enable Kyma</strong>.</li>
<li>Provide a <strong>Cluster Name</strong>.</li>
<li>Choose <strong>Create</strong>.</li>
</ol>
<p>This takes a while. You can start the tutorial in the meantime.</p>
<h3 id="option-2-use-your-existing-sap-btp-subaccount">Option 2: Use Your Existing SAP BTP Subaccount</h3>
<p>If you already have an older trial account, then you might not see the <strong>Enable Kyma</strong> button. In that case:</p>
<ol>
<li>Go to <strong>Entitlements</strong>.</li>
<li>Choose <strong>Configure Entitlements</strong>.</li>
<li>Choose <strong>Add Service Plans</strong>.</li>
<li>Search for and select <strong>Kyma runtime</strong>.</li>
<li>Check the <strong>trial (Environment)</strong> checkbox.</li>
<li>Choose <strong>Add 1 Service Plan</strong>.</li>
<li>Choose <strong>Enable Kyma</strong>.</li>
<li>Provide a <strong>Cluster Name</strong>.</li>
<li>Choose <strong>Create</strong>.</li>
</ol>
<p>This takes a while. You can start the tutorial in the meantime.</p>
<p>SAP BTP’s XSUAA is used to access the Kyma runtime. Please follow the steps to assign <a href="https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/148ae38b7d6f4e61bbb696bbfb3996b2.html">Roles in the Kyma Environment</a>. In some cases, it will still take 5-10 minutes to get access to Kyma Runtime.</p>
<h3 id="enable-cloud-foundry">Enable Cloud Foundry</h3>
<p>To use the SAP HANA Cloud service, you can either enable Cloud Foundry for the same subaccount or use a different subaccount, for example, an already existing or trial subaccount.</p>
<h3 id="install-the-cloud-foundry-cli">Install the Cloud Foundry CLI</h3>
<p>Later in this tutorial, you need to log on to Cloud Foundry using the command line. Therefore, it's necessary to install the Cloud Foundry CLI. See the <a href="https://docs.cloudfoundry.org/cf-cli/install-go-cli.html">Cloud Foundry documentation</a> for detailed steps on how to do that.</p>
<h2 id="run-the-cap-application-in-a-docker-container-locally">Run the CAP Application in a Docker Container Locally</h2>
<p>In the first part of this tutorial, you prepare your application to be run on Kyma.</p>
<h3 id="build-a-docker-container">Build a Docker Container</h3>
<p>Since all applications in Kubernetes as in Kyma are docker containers, you need to create a docker image for the CAP application. For that, you need to define a file <code>Dockerfile</code> that describes, how to build up the image and what to do when the docker image is run. The file starts with the <code>FROM</code> directive that names the base image that you want to use since you don't want to start from scratch. Here, you use a public image that already contains the NodeJS 12.x installation. Additionally install <code>openssl</code>, which is required by the SAP HANA client and carry out <code>npm install</code>.</p>
<p>You then declare that the CAP default port <code>4004</code> is exposed to the outside and run the CAP server with <code>npm start</code>.</p>
<ol>
<li>
<p>Navigate to the root folder of your app:</p>
<div class="highlight"><pre><span></span><code>cd cpapp
</code></pre></div>
</li>
<li>
<p>Create a file named <code>Dockerfile</code> and add the following lines to it:</p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span><span class="w"> </span><span class="s">node:12-slim</span>
<span class="k">WORKDIR</span><span class="w"> </span><span class="s">/usr/src/app</span>
<span class="k">COPY</span><span class="w"> </span>gen/srv<span class="w"> </span>.
<span class="k">RUN</span><span class="w"> </span>npm<span class="w"> </span>install
<span class="k">EXPOSE</span><span class="w"> </span><span class="s">4004</span>
<span class="k">USER</span><span class="w"> </span><span class="s">node</span>
<span class="k">CMD</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&quot;npm&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;start&quot;</span><span class="w"> </span><span class="p">]</span>
</code></pre></div>
</li>
<li>
<p>Add <code>sqlite3</code> as project dependency, so you can try out the scenario without an external database service:</p>
<p>First, the dev dependency to <code>sqlite3</code> needs to be removed and then its added again as a runtime dependency.</p>
<div class="highlight"><pre><span></span><code>npm<span class="w"> </span>uninstall<span class="w"> </span>sqlite3
npm<span class="w"> </span>install<span class="w"> </span>sqlite3
</code></pre></div>
</li>
<li>
<p>Add the following snippet to the <code>package.json</code> file:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;cpapp&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="err">...</span>
<span class="hll"><span class="w"> </span><span class="nt">&quot;cds&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span class="hll"><span class="w"> </span><span class="nt">&quot;requires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span class="hll"><span class="w"> </span><span class="nt">&quot;db&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span class="hll"><span class="w"> </span><span class="nt">&quot;kind&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;sql&quot;</span>
</span><span class="hll"><span class="w"> </span><span class="p">}</span>
</span><span class="hll"><span class="w"> </span><span class="p">}</span>
</span><span class="hll"><span class="w"> </span><span class="p">}</span>
</span><span class="p">}</span>
</code></pre></div>
<p>This tells CAP to use SQLite in dev and SAP HANA in productive mode.</p>
</li>
<li>
<p>Before you can build the image, run <code>cds build</code>, because the image takes the build results from the <code>gen/srv</code> folder. You can also do this in the docker build, but that would require additional steps that you skip for now.</p>
<div class="highlight"><pre><span></span><code>cds<span class="w"> </span>build
</code></pre></div>
</li>
<li>
<p>Build the docker image locally:</p>
<div class="admonition info">
<p class="admonition-title">Make sure that the docker daemon is running (for example, Docker Desktop for MacOS or Windows).</p>
</div>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>build<span class="w"> </span>-t<span class="w"> </span>cpapp<span class="w"> </span>.
</code></pre></div>
<p>This builds the docker image specified in <code>Dockerfile</code> from the current directory (<code>.</code> argument). The image is tagged with the name <code>cpapp</code>. Without giving a tag a random tag will be added.</p>
<p>You should see an output similar like:</p>
<div class="highlight"><pre><span></span><code>...
Removing<span class="w"> </span>intermediate<span class="w"> </span>container<span class="w"> </span>4f451017d70f
---&gt;<span class="w"> </span>948523646f60
Step<span class="w"> </span><span class="m">5</span>/6<span class="w"> </span>:<span class="w"> </span>EXPOSE<span class="w"> </span><span class="m">4004</span>
---&gt;<span class="w"> </span>Running<span class="w"> </span><span class="k">in</span><span class="w"> </span>1a2b7a0ec606
Removing<span class="w"> </span>intermediate<span class="w"> </span>container<span class="w"> </span>1a2b7a0ec606
---&gt;<span class="w"> </span>be849ff002e1
Step<span class="w"> </span><span class="m">6</span>/6<span class="w"> </span>:<span class="w"> </span>CMD<span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="s2">&quot;npm&quot;</span>,<span class="w"> </span><span class="s2">&quot;start&quot;</span><span class="w"> </span><span class="o">]</span>
---&gt;<span class="w"> </span>Running<span class="w"> </span><span class="k">in</span><span class="w"> </span>cb0b32163709
Removing<span class="w"> </span>intermediate<span class="w"> </span>container<span class="w"> </span>cb0b32163709
---&gt;<span class="w"> </span>1e0c26b94ac6
<span class="hll">Successfully<span class="w"> </span>built<span class="w"> </span>1e0c26b94ac6
</span><span class="hll">Successfully<span class="w"> </span>tagged<span class="w"> </span>cpapp:latest
</span></code></pre></div>
</li>
</ol>
<p>Docker images consist of several "filesystem layers". The <em>base image</em> is a layer and your own docker image is a layer on top. Each layer can add or remove files. This is convenient because it saves storage because your custom images contain only the delta of files added or removed. To be more precise an image consists of multiple layers. The <code>docker build</code> will automatically decide when to create a new layer. You can see the different layers in the <code>docker build</code> output, for example: <code>---&gt; 365313c4290e</code></p>
<h3 id="run-the-docker-container">Run the Docker Container</h3>
<h4 id="check-the-content-of-the-docker-container">Check the Content of the Docker Container</h4>
<ol>
<li>
<p>You can run the docker container and look inside its contents:</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>run<span class="w"> </span>--rm<span class="w"> </span>-i<span class="w"> </span>-t<span class="w"> </span>cpapp<span class="w"> </span>/bin/bash
</code></pre></div>
<p>This starts a docker container with your image (<code>-t cpapp</code>) and starts the bash shell (<code>/bin/bash</code>) that happens to be part of your base image in an interactive (<code>-i</code>) mode.</p>
</li>
<li>
<p>Look inside the contents using the <code>ls</code> command:</p>
<div class="highlight"><pre><span></span><code>node@a5a0b8115eb5:/usr/src/app#<span class="w"> </span>ls
manifest.yaml<span class="w"> </span>node_modules<span class="w"> </span>package-lock.json<span class="w"> </span>package.json<span class="w"> </span>srv
</code></pre></div>
</li>
<li>
<p>Exit the container using <code>exit</code> (Pro-tip: <kbd>Ctrl</kbd> + <kbd>D</kbd> :-)).</p>
</li>
</ol>
<h4 id="run-your-cap-service">Run Your CAP Service</h4>
<p>Now, it's time to run your CAP service. So, lets do this.</p>
<ol>
<li>
<p>Run the container:</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>run<span class="w"> </span>--rm<span class="w"> </span>-t<span class="w"> </span>cpapp
</code></pre></div>
<p>Without specifying the command, it runs the default command, that is <code>npm start</code>.
You can try to access the service at <a href="http://localhost:4004">http://localhost:4004</a>, but it doesn't work. It shows a similar error message like this:</p>
<div class="highlight"><pre><span></span><code>This site can’t be reached
localhost refused to connect.
</code></pre></div>
<p>Although the docker container exposes port <code>4004</code>, the "host" of the container, that is your PC or Mac, doesn't make it accessible. You need to declare it in the docker command line.</p>
</li>
<li>
<p>Stop the service with <kbd>Ctrl</kbd> + <kbd>C</kbd>.</p>
</li>
<li>
<p>Run the container again with the publish parameter:</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>run<span class="w"> </span>--rm<span class="w"> </span>-p<span class="w"> </span><span class="m">4004</span>:4004<span class="w"> </span>-t<span class="w"> </span>cpapp
</code></pre></div>
<p>This tells docker to expose the port <code>4004</code> of the docker container to the port <code>4004</code> of the host. You could also use a different port of the host, but let's keep it simple.</p>
<p>Now, you can access the CAP service at <a href="http://localhost:4004">http://localhost:4004</a>.</p>
<p>You can click on the <em>Risks</em><em> (<a href="http://localhost:4004/service/risk/Risks">http://localhost:4004/service/risk/Risks</a>) or </em><em>Mitigations</em>* (<a href="http://localhost:4004/service/risk/Risks">http://localhost:4004/service/risk/Risks</a>) link that returns an empty OData response.</p>
</li>
</ol>
<h3 id="add-sap-fiori-ui">Add SAP Fiori UI</h3>
<p>There's already an SAP Fiori Elements UI for <strong>Risks</strong> and a SAPUI5 Freestyle UI for <strong>Mitigations</strong> in the project. You could think of several ways to deploy it to the cloud. For the sake of simplicity, you can use the CAP service's capability to serve static resources from the <code>app</code> folder. After the <code>cds build</code>, the <code>app</code> folder isn’t part of the service. You can copy it in, but you need to remove the <code>*.cds</code> files because they’re already copied from <code>app</code> to <code>srv</code> and duplicating these files confuses CAP.</p>
<p>You can automate this in the docker build by modifying the <code>Dockerfile</code>.</p>
<ol>
<li>
<p>Add the highlighted lines to the file <code>Dockerfile</code>:</p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span><span class="w"> </span><span class="s">node:12-slim</span>
<span class="k">WORKDIR</span><span class="w"> </span><span class="s">/usr/src/app</span>
<span class="k">COPY</span><span class="w"> </span>gen/srv<span class="w"> </span>.
<span class="k">RUN</span><span class="w"> </span>npm<span class="w"> </span>install
<span class="hll"><span class="k">COPY</span><span class="w"> </span>app<span class="w"> </span>app/
</span><span class="hll"><span class="k">RUN</span><span class="w"> </span>find<span class="w"> </span>app<span class="w"> </span>-name<span class="w"> </span><span class="s1">&#39;*.cds&#39;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>xargs<span class="w"> </span>rm<span class="w"> </span>-f
</span>
<span class="k">EXPOSE</span><span class="w"> </span><span class="s">4004</span>
<span class="k">USER</span><span class="w"> </span><span class="s">node</span>
<span class="k">CMD</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&quot;npm&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;start&quot;</span><span class="w"> </span><span class="p">]</span>
</code></pre></div>
</li>
<li>
<p>Rebuild the docker image:</p>
<div class="highlight"><pre><span></span><code>cds<span class="w"> </span>build
docker<span class="w"> </span>build<span class="w"> </span>-t<span class="w"> </span>cpapp<span class="w"> </span>.
</code></pre></div>
</li>
<li>
<p>Run it locally:</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>run<span class="w"> </span>--rm<span class="w"> </span>-p<span class="w"> </span><span class="m">4004</span>:4004<span class="w"> </span>-t<span class="w"> </span>cpapp
</code></pre></div>
</li>
<li>
<p>Try it out by navigating to <a href="http://localhost:4004/launchpage.html">http://localhost:4004/launchpage.html</a>.</p>
</li>
</ol>
<h2 id="deploy-to-kyma">Deploy to Kyma</h2>
<p>In this part of the tutorial, you deploy the dockerized CAP application to Kyma.</p>
<h3 id="log-in-to-kyma-kubernetes-cluster">Log In to Kyma (Kubernetes Cluster)</h3>
<p>The first step is to log in to Kyma using the <strong>Kyma Console</strong> and configure the local <code>kubectl</code> command to connect to the Kyma Kubernetes cluster.</p>
<ol>
<li>Go to <a href="https://cockpit.eu10.hana.ondemand.com/trial/#/home/trial">SAP BTP Cockpit</a>.</li>
<li>Choose <strong>Enter Your Trial Account</strong>.</li>
<li>Choose your <strong>Global Account</strong>.</li>
<li>Choose your <strong>Subaccount</strong>.</li>
<li>
<p>On the <strong>Overview</strong> page, under <strong>Kyma Environment</strong>, choose <strong>Link to dashboard</strong>.</p>
<p><img alt="Kyma Console" src="../markdown/images/kyma_console_link.png" /></p>
<p>The Kyma console should open. The console is a web-based administrative UI for Kyma. If not, see the troubleshooting information.</p>
<details class="info">
<summary>Troubleshooting: Not enough permissions to launch the kyma console</summary>
<p><img alt="response" src="../markdown/images/kyma_console_permissions.png" /></p>
<p>If you can not launch the kyma console, please follow the steps to get permissions:</p>
<ol>
<li>Open your subaccount.</li>
<li>Navigate to <strong>Security</strong> --› <strong>Role Collections</strong> --› <strong>Trust Configuration</strong> and assign the role collection <em>Kyma_Roles</em> to your user.</li>
<li>Navigate back to the subaccount overview and launch the kyma console.</li>
</ol>
</details>
</li>
<li>
<p>Choose the account icon in the upper right corner.</p>
</li>
<li>
<p>Choose <strong>Get Kubeconfig</strong> from the dropdown menu.</p>
<p><img alt="Kubeconfig Download" src="../markdown/images/kubeconfig_download.png" /></p>
<p>A file download should be triggered. If no download is triggered, see the troubleshooting information.</p>
<details class="info">
<summary>Troubleshooting: If no download is triggered</summary>
<p>It can happen, that no download is triggered. In this case follow these steps:</p>
<ol>
<li>Open your browser's developer tools (press <code>F12</code>).</li>
<li>Navigate to the <strong>Network</strong> tab.</li>
<li>Choose the <strong>Get Kubeconfig</strong> button again.</li>
<li>Locate the response of the <code>kubeconfig</code> file.</li>
<li>Look at the response.</li>
</ol>
<p><img alt="response" src="../markdown/images/kubeconfig.png" /></p>
<ol>
<li>Copy the response, you will need it in the next steps.</li>
</ol>
</details>
</li>
<li>
<p>Navigate to your home folder.</p>
<p>The config for the default cluster is stored in <code>.kube/config</code> in your home directory.</p>
</li>
<li>
<p>Navigate to the <code>.kube</code> folder.</p>
</li>
<li>
<p>Create a file named <code>cap-kyma-app-config</code> to avoid overwriting the existing configuration.</p>
</li>
<li>
<p>Copy the content of the downloaded <code>kubeconfig.yml</code> into the file <code>cap-kyma-app-config</code>.</p>
</li>
<li>
<p>Make sure that only your user can access the content of the file, that contains your login token.</p>
</li>
</ol>
<p>For example, on Mac or Linux, change the file to be only readable and writable by your user using:</p>
<div class="highlight"><pre><span></span><code>chmod 0600 ~/.kube/cap-kyma-app-config
</code></pre></div>
<ol>
<li>
<p>Set the new config file for the running shell process:</p>
<div class="highlight"><pre><span></span><code><span class="nb">export</span><span class="w"> </span><span class="nv">KUBECONFIG</span><span class="o">=</span>~/.kube/cap-kyma-app-config
</code></pre></div>
<p>Now, you can access your kubernetes cluster.</p>
</li>
<li>
<p>Check if you can access your kubernetes cluster.</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>get<span class="w"> </span>pods
</code></pre></div>
<p>The command should run without an error message, but it doesn't output any pods if you have a newly created cluster.</p>
<p>If you want to use <code>kubectl</code> in another shell session, then rerun the <code>export</code> statement.
The authentication session will expire after some hours. You then need to download the <code>kubeconfig.yml</code> file again and replace the value of the token parameter in your <code>cap-kyma-app-config</code> file with the one from the newly downloaded <code>kubeconfig.yml</code> file.</p>
</li>
</ol>
<h3 id="prepare-the-docker-registry">Prepare the Docker Registry</h3>
<p>Kubernetes needs a docker registry that can be accessed from the cluster's network. This could be any public or private registry. To keep this tutorial self-contained, you use a slightly different approach, which isn’t recommended for productive use: You deploy your own docker registry to the cluster.</p>
<p>If you want to use a different docker registry, then you need to adjust the <code>docker push</code> commands and the URLs for the docker images.</p>
<p>In the approach with the cluster's own docker registry, a <a href="https://charts.helm.sh/stable">Helm Chart</a> is used to install it on the cluster.</p>
<ol>
<li>
<p>Add the stable Helm Chart repository to the <code>helm</code> CLI:</p>
<div class="highlight"><pre><span></span><code>helm<span class="w"> </span>repo<span class="w"> </span>add<span class="w"> </span>stable<span class="w"> </span>https://charts.helm.sh/stable
</code></pre></div>
</li>
<li>
<p>Install the Helm Chart for a docker registry:</p>
<div class="highlight"><pre><span></span><code>helm<span class="w"> </span>install<span class="w"> </span>docker-registry<span class="w"> </span>stable/docker-registry
</code></pre></div>
</li>
<li>
<p>You need to make the docker registry available on the public internet. The details to this step are explained later. Run the following commands:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>-<span class="w"> </span><span class="s">&lt;&lt;EOF</span>
<span class="s">apiVersion: gateway.kyma-project.io/v1alpha1</span>
<span class="s">kind: APIRule</span>
<span class="s">metadata:</span>
<span class="s"> labels:</span>
<span class="s"> app: docker-registry</span>
<span class="s"> name: docker-registry</span>
<span class="s">spec:</span>
<span class="s"> service:</span>
<span class="s"> host: docker-registry</span>
<span class="s"> name: docker-registry</span>
<span class="s"> port: 5000</span>
<span class="s"> gateway: kyma-gateway.kyma-system.svc.cluster.local</span>
<span class="s"> rules:</span>
<span class="s"> - path: /.*</span>
<span class="s"> methods: [&quot;GET&quot;, &quot;HEAD&quot; ]</span>
<span class="s"> accessStrategies:</span>
<span class="s"> - handler: noop</span>
<span class="s"> mutators: []</span>
<span class="s">EOF</span>
</code></pre></div>
</li>
<li>
<p>To be able to push docker images via HTTP, you need to add it as an "insecure registry" (not using secure socket communication) to your Docker config.</p>
<ol>
<li>Open your Docker Desktop.</li>
<li>Choose <strong>Preferences</strong>.</li>
<li>Choose <strong>Docker Engine</strong>.</li>
<li>
<p>Add the following line:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="err">...</span>
<span class="hll"><span class="w"> </span><span class="nt">&quot;insecure-registries&quot;</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;0.0.0.0:5000&quot;</span><span class="p">]</span>
</span><span class="p">}</span>
</code></pre></div>
</li>
<li>
<p>Choose <strong>Apply and Restart</strong>.</p>
</li>
<li>Wait for the startup to be completed.</li>
</ol>
</li>
</ol>
<h3 id="push-docker-image">Push Docker Image</h3>
<ol>
<li>
<p>Since the docker registry isn’t exposed to the open internet (and you don't want to), you need to establish a tunnel from your localhost to the registry:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>port-forward<span class="w"> </span>deployment/docker-registry<span class="w"> </span><span class="m">5000</span>:5000<span class="w"> </span><span class="p">&amp;</span>
</code></pre></div>
<p>The <code>&amp;</code> causes the process to run in the background. You need to keep it running until you finished pushing docker images. You may need to start it newly in case the "docker push" doesn't work anymore.</p>
<p>You should see the following output that tells you that the tunneling is established:</p>
<div class="highlight"><pre><span></span><code>Forwarding from 127.0.0.1:5000 -&gt; 5000
Forwarding from [::1]:5000 -&gt; 5000
</code></pre></div>
</li>
<li>
<p>Your docker image needs an additional tag to declare it part of your <code>forwarded</code> docker registry. Otherwise, you can't push it.</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>tag<span class="w"> </span>cpapp<span class="w"> </span><span class="m">0</span>.0.0.0:5000/cpapp
</code></pre></div>
</li>
<li>
<p>Push it, using the new tag:</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>push<span class="w"> </span><span class="m">0</span>.0.0.0:5000/cpapp
</code></pre></div>
<p>The output mixes the <code>docker push</code> output with the <code>kubectl port-forward</code> output. It should finish with a line like:</p>
<div class="codehilite"><pre><span></span><code>```
latest: digest: sha256:4054dd60ee4f9889d58aa97295cb3b1430a5c1549e602b6c619d7c4ed7d04ad0 size: 2412
```
</code></pre></div>
</li>
</ol>
<h3 id="deploy-the-cap-application">Deploy the CAP Application</h3>
<p>Now, you can deploy your CAP service to Kubernetes. You use the <code>Deployment</code> resource of Kubernetes to describe the application. It contains a description of the container and manages its creation and takes care that the instance keeps running.</p>
<ol>
<li>
<p>Create a directory to store your deployment YAML files:</p>
<div class="highlight"><pre><span></span><code>mkdir<span class="w"> </span>deployment
</code></pre></div>
</li>
<li>
<p>Create a file <code>deployment/deployment.yaml</code> with the following contents:</p>
<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apps/v1</span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Deployment</span>
<span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">labels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
<span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
<span class="w"> </span><span class="nt">selector</span><span class="p">:</span>
<span class="w"> </span><span class="nt">matchLabels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
<span class="w"> </span><span class="nt">template</span><span class="p">:</span>
<span class="w"> </span><span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">labels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
<span class="w"> </span><span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">containers</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker-registry.{{CLUSTER_DOMAIN}}/cpapp</span>
<span class="w"> </span><span class="nt">imagePullPolicy</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Always</span>
<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4004</span>
</code></pre></div>
<p>The file contains a placeholder <code>{{CLUSER_DOMAIN}}</code> that you need to replace with your cluster's domain. Either in the file or replacing it when applying the file.</p>
<p>You can find your cluster's domain, for example, for the URL of the Kyma Console. If your console URL is for example <code>https://console.c-abcd123.kyma.shoot.live.k8s-hana.ondemand.com/</code>, the cluster's domain is <code>c-abcd123.kyma.shoot.live.k8s-hana.ondemand.com</code>, just without the leading <code>console.</code></p>
</li>
<li>
<p>Apply the new configuration:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>deployment/deployment.yaml
</code></pre></div>
<p>Or you can take it from the current <code>kubectl</code> configuration and replace it on deployment, like this:</p>
<div class="highlight"><pre><span></span><code>sed<span class="w"> </span>&lt;deployment/deployment.yaml<span class="w"> </span><span class="s2">&quot;s/{{CLUSTER_DOMAIN}}/</span><span class="k">$(</span>kubectl<span class="w"> </span>config<span class="w"> </span>current-context<span class="k">)</span><span class="s2">/&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>-
</code></pre></div>
</li>
<li>
<p>Check the state of the deployment using:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>get<span class="w"> </span>deployments
</code></pre></div>
<p>Initially, it looks like this:</p>
<div class="codehilite"><pre><span></span><code>```
NAME READY UP-TO-DATE AVAILABLE AGE
cpapp 0/1 1 0 5s
```
</code></pre></div>
<p>If all goes well, it turns to:</p>
<div class="codehilite"><pre><span></span><code>```
NAME READY UP-TO-DATE AVAILABLE AGE
cpapp 1/1 1 1 14m
```
</code></pre></div>
</li>
<li>
<p>Since you have not exposed the app to the public internet, you can only access it with a tunnel. So, lets create another tunnel:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>port-forward<span class="w"> </span>deployment/cpapp<span class="w"> </span><span class="m">4004</span>:4004
</code></pre></div>
</li>
<li>
<p>Open the CAP service in the browser at <a href="http://localhost:4004">http://localhost:4004</a>.</p>
<p>Your service is now running through kubernetes.</p>
</li>
<li>
<p>Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to stop the tunnel.</p>
</li>
</ol>
<h3 id="expose-cap-application-to-the-public-internet">Expose CAP Application to the Public Internet</h3>
<ol>
<li>
<p>Create a new file <code>deployment/apirule.yaml</code> with following content:</p>
<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Service</span>
<span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">labels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">service</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4004</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">http</span>
<span class="w"> </span><span class="nt">selector</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="nn">---</span>
<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gateway.kyma-project.io/v1alpha1</span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">APIRule</span>
<span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">labels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">service</span><span class="p">:</span>
<span class="w"> </span><span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4004</span>
<span class="w"> </span><span class="nt">gateway</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kyma-gateway.kyma-system.svc.cluster.local</span>
<span class="w"> </span><span class="nt">rules</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/.*</span>
<span class="w"> </span><span class="nt">methods</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">&quot;GET&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;PUT&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;POST&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;HEAD&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;PATCH&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;DELETE&quot;</span><span class="w"> </span><span class="p p-Indicator">]</span>
<span class="w"> </span><span class="nt">accessStrategies</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">handler</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">noop</span>
<span class="w"> </span><span class="nt">mutators</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[]</span>
</code></pre></div>
</li>
<li>
<p>Apply with:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>deployment/apirule.yaml
</code></pre></div>
</li>
<li>
<p>Look up your CAP service URL:</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;https://cpapp.</span><span class="k">$(</span>kubectl<span class="w"> </span>config<span class="w"> </span>current-context<span class="k">)</span><span class="s2">&quot;</span>
</code></pre></div>
<p>The console outputs your CAP service URL, for example <code>https://cpapp.example.kyma.live.k8s-hana.ondemand.com/</code>.</p>
</li>
<li>
<p>Check if you can access your service via your URL.</p>
<p>You can also add entries to the <strong>Risks</strong> application.</p>
</li>
</ol>
<h2 id="add-sap-hana-cloud">Add SAP HANA Cloud</h2>
<p>Your application runs on Kyma and is accessible from public internet now. Still, it works like the local development version (<code>cds watch</code>) without a real database persistence. In this step, you add support for SAP HANA. As already said, you need to provision it from Cloud Foundry and add the credentials manually.</p>
<p>To keep the latency between the CAP service and SAP HANA low, it makes sense to provision the SAP HANA Cloud database on the same SAP BTP region as the Kyma cluster. But to try it out you can also use an SAP HANA Cloud instance from your Trial account.</p>
<h3 id="prepare-cap-application-for-sap-hana-cloud">Prepare CAP Application for SAP HANA Cloud</h3>
<p>The <code>hdb</code> module needs to be added to your <code>package.json</code> to enable CAP to talk to an SAP HANA database.</p>
<ol>
<li>
<p>Install the <code>hdb</code> module:</p>
<div class="highlight"><pre><span></span><code>npm<span class="w"> </span>install<span class="w"> </span>--save<span class="w"> </span>hdb
</code></pre></div>
</li>
<li>
<p>Open the <code>package.json</code> file.</p>
</li>
<li>
<p>Add the following snippet for SAP HANA:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;cpapp&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="err">...</span>
<span class="w"> </span><span class="nt">&quot;cds&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;requires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;db&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;kind&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;sql&quot;</span>
<span class="w"> </span><span class="p">}</span>
<span class="hll"><span class="w"> </span><span class="p">},</span>
</span><span class="hll"><span class="w"> </span><span class="nt">&quot;hana&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span class="hll"><span class="w"> </span><span class="nt">&quot;deploy-format&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;hdbtable&quot;</span>
</span><span class="hll"><span class="w"> </span><span class="p">}</span>
</span><span class="hll"><span class="w"> </span><span class="p">}</span>
</span><span class="hll"><span class="w"> </span><span class="err">...</span>
</span><span class="hll"><span class="p">}</span>
</span></code></pre></div>
<p>With <code>requires.db.kind</code>: <code>sql</code> you tell CAP to use SQLite in development and SAP HANA in productive mode. The setting <code>hana.deploy-format</code>: <code>hdbtable</code> is required for SAP HANA Cloud since it supports only the <code>hdbtable</code> and <code>hdbview</code> files for deployment.</p>
</li>
<li>
<p>You now need to tell the CAP service to run in the productive mode. To do that, edit the <code>Dockerfile</code> and add the highlighted statement:</p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span><span class="w"> </span><span class="s">node:12-slim</span>
<span class="hll"><span class="k">ENV</span><span class="w"> </span><span class="nv">NODE_ENV</span><span class="o">=</span>production
</span><span class="k">WORKDIR</span><span class="w"> </span><span class="s">/usr/src/app</span>
<span class="k">COPY</span><span class="w"> </span>gen/srv<span class="w"> </span>.
<span class="k">RUN</span><span class="w"> </span>npm<span class="w"> </span>install
<span class="k">COPY</span><span class="w"> </span>app<span class="w"> </span>app/
<span class="k">RUN</span><span class="w"> </span>find<span class="w"> </span>app<span class="w"> </span>-name<span class="w"> </span><span class="s1">&#39;*.cds&#39;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>xargs<span class="w"> </span>rm<span class="w"> </span>-f
<span class="k">EXPOSE</span><span class="w"> </span><span class="s">4004</span>
<span class="k">USER</span><span class="w"> </span><span class="s">node</span>
<span class="k">CMD</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&quot;npm&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;start&quot;</span><span class="w"> </span><span class="p">]</span>
</code></pre></div>
</li>
<li>
<p>Rebuild the CAP project and the docker image for production:</p>
<div class="highlight"><pre><span></span><code>cds build --production
docker build -t 0.0.0.0:5000/cpapp .
docker push 0.0.0.0:5000/cpapp
</code></pre></div>
<p>The command <code>cds build</code> uses the <code>--production</code> argument to build the SAP HANA artifacts. <code>npm</code> and <code>node</code> uses the environment variable <code>NODE_ENV=production</code>. Without that CAP falls back to "development mode" settings and tries to use SQLite.</p>
</li>
</ol>
<h3 id="create-and-deploy-sap-hana-hdi-container">Create and Deploy SAP HANA HDI Container</h3>
<p>You use the <code>cds deploy</code> command to create an HDI container on Cloud Foundry and deploy the database schema to the container.</p>
<p>Make sure that you are logged in to a Cloud Foundry account where an SAP HANA Cloud instance and entitlement for the service plan <code>hana</code> <code>hdi-shared</code> is available or you use an SAP BTP Trial account, run:</p>
<ol>
<li>
<p>Set the Cloud Foundry API endpoint:</p>
<div class="highlight"><pre><span></span><code>cf<span class="w"> </span>api<span class="w"> </span>&lt;api-endpoint&gt;
</code></pre></div>
<p>You can find the API Endpoint URL in the overview page of your subaccount.</p>
</li>
<li>
<p>Log on to your Cloud Foundry account:</p>
<div class="highlight"><pre><span></span><code>cf<span class="w"> </span>login
</code></pre></div>
</li>
<li>
<p>Run the following line to create an HDI container:</p>
<div class="highlight"><pre><span></span><code>cds<span class="w"> </span>deploy<span class="w"> </span>--to<span class="w"> </span>hana:cpapp-kyma-db
</code></pre></div>
<p>The suffix <code>:cpapp-kyma-db</code> tells <code>cds deploy</code> to create an HDI container with name <code>cpapp-kyma-db</code>. It also creates a service key with the name <code>cpapp-kyma-db-key</code> that you use to access the database in the next section.</p>
<p>Then it deploys the database tables and the test content.</p>
<p>It should end with something like:</p>
<div class="highlight"><pre><span></span><code> Finalizing...
Finalizing... ok (0s 96ms)
Make succeeded (0 warnings): 14 files deployed (effective 22), 0 files undeployed (effective 0), 0 dependent files redeployed
Making... ok (1s 597ms)
Enabling table replication for the container schema &quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot;...
Enabling table replication for the container schema &quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot;... ok (0s 63ms)
Starting make in the container &quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot; with 14 files to deploy, 0 files to undeploy... ok (1s 756ms)
Deploying to the container &quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot;... ok (2s 211ms)
No default-access-role handling needed; global role &quot;C5DF44CB9C08482D821F5BC3BE344FCF::access_role&quot; will not be adapted
Unlocking the container &quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot;...
Unlocking the container &quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot;... ok (0s 0ms)
Deployment to container C5DF44CB9C08482D821F5BC3BE344FCF done [Deployment ID: none].
(4s 499ms)
Application can be stopped.
</code></pre></div>
<p>If it's missing, then there's probably a problem with the HDI deployer on your operating system. It can be worked around by putting the HDI deployer in a docker container as describe in the following section.</p>
</li>
</ol>
<h3 id="workaround-use-hdi-deployer-in-docker-container">Workaround: Use HDI Deployer in Docker Container</h3>
<p>Create a file <code>Dockerfile.hdi-deploy</code> with the following content:</p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span><span class="w"> </span><span class="s">node:12-slim</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="s">build</span>
<span class="k">ENV</span><span class="w"> </span><span class="nv">NODE_ENV</span><span class="o">=</span>production
<span class="k">WORKDIR</span><span class="w"> </span><span class="s">/usr/src/app</span>
<span class="k">RUN</span><span class="w"> </span>apt-get<span class="w"> </span>update
<span class="k">RUN</span><span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>openssl<span class="w"> </span>python<span class="w"> </span>make<span class="w"> </span>g++
<span class="k">COPY</span><span class="w"> </span>gen/db/package.json<span class="w"> </span>.
<span class="k">RUN</span><span class="w"> </span>npm<span class="w"> </span>install
<span class="k">COPY</span><span class="w"> </span>gen/db<span class="w"> </span>.
<span class="k">CMD</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&quot;npm&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;start&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--exit&quot;</span><span class="w"> </span><span class="p">]</span>
</code></pre></div>
<p>Execute the following commands and check if the output gets right this time:</p>
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>build<span class="w"> </span>-t<span class="w"> </span>cpapp-hdi-deployer<span class="w"> </span>-f<span class="w"> </span>Dockerfile.hdi-deploy<span class="w"> </span>.
docker<span class="w"> </span>run<span class="w"> </span>--rm<span class="w"> </span>--env<span class="w"> </span><span class="nv">VCAP_SERVICES</span><span class="o">=</span><span class="s1">&#39;{&quot;hana&quot;:[{&quot;credentials&quot;: &#39;</span><span class="s2">&quot;</span><span class="k">$(</span>cf<span class="w"> </span>service-key<span class="w"> </span>cpapp-kyma-db<span class="w"> </span>cpapp-kyma-db-key<span class="w"> </span><span class="p">|</span><span class="w"> </span>sed<span class="w"> </span>1d<span class="w"> </span><span class="k">)</span><span class="s2">&quot;</span><span class="s1">&#39;, &quot;name&quot;: &quot;hana&quot;,&quot;label&quot;:&quot;hana&quot;,&quot;plan&quot;:&quot;hdi-shared&quot;,&quot;tags&quot;:[&quot;hana&quot;]}]}&#39;</span><span class="w"> </span>-t<span class="w"> </span>cpapp-hdi-deployer
</code></pre></div>
<h3 id="add-sap-hana-hdi-container-credentials">Add SAP HANA HDI Container Credentials</h3>
<p>You need to somehow inject the SAP HANA credentials into the CAP application. On Cloud Foundry that is done using an environment variable called <code>VCAP_SERVICES</code> that takes the credentials for all bound services. Kubernetes takes a slightly different approach, it uses secrets, that can be injected into applications as environment variables. But as individual environment variables for each value. Luckily, CAP supports both.</p>
<p>On Kyma the service credentials for SAP HANA would look like this:</p>
<div class="highlight"><pre><span></span><code>driver=com.sap.db.jdbc.Driver
hdi_password=...
hdi_user=...
host=...hana.eu10.hanacloud.ondemand.com
password=...
port=443
schema=DE6922EF2F3449E984E2E794456B7CBE
url=jdbc:sap://...hana.eu10.hanacloud.ondemand.com:443?encrypt=true&amp;validateCertificate=true&amp;currentschema=DE6922EF2F3449E984E2E794456B7CBE
user=...
</code></pre></div>
<p>Since you need to take the SAP HANA credentials from Cloud Foundry, it’s easier to stick to the <code>VCAP_SERVICES</code> approach for now.</p>
<p>So, let's have a look at the credentials that have been created by <code>cds deploy</code>:</p>
<div class="highlight"><pre><span></span><code>cf<span class="w"> </span>service-key<span class="w"> </span>cpapp-kyma-db<span class="w"> </span>cpapp-kyma-db-key
</code></pre></div>
<p>The output looks like this:</p>
<div class="highlight"><pre><span></span><code><span class="err">Ge</span><span class="kc">tt</span><span class="err">i</span><span class="kc">n</span><span class="err">g</span><span class="w"> </span><span class="err">key</span><span class="w"> </span><span class="err">`cpapp</span><span class="mi">-</span><span class="err">kyma</span><span class="mi">-</span><span class="err">db</span><span class="mi">-</span><span class="err">key`</span><span class="w"> </span><span class="kc">f</span><span class="err">or</span><span class="w"> </span><span class="err">service</span><span class="w"> </span><span class="err">i</span><span class="kc">nstan</span><span class="err">ce</span><span class="w"> </span><span class="err">`cpapp</span><span class="mi">-</span><span class="err">kyma</span><span class="mi">-</span><span class="err">db`</span><span class="w"> </span><span class="err">as</span><span class="w"> </span><span class="err">MySel</span><span class="kc">f</span><span class="err">...</span>
<span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;certificate&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;-----BEGIN CERTIFICATE-----\n...\n...\n...\n-----END CERTIFICATE-----&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;driver&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;com.sap.db.jdbc.Driver&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;hdi_password&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;...&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;hdi_user&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;...&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;host&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;...hana.eu10.hanacloud.ondemand.com&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;password&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;...&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;port&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;443&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;schema&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;C5DF44CB9C08482D821F5BC3BE344FCF&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;jdbc:sap://...hana.eu10.hanacloud.ondemand.com:443?encrypt=true\u0026validateCertificate=true\u0026currentschema=C5DF44CB9C08482D821F5BC3BE344FCF&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;user&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;...&quot;</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="create-a-secret-for-sap-hana-hdi-container-credentials">Create a Secret for SAP HANA HDI Container Credentials</h2>
<p>As a first step, you need to upload the SAP HANA HDI container credentials from the Cloud Foundry service key to a Kubernetes secret.</p>
<p>You build the file <code>gen/hdi-secret.yaml</code> with the next steps.</p>
<ol>
<li>
<p>Create the file <code>gen/hdi-secret.yaml</code> with the following content:</p>
<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Secret</span>
<span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp-kyma-db-secret</span>
<span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">opaque</span>
<span class="nt">stringData</span><span class="p">:</span>
<span class="w"> </span><span class="nt">VCAP_SERVICES</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;</span>
<span class="w"> </span><span class="no">{</span>
<span class="w"> </span><span class="no">&quot;hana&quot;: [</span>
<span class="w"> </span><span class="no">{</span>
<span class="w"> </span><span class="no">&quot;binding_name&quot;: null,</span>
<span class="w"> </span><span class="no">&quot;credentials&quot;: {{CREDENTIALS}},</span>
<span class="w"> </span><span class="no">&quot;instance_name&quot;: &quot;hana&quot;,</span>
<span class="w"> </span><span class="no">&quot;label&quot;: &quot;hana&quot;,</span>
<span class="w"> </span><span class="no">&quot;name&quot;: &quot;hana&quot;,</span>
<span class="w"> </span><span class="no">&quot;plan&quot;: &quot;hdi-shared&quot;,</span>
<span class="w"> </span><span class="no">&quot;provider&quot;: null,</span>
<span class="w"> </span><span class="no">&quot;syslog_drain_url&quot;: null,</span>
<span class="w"> </span><span class="no">&quot;tags&quot;: [</span>
<span class="w"> </span><span class="no">&quot;hana&quot;,</span>
<span class="w"> </span><span class="no">&quot;database&quot;,</span>
<span class="w"> </span><span class="no">&quot;relational&quot;</span>
<span class="w"> </span><span class="no">],</span>
<span class="w"> </span><span class="no">&quot;volume_mounts&quot;: []</span>
<span class="w"> </span><span class="no">}</span>
<span class="w"> </span><span class="no">]</span>
<span class="w"> </span><span class="no">}</span>
</code></pre></div>
</li>
<li>
<p>Replace the <code>{{CREDENTIALS}}</code> variable:</p>
<ul>
<li>
<p>Option A:</p>
<ol>
<li>Replace <code>{{CREDENTIALS}}</code> with the JSON output of <code>cf service-key cpapp-kyma-db cpapp-kyma-db-key</code> (without the initial line).</li>
<li>Create the secret on Kubernetes:</li>
</ol>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>gen/hdi-secret.yaml
</code></pre></div>
</li>
<li>
<p>Option B:</p>
</li>
</ul>
<div class="highlight"><pre><span></span><code>node<span class="w"> </span>-e<span class="w"> </span><span class="s1">&#39;console.log(process.argv[1].replace(&quot;{{CREDENTIALS}}&quot;, process.argv[2]))&#39;</span><span class="w"> </span><span class="s2">&quot;</span><span class="k">$(</span>cat<span class="w"> </span>gen/hdi-secret.yaml<span class="k">)</span><span class="s2">&quot;</span><span class="w"> </span><span class="s2">&quot;</span><span class="k">$(</span>cf<span class="w"> </span>service-key<span class="w"> </span>cpapp-kyma-db<span class="w"> </span>cpapp-kyma-db-key<span class="w"> </span><span class="p">|</span><span class="w"> </span>sed<span class="w"> </span>1d<span class="w"> </span><span class="p">|</span><span class="w"> </span>sed<span class="w"> </span><span class="s1">&#39;s/^/ /&#39;</span><span class="k">)</span><span class="s2">&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>-
</code></pre></div>
</li>
<li>
<p>Look at your uploaded secret:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>describe<span class="w"> </span>secret<span class="w"> </span>cpapp-kyma-db-secret
</code></pre></div>
<p>It should be similar to the following output:</p>
<div class="highlight"><pre><span></span><code>NAME TYPE DATA AGE
Name: cpapp-kyma-db-secret
Namespace: docker-registry
Labels: &lt;none&gt;
Annotations:
Type: opaque
Data
====
VCAP_SERVICES: 2602 bytes
</code></pre></div>
</li>
</ol>
<h3 id="connect-the-cap-application-to-the-sap-hana-hdi-container">Connect the CAP Application to the SAP HANA HDI Container</h3>
<p>Now, you need to inject the secret's value as environment variables into your CAP application.</p>
<ol>
<li>
<p>Add the highlighted lines to your <code>deployment/deployment.yaml</code> file:</p>
<div class="highlight"><pre><span></span><code><span class="nn">...</span>
<span class="w"> </span><span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">containers</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp</span>
<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker-registry.{{CLUSTER_DOMAIN}}/cpapp</span>
<span class="w"> </span><span class="nt">imagePullPolicy</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Always</span>
<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4004</span>
<span class="hll"><span class="w"> </span><span class="nt">envFrom</span><span class="p">:</span>
</span><span class="hll"><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretRef</span><span class="p">:</span>
</span><span class="hll"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cpapp-kyma-db-secret</span>
</span></code></pre></div>
<p>This adds all name value pairs in the secret, currently only <code>VCAP_SERVICES</code>, as environment variables to the container of the deployment.</p>
</li>
<li>
<p>Update the Kubernetes cluster with the deployment file:</p>
<ul>
<li>Option A (if you replaced <code>{{CLUSTER_DOMAIN}}</code> in the <code>deployment/deployment.yaml</code> file):</li>
</ul>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>deployment/deployment.yaml
</code></pre></div>
<ul>
<li>Option B:</li>
</ul>
<div class="highlight"><pre><span></span><code>sed<span class="w"> </span>&lt;deployment/deployment.yaml<span class="w"> </span><span class="s2">&quot;s/{{CLUSTER_DOMAIN}}/</span><span class="k">$(</span>kubectl<span class="w"> </span>config<span class="w"> </span>current-context<span class="k">)</span><span class="s2">/&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span>-
</code></pre></div>
<p>Through the deployment, you see temporarily two pods. The old pod will be deleted after the new was launched.</p>
</li>
<li>
<p>Check the pods:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>get<span class="w"> </span>pods
</code></pre></div>
<p>Output:</p>
<div class="highlight"><pre><span></span><code>NAME READY STATUS RESTARTS AGE
cpapp-566fcb5f9b-8dfjb 2/2 Running 0 26m
cpapp-66b5cb4876-hx5l6 0/2 Init:0/1 0 2s
</code></pre></div>
<p>Rerun the command <code>kubectl get pods</code> until there’s only one <code>Running</code> pod for the application.</p>
</li>
<li>
<p>Get the URL of your application:</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;https://cpapp.</span><span class="k">$(</span>kubectl<span class="w"> </span>config<span class="w"> </span>current-context<span class="k">)</span><span class="s2">&quot;</span>
</code></pre></div>
</li>
<li>
<p>Open the URL to your application.</p>
<p>Now, you can create some entries in the <strong>Risks</strong> application, which are stored in the SAP HANA database.</p>
</li>
</ol>
<h2 id="summary">Summary</h2>
<p>In the tutorial, you’ve learned how to deploy a CAP application on Kyma. When the SAP HANA Cloud service is available for Kyma (Disclaimer: This isn’t an SAP product commitment), it will be much easier.</p>
<p>You can find the final code in the <a href="https://github.com/SAP-samples/cloud-cap-risk-management/tree/kyma/app">kyma/app</a> branch.</p>
<h2 id="troubleshooting">Troubleshooting</h2>
<h3 id="viewing-the-applications-log">Viewing the Application's Log</h3>
<p>You can use the following command to view the latest logs of your app:</p>
<div class="highlight"><pre><span></span><code>kubectl logs $(kubectl get pods -l app=cpapp -o jsonpath=&#39;{.items[0].metadata.name}&#39;) cpapp
</code></pre></div>
<p>The log-level of the CAP application can be increased, by adding the environment variable <code>DEBUG</code> to the <code>deployment/deployment.yaml</code> file and apply the file again with <code>kubectl</code>:</p>
<div class="highlight"><pre><span></span><code> env:
- name: DEBUG
value: &quot;y&quot;
</code></pre></div>
<p>Make sure that <code>env</code> has the same indent as <code>envFrom</code>.</p>
<h3 id="execute-commands-in-the-applications-container">Execute Commands in the Application's Container</h3>
<p>With the following command, you can "ssh" to your container and start a bash shell:</p>
<div class="highlight"><pre><span></span><code>kubectl exec $(kubectl get pods -l app=cpapp -o jsonpath=&#39;{.items[0].metadata.name}&#39;) -t -i /bin/bash
</code></pre></div>
<h2 id="teardown">Teardown</h2>
<p>If want to quickly delete all artifacts created in this tutorial, execute the following commands:</p>
<div class="highlight"><pre><span></span><code>cf<span class="w"> </span>delete-service-key<span class="w"> </span>cpapp-kyma-db<span class="w"> </span>cpapp-kyma-db-key<span class="w"> </span>-f
cf<span class="w"> </span>delete-service<span class="w"> </span>cpapp-kyma-db<span class="w"> </span>-f
<span class="k">for</span><span class="w"> </span>i<span class="w"> </span><span class="k">in</span><span class="w"> </span>deployment/*.yaml<span class="p">;</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span>kubectl<span class="w"> </span>delete<span class="w"> </span>-f<span class="w"> </span><span class="nv">$i</span>
<span class="k">done</span>
kubectl<span class="w"> </span>delete<span class="w"> </span>secret<span class="w"> </span>cpapp-kyma-db-secret
helm<span class="w"> </span>uninstall<span class="w"> </span>docker-registry
</code></pre></div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href=".." class="md-footer__link md-footer__link--prev" aria-label="Previous: Welcome" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Welcome
</div>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="../assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://github.com/SAP-samples/cloud-cap-risk-management/Tutorial-Overview/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>Tutorial Overview - SAP BTP Application Development</title>
<link rel="stylesheet" href="../assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL("..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#tutorial-overview" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Tutorial Overview
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Welcome
</a>
</li>
<li class="md-nav__item">
<a href="../Kyma/" class="md-nav__link">
Run a CAP Application on Kyma
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management/edit/master/docs/Tutorial-Overview.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
</a>
<h1 id="tutorial-overview">Tutorial Overview</h1>
<!-- external version -->
<p>The diagram shows the order and dependency of the different modules of this tutorial. Most modules are based on each other and you need to work through them in the given sequence.</p>
<div class="admonition info">
<p class="admonition-title">Click on the boxes to go directly to the first step of the module.</p>
</div>
<div class="mermaid">graph TD
1[Create a CAP Service and SAP Fiori UI] --&gt; 2[Deploy Your CAP Service&lt;br/&gt; on SAP BTP, Cloud Foundry environment]
click 1 "../Create-CAP-Application"
2[Deploy Your CAP Service&lt;br/&gt; on SAP BTP, Cloud Foundry environment]
click 2 "../Prepare-BTP"
1[Create a CAP Service and SAP Fiori UI] --&gt; 3[Run Your CAP Application &lt;br/&gt;on SAP BTP, Kyma runtime]
click 3 "../Kyma"
%% -- Formatting --
class 1,2,3,4 SAPcolors;
classDef SAPcolors fill:#008FD3,stroke:#008FD3, color:#fff, stroke-width:4px;
classDef SAPcolorsOptional fill:#CCC,stroke:#000, color:#000, stroke-width:2px, stroke-dasharray: 5 5;</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="../assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ar=function(){this.pipeline.reset(),this.pipeline.add(e.ar.trimmer,e.ar.stopWordFilter,e.ar.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ar.stemmer))},e.ar.wordCharacters="ء-ٛٱـ",e.ar.trimmer=e.trimmerSupport.generateTrimmer(e.ar.wordCharacters),e.Pipeline.registerFunction(e.ar.trimmer,"trimmer-ar"),e.ar.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ف ك ب و س ل ن ا ي ت",pre2:"ال لل",pre3:"بال وال فال تال كال ولل",pre4:"فبال كبال وبال وكال"},e.suf={suf1:"ه ك ت ن ا ي",suf2:"نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه",suf3:"تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها",suf4:"كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا"},e.patterns=JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'),e.execArray=["cleanWord","removeDiacritics","cleanAlef","removeStopWords","normalizeHamzaAndAlef","removeStartWaw","removePre432","removeEndTaa","wordCheck"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r<e.execArray.length&&1!=e.result;)e.result=e[e.execArray[r]](),r++},e.setCurrent=function(r){e.word=r},e.getCurrent=function(){return e.word},e.cleanWord=function(){var r=new RegExp("[^ء-ٛٱـ]");return e.word=e.word.replace("ـ",""),!!r.test("")},e.removeDiacritics=function(){new RegExp("[ً-ٛ]");return e.word=e.word.replace(/[\u064b-\u065b]/gi,""),!1},e.cleanAlef=function(){var r=new RegExp("[آأإٱى]");return e.word=e.word.replace(r,"ا"),!1},e.removeStopWords=function(){if("، اض امين اه اها اي ا اب اجل اجمع اخ اخذ اصبح اضحى اقبل اقل اكثر الا ام اما امامك امامك امسى اما ان انا انت انتم انتما انتن انت انشا انى او اوشك اولئك اولئكم اولاء اولالك اوه اي ايا اين اينما اي ان اي اف اذ اذا اذا اذما اذن الى اليكم اليكما اليكن اليك اليك الا اما ان انما اي اياك اياكم اياكما اياكن ايانا اياه اياها اياهم اياهما اياهن اياي ايه ان ا ابتدا اثر اجل احد اخرى اخلولق اذا اربعة ارتد استحال اطار اعادة اعلنت اف اكثر اكد الالاء الالى الا الاخيرة الان الاول الاولى التى التي الثاني الثانية الذاتي الذى الذي الذين السابق الف اللائي اللاتي اللتان اللتيا اللتين اللذان اللذين اللواتي الماضي المقبل الوقت الى اليوم اما امام امس ان انبرى انقلب انه انها او اول اي ايار ايام ايضا ب بات باسم بان بخ برس بسبب بس بشكل بضع بطان بعد بعض بك بكم بكما بكن بل بلى بما بماذا بمن بن بنا به بها بي بيد بين بس بله بئس تان تانك تبدل تجاه تحول تلقاء تلك تلكم تلكما تم تينك تين ته تي ثلاثة ثم ثم ثمة ثم جعل جلل جميع جير حار حاشا حاليا حاي حتى حرى حسب حم حوالى حول حيث حيثما حين حي حبذا حتى حذار خلا خلال دون دونك ذا ذات ذاك ذانك ذان ذلك ذلكم ذلكما ذلكن ذو ذوا ذواتا ذواتي ذيت ذينك ذين ذه ذي راح رجع رويدك ريث رب زيارة سبحان سرعان سنة سنوات سوف سوى ساء ساءما شبه شخصا شرع شتان صار صباح صفر صه صه ضد ضمن طاق طالما طفق طق ظل عاد عام عاما عامة عدا عدة عدد عدم عسى عشر عشرة علق على عليك عليه عليها عل عن عند عندما عوض عين عدس عما غدا غير ف فان فلان فو فى في فيم فيما فيه فيها قال قام قبل قد قط قلما قوة كانما كاين كاي كاين كاد كان كانت كذا كذلك كرب كل كلا كلاهما كلتا كلم كليكما كليهما كلما كلا كم كما كي كيت كيف كيفما كان كخ لئن لا لات لاسيما لدن لدى لعمر لقاء لك لكم لكما لكن لكنما لكي لكيلا للامم لم لما لما لن لنا له لها لو لوكالة لولا لوما لي لست لست لستم لستما لستن لست لسن لعل لكن ليت ليس ليسا ليستا ليست ليسوا لسنا ما ماانفك مابرح مادام ماذا مازال مافتئ مايو متى مثل مذ مساء مع معاذ مقابل مكانكم مكانكما مكانكن مكانك مليار مليون مما ممن من منذ منها مه مهما من من نحن نحو نعم نفس نفسه نهاية نخ نعما نعم ها هاؤم هاك هاهنا هب هذا هذه هكذا هل هلم هلا هم هما هن هنا هناك هنالك هو هي هيا هيت هيا هؤلاء هاتان هاتين هاته هاتي هج هذا هذان هذين هذه هذي هيهات و وا واحد واضاف واضافت واكد وان واها واوضح وراءك وفي وقال وقالت وقد وقف وكان وكانت ولا ولم ومن وهو وهي ويكان وي وشكان يكون يمكن يوم ايان".split(" ").indexOf(e.word)>=0)return!0},e.normalizeHamzaAndAlef=function(){return e.word=e.word.replace("ؤ","ء"),e.word=e.word.replace("ئ","ء"),e.word=e.word.replace(/([\u0627])\1+/gi,"ا"),!1},e.removeEndTaa=function(){return!(e.word.length>2)||(e.word=e.word.replace(/[\u0627]$/,""),e.word=e.word.replace("ة",""),!1)},e.removeStartWaw=function(){return e.word.length>3&&"و"==e.word[0]&&"و"==e.word[1]&&(e.word=e.word.slice(1)),!1},e.removePre432=function(){var r=e.word;if(e.word.length>=7){var t=new RegExp("^("+e.pre.pre4.split(" ").join("|")+")");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=6){var c=new RegExp("^("+e.pre.pre3.split(" ").join("|")+")");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=5){var l=new RegExp("^("+e.pre.pre2.split(" ").join("|")+")");e.word=e.word.replace(l,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.patternCheck=function(r){for(var t=0;t<r.length;t++){for(var c=!0,l=0;l<r[t].pt.length;l++){var o=r[t].pt[l].c.split(","),n=!1;if(o.forEach(function(c){e.word[r[t].pt[l].l]==c&&(n=!0)}),!n){c=!1;break}}if(1==c){if(r[t].mPt){for(var p=[],m=0;m<r[t].mPt.length;m++)null!=r[t].mPt[m].m?p[r[t].mPt[m].l]=e.word[r[t].mPt[m].m]:p[r[t].mPt[m].l]=r[t].mPt[m].c;e.word=p.join("")}e.result=!0;break}}},e.removePre1=function(){var r=e.word;if(0==e.preRemoved&&e.word.length>3){var t=new RegExp("^("+e.pre.pre1.split(" ").join("|")+")");e.word=e.word.replace(t,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.removeSuf1=function(){var r=e.word;if(0==e.sufRemoved&&e.word.length>3){var t=new RegExp("("+e.suf.suf1.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.removeSuf432=function(){var r=e.word;if(e.word.length>=6){var t=new RegExp("("+e.suf.suf4.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=5){var c=new RegExp("("+e.suf.suf3.split(" ").join("|")+")$");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=4){var l=new RegExp("("+e.suf.suf2.split(" ").join("|")+")$");e.word=e.word.replace(l,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.wordCheck=function(){for(var r=(e.word,[e.removeSuf432,e.removeSuf1,e.removePre1]),t=0,c=!1;e.word.length>=7&&!e.result&&t<r.length;)7!=e.word.length||c?(r[t](),t++,c=!1):(e.checkPattern73(),c=!0);var l=[e.checkPattern63,e.removeSuf432,e.removeSuf1,e.removePre1,e.checkPattern64];for(t=0;6==e.word.length&&!e.result&&t<l.length;)l[t](),t++;var o=[e.checkPattern53,e.removeSuf432,e.removeSuf1,e.removePre1,e.checkPattern54];for(t=0;5==e.word.length&&!e.result&&t<o.length;)o[t](),t++;var n=[e.checkPattern43,e.removeSuf1,e.removePre1,e.removeSuf432];for(t=0;4==e.word.length&&!e.result&&t<n.length;)n[t](),t++;return!0},e.checkPattern43=function(){e.patternCheck(e.patterns.pt43)},e.checkPattern53=function(){e.patternCheck(e.patterns.pt53)},e.checkPattern54=function(){e.patternCheck(e.patterns.pt54)},e.checkPattern63=function(){e.patternCheck(e.patterns.pt63)},e.checkPattern64=function(){e.patternCheck(e.patterns.pt64)},e.checkPattern73=function(){e.patternCheck(e.patterns.pt73)},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}}(),e.Pipeline.registerFunction(e.ar.stemmer,"stemmer-ar"),e.ar.stopWordFilter=e.generateStopWordFilter("، اض امين اه اها اي ا اب اجل اجمع اخ اخذ اصبح اضحى اقبل اقل اكثر الا ام اما امامك امامك امسى اما ان انا انت انتم انتما انتن انت انشا انى او اوشك اولئك اولئكم اولاء اولالك اوه اي ايا اين اينما اي ان اي اف اذ اذا اذا اذما اذن الى اليكم اليكما اليكن اليك اليك الا اما ان انما اي اياك اياكم اياكما اياكن ايانا اياه اياها اياهم اياهما اياهن اياي ايه ان ا ابتدا اثر اجل احد اخرى اخلولق اذا اربعة ارتد استحال اطار اعادة اعلنت اف اكثر اكد الالاء الالى الا الاخيرة الان الاول الاولى التى التي الثاني الثانية الذاتي الذى الذي الذين السابق الف اللائي اللاتي اللتان اللتيا اللتين اللذان اللذين اللواتي الماضي المقبل الوقت الى اليوم اما امام امس ان انبرى انقلب انه انها او اول اي ايار ايام ايضا ب بات باسم بان بخ برس بسبب بس بشكل بضع بطان بعد بعض بك بكم بكما بكن بل بلى بما بماذا بمن بن بنا به بها بي بيد بين بس بله بئس تان تانك تبدل تجاه تحول تلقاء تلك تلكم تلكما تم تينك تين ته تي ثلاثة ثم ثم ثمة ثم جعل جلل جميع جير حار حاشا حاليا حاي حتى حرى حسب حم حوالى حول حيث حيثما حين حي حبذا حتى حذار خلا خلال دون دونك ذا ذات ذاك ذانك ذان ذلك ذلكم ذلكما ذلكن ذو ذوا ذواتا ذواتي ذيت ذينك ذين ذه ذي راح رجع رويدك ريث رب زيارة سبحان سرعان سنة سنوات سوف سوى ساء ساءما شبه شخصا شرع شتان صار صباح صفر صه صه ضد ضمن طاق طالما طفق طق ظل عاد عام عاما عامة عدا عدة عدد عدم عسى عشر عشرة علق على عليك عليه عليها عل عن عند عندما عوض عين عدس عما غدا غير ف فان فلان فو فى في فيم فيما فيه فيها قال قام قبل قد قط قلما قوة كانما كاين كاي كاين كاد كان كانت كذا كذلك كرب كل كلا كلاهما كلتا كلم كليكما كليهما كلما كلا كم كما كي كيت كيف كيفما كان كخ لئن لا لات لاسيما لدن لدى لعمر لقاء لك لكم لكما لكن لكنما لكي لكيلا للامم لم لما لما لن لنا له لها لو لوكالة لولا لوما لي لست لست لستم لستما لستن لست لسن لعل لكن ليت ليس ليسا ليستا ليست ليسوا لسنا ما ماانفك مابرح مادام ماذا مازال مافتئ مايو متى مثل مذ مساء مع معاذ مقابل مكانكم مكانكما مكانكن مكانك مليار مليون مما ممن من منذ منها مه مهما من من نحن نحو نعم نفس نفسه نهاية نخ نعما نعم ها هاؤم هاك هاهنا هب هذا هذه هكذا هل هلم هلا هم هما هن هنا هناك هنالك هو هي هيا هيت هيا هؤلاء هاتان هاتين هاته هاتي هج هذا هذان هذين هذه هذي هيهات وا واحد واضاف واضافت واكد وان واها واوضح وراءك وفي وقال وقالت وقد وقف وكان وكانت ولا ولم ومن وهو وهي ويكان وي وشكان يكون يمكن يوم ايان".split(" ")),e.Pipeline.registerFunction(e.ar.stopWordFilter,"stopWordFilter-ar")}});
\ No newline at end of file
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
\ No newline at end of file
/*!
* Lunr languages, `German` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m<d&&(m=d),s()||(l=v.cursor)))}function o(){for(var e,r;;){if(r=v.cursor,v.bra=r,!(e=v.find_among(h,6)))return;switch(v.ket=v.cursor,e){case 1:v.slice_from("y");break;case 2:case 5:v.slice_from("u");break;case 3:v.slice_from("a");break;case 4:v.slice_from("o");break;case 6:if(v.cursor>=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}});
\ No newline at end of file
/*!
* Lunr languages, `Dutch` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}});
\ No newline at end of file
/*!
* Lunr languages, `Spanish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=function(){var s=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(){if(A.out_grouping(x,97,252)){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}return!0}function n(){if(A.in_grouping(x,97,252)){var s=A.cursor;if(e()){if(A.cursor=s,!A.in_grouping(x,97,252))return!0;for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}}return!1}return!0}function i(){var s,r=A.cursor;if(n()){if(A.cursor=r,!A.out_grouping(x,97,252))return;if(s=A.cursor,e()){if(A.cursor=s,!A.in_grouping(x,97,252)||A.cursor>=A.limit)return;A.cursor++}}g=A.cursor}function a(){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}return!0}function t(){var e=A.cursor;g=A.limit,p=g,v=g,i(),A.cursor=e,a()&&(p=A.cursor,a()&&(v=A.cursor))}function o(){for(var e;;){if(A.bra=A.cursor,e=A.find_among(k,6))switch(A.ket=A.cursor,e){case 1:A.slice_from("a");continue;case 2:A.slice_from("e");continue;case 3:A.slice_from("i");continue;case 4:A.slice_from("o");continue;case 5:A.slice_from("u");continue;case 6:if(A.cursor>=A.limit)break;A.cursor++;continue}break}}function u(){return g<=A.cursor}function w(){return p<=A.cursor}function c(){return v<=A.cursor}function m(){var e;if(A.ket=A.cursor,A.find_among_b(y,13)&&(A.bra=A.cursor,(e=A.find_among_b(q,11))&&u()))switch(e){case 1:A.bra=A.cursor,A.slice_from("iendo");break;case 2:A.bra=A.cursor,A.slice_from("ando");break;case 3:A.bra=A.cursor,A.slice_from("ar");break;case 4:A.bra=A.cursor,A.slice_from("er");break;case 5:A.bra=A.cursor,A.slice_from("ir");break;case 6:A.slice_del();break;case 7:A.eq_s_b(1,"u")&&A.slice_del()}}function l(e,s){if(!c())return!0;A.slice_del(),A.ket=A.cursor;var r=A.find_among_b(e,s);return r&&(A.bra=A.cursor,1==r&&c()&&A.slice_del()),!1}function d(e){return!c()||(A.slice_del(),A.ket=A.cursor,A.eq_s_b(2,e)&&(A.bra=A.cursor,c()&&A.slice_del()),!1)}function b(){var e;if(A.ket=A.cursor,e=A.find_among_b(S,46)){switch(A.bra=A.cursor,e){case 1:if(!c())return!1;A.slice_del();break;case 2:if(d("ic"))return!1;break;case 3:if(!c())return!1;A.slice_from("log");break;case 4:if(!c())return!1;A.slice_from("u");break;case 5:if(!c())return!1;A.slice_from("ente");break;case 6:if(!w())return!1;A.slice_del(),A.ket=A.cursor,e=A.find_among_b(C,4),e&&(A.bra=A.cursor,c()&&(A.slice_del(),1==e&&(A.ket=A.cursor,A.eq_s_b(2,"at")&&(A.bra=A.cursor,c()&&A.slice_del()))));break;case 7:if(l(P,3))return!1;break;case 8:if(l(F,3))return!1;break;case 9:if(d("at"))return!1}return!0}return!1}function f(){var e,s;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(W,12),A.limit_backward=s,e)){if(A.bra=A.cursor,1==e){if(!A.eq_s_b(1,"u"))return!1;A.slice_del()}return!0}return!1}function _(){var e,s,r,n;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(L,96),A.limit_backward=s,e))switch(A.bra=A.cursor,e){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"u")?(n=A.limit-A.cursor,A.eq_s_b(1,"g")?A.cursor=A.limit-n:A.cursor=A.limit-r):A.cursor=A.limit-r,A.bra=A.cursor;case 2:A.slice_del()}}function h(){var e,s;if(A.ket=A.cursor,e=A.find_among_b(z,8))switch(A.bra=A.cursor,e){case 1:u()&&A.slice_del();break;case 2:u()&&(A.slice_del(),A.ket=A.cursor,A.eq_s_b(1,"u")&&(A.bra=A.cursor,s=A.limit-A.cursor,A.eq_s_b(1,"g")&&(A.cursor=A.limit-s,u()&&A.slice_del())))}}var v,p,g,k=[new s("",-1,6),new s("á",0,1),new s("é",0,2),new s("í",0,3),new s("ó",0,4),new s("ú",0,5)],y=[new s("la",-1,-1),new s("sela",0,-1),new s("le",-1,-1),new s("me",-1,-1),new s("se",-1,-1),new s("lo",-1,-1),new s("selo",5,-1),new s("las",-1,-1),new s("selas",7,-1),new s("les",-1,-1),new s("los",-1,-1),new s("selos",10,-1),new s("nos",-1,-1)],q=[new s("ando",-1,6),new s("iendo",-1,6),new s("yendo",-1,7),new s("ándo",-1,2),new s("iéndo",-1,1),new s("ar",-1,6),new s("er",-1,6),new s("ir",-1,6),new s("ár",-1,3),new s("ér",-1,4),new s("ír",-1,5)],C=[new s("ic",-1,-1),new s("ad",-1,-1),new s("os",-1,-1),new s("iv",-1,1)],P=[new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,1)],F=[new s("ic",-1,1),new s("abil",-1,1),new s("iv",-1,1)],S=[new s("ica",-1,1),new s("ancia",-1,2),new s("encia",-1,5),new s("adora",-1,2),new s("osa",-1,1),new s("ista",-1,1),new s("iva",-1,9),new s("anza",-1,1),new s("logía",-1,3),new s("idad",-1,8),new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,2),new s("mente",-1,7),new s("amente",13,6),new s("ación",-1,2),new s("ución",-1,4),new s("ico",-1,1),new s("ismo",-1,1),new s("oso",-1,1),new s("amiento",-1,1),new s("imiento",-1,1),new s("ivo",-1,9),new s("ador",-1,2),new s("icas",-1,1),new s("ancias",-1,2),new s("encias",-1,5),new s("adoras",-1,2),new s("osas",-1,1),new s("istas",-1,1),new s("ivas",-1,9),new s("anzas",-1,1),new s("logías",-1,3),new s("idades",-1,8),new s("ables",-1,1),new s("ibles",-1,1),new s("aciones",-1,2),new s("uciones",-1,4),new s("adores",-1,2),new s("antes",-1,2),new s("icos",-1,1),new s("ismos",-1,1),new s("osos",-1,1),new s("amientos",-1,1),new s("imientos",-1,1),new s("ivos",-1,9)],W=[new s("ya",-1,1),new s("ye",-1,1),new s("yan",-1,1),new s("yen",-1,1),new s("yeron",-1,1),new s("yendo",-1,1),new s("yo",-1,1),new s("yas",-1,1),new s("yes",-1,1),new s("yais",-1,1),new s("yamos",-1,1),new s("yó",-1,1)],L=[new s("aba",-1,2),new s("ada",-1,2),new s("ida",-1,2),new s("ara",-1,2),new s("iera",-1,2),new s("ía",-1,2),new s("aría",5,2),new s("ería",5,2),new s("iría",5,2),new s("ad",-1,2),new s("ed",-1,2),new s("id",-1,2),new s("ase",-1,2),new s("iese",-1,2),new s("aste",-1,2),new s("iste",-1,2),new s("an",-1,2),new s("aban",16,2),new s("aran",16,2),new s("ieran",16,2),new s("ían",16,2),new s("arían",20,2),new s("erían",20,2),new s("irían",20,2),new s("en",-1,1),new s("asen",24,2),new s("iesen",24,2),new s("aron",-1,2),new s("ieron",-1,2),new s("arán",-1,2),new s("erán",-1,2),new s("irán",-1,2),new s("ado",-1,2),new s("ido",-1,2),new s("ando",-1,2),new s("iendo",-1,2),new s("ar",-1,2),new s("er",-1,2),new s("ir",-1,2),new s("as",-1,2),new s("abas",39,2),new s("adas",39,2),new s("idas",39,2),new s("aras",39,2),new s("ieras",39,2),new s("ías",39,2),new s("arías",45,2),new s("erías",45,2),new s("irías",45,2),new s("es",-1,1),new s("ases",49,2),new s("ieses",49,2),new s("abais",-1,2),new s("arais",-1,2),new s("ierais",-1,2),new s("íais",-1,2),new s("aríais",55,2),new s("eríais",55,2),new s("iríais",55,2),new s("aseis",-1,2),new s("ieseis",-1,2),new s("asteis",-1,2),new s("isteis",-1,2),new s("áis",-1,2),new s("éis",-1,1),new s("aréis",64,2),new s("eréis",64,2),new s("iréis",64,2),new s("ados",-1,2),new s("idos",-1,2),new s("amos",-1,2),new s("ábamos",70,2),new s("áramos",70,2),new s("iéramos",70,2),new s("íamos",70,2),new s("aríamos",74,2),new s("eríamos",74,2),new s("iríamos",74,2),new s("emos",-1,1),new s("aremos",78,2),new s("eremos",78,2),new s("iremos",78,2),new s("ásemos",78,2),new s("iésemos",78,2),new s("imos",-1,2),new s("arás",-1,2),new s("erás",-1,2),new s("irás",-1,2),new s("ís",-1,2),new s("ará",-1,2),new s("erá",-1,2),new s("irá",-1,2),new s("aré",-1,2),new s("eré",-1,2),new s("iré",-1,2),new s("ió",-1,2)],z=[new s("a",-1,1),new s("e",-1,2),new s("o",-1,1),new s("os",-1,1),new s("á",-1,1),new s("é",-1,2),new s("í",-1,1),new s("ó",-1,1)],x=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],A=new r;this.setCurrent=function(e){A.setCurrent(e)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return t(),A.limit_backward=e,A.cursor=A.limit,m(),A.cursor=A.limit,b()||(A.cursor=A.limit,f()||(A.cursor=A.limit,_())),A.cursor=A.limit,h(),A.cursor=A.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}});
\ No newline at end of file
/*!
* Lunr languages, `Finnish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=function(){var e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){function i(){f=A.limit,d=f,n()||(f=A.cursor,n()||(d=A.cursor))}function n(){for(var i;;){if(i=A.cursor,A.in_grouping(W,97,246))break;if(A.cursor=i,i>=A.limit)return!0;A.cursor++}for(A.cursor=i;!A.out_grouping(W,97,246);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}function t(){return d<=A.cursor}function s(){var i,e;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(h,10)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.in_grouping_b(x,97,246))return;break;case 2:if(!t())return}A.slice_del()}else A.limit_backward=e}function o(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(v,9))switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"k")||(A.cursor=A.limit-r,A.slice_del());break;case 2:A.slice_del(),A.ket=A.cursor,A.eq_s_b(3,"kse")&&(A.bra=A.cursor,A.slice_from("ksi"));break;case 3:A.slice_del();break;case 4:A.find_among_b(p,6)&&A.slice_del();break;case 5:A.find_among_b(g,6)&&A.slice_del();break;case 6:A.find_among_b(j,2)&&A.slice_del()}else A.limit_backward=e}function l(){return A.find_among_b(q,7)}function a(){return A.eq_s_b(1,"i")&&A.in_grouping_b(L,97,246)}function u(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(C,30)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.eq_s_b(1,"a"))return;break;case 2:case 9:if(!A.eq_s_b(1,"e"))return;break;case 3:if(!A.eq_s_b(1,"i"))return;break;case 4:if(!A.eq_s_b(1,"o"))return;break;case 5:if(!A.eq_s_b(1,"ä"))return;break;case 6:if(!A.eq_s_b(1,"ö"))return;break;case 7:if(r=A.limit-A.cursor,!l()&&(A.cursor=A.limit-r,!A.eq_s_b(2,"ie"))){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward){A.cursor=A.limit-r;break}A.cursor--,A.bra=A.cursor;break;case 8:if(!A.in_grouping_b(W,97,246)||!A.out_grouping_b(W,97,246))return}A.slice_del(),k=!0}else A.limit_backward=e}function c(){var i,e,r;if(A.cursor>=d)if(e=A.limit_backward,A.limit_backward=d,A.ket=A.cursor,i=A.find_among_b(P,14)){if(A.bra=A.cursor,A.limit_backward=e,1==i){if(r=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-r}A.slice_del()}else A.limit_backward=e}function m(){var i;A.cursor>=f&&(i=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.find_among_b(F,2)?(A.bra=A.cursor,A.limit_backward=i,A.slice_del()):A.limit_backward=i)}function w(){var i,e,r,n,t,s;if(A.cursor>=f){if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.eq_s_b(1,"t")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.in_grouping_b(W,97,246)&&(A.cursor=A.limit-r,A.slice_del(),A.limit_backward=e,n=A.limit-A.cursor,A.cursor>=d&&(A.cursor=d,t=A.limit_backward,A.limit_backward=A.cursor,A.cursor=A.limit-n,A.ket=A.cursor,i=A.find_among_b(S,2))))){if(A.bra=A.cursor,A.limit_backward=t,1==i){if(s=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-s}return void A.slice_del()}A.limit_backward=e}}function _(){var i,e,r,n;if(A.cursor>=f){for(i=A.limit_backward,A.limit_backward=f,e=A.limit-A.cursor,l()&&(A.cursor=A.limit-e,A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.in_grouping_b(y,97,228)&&(A.bra=A.cursor,A.out_grouping_b(W,97,246)&&A.slice_del()),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"j")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.eq_s_b(1,"o")?A.slice_del():(A.cursor=A.limit-r,A.eq_s_b(1,"u")&&A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"o")&&(A.bra=A.cursor,A.eq_s_b(1,"j")&&A.slice_del()),A.cursor=A.limit-e,A.limit_backward=i;;){if(n=A.limit-A.cursor,A.out_grouping_b(W,97,246)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return;A.cursor--}A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,b=A.slice_to(),A.eq_v_b(b)&&A.slice_del())}}var k,b,d,f,h=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],p=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],g=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],j=[new e("lle",-1,-1),new e("ine",-1,-1)],v=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],q=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],C=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,a),new e("seen",11,-1,l),new e("hen",11,2),new e("tten",11,-1,a),new e("hin",11,3),new e("siin",11,-1,a),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],P=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],F=[new e("i",-1,-1),new e("j",-1,-1)],S=[new e("mma",-1,1),new e("imma",0,-1)],y=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],W=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],x=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],A=new r;this.setCurrent=function(i){A.setCurrent(i)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return i(),k=!1,A.limit_backward=e,A.cursor=A.limit,s(),A.cursor=A.limit,o(),A.cursor=A.limit,u(),A.cursor=A.limit,c(),A.cursor=A.limit,k?(m(),A.cursor=A.limit):(A.cursor=A.limit,w(),A.cursor=A.limit),_(),!0}};return function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}}(),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}});
\ No newline at end of file
/*!
* Lunr languages, `French` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,s){return!(!W.eq_s(1,e)||(W.ket=W.cursor,!W.in_grouping(F,97,251)))&&(W.slice_from(r),W.cursor=s,!0)}function i(e,r,s){return!!W.eq_s(1,e)&&(W.ket=W.cursor,W.slice_from(r),W.cursor=s,!0)}function n(){for(var r,s;;){if(r=W.cursor,W.in_grouping(F,97,251)){if(W.bra=W.cursor,s=W.cursor,e("u","U",r))continue;if(W.cursor=s,e("i","I",r))continue;if(W.cursor=s,i("y","Y",r))continue}if(W.cursor=r,W.bra=r,!e("y","Y",r)){if(W.cursor=r,W.eq_s(1,"q")&&(W.bra=W.cursor,i("u","U",r)))continue;if(W.cursor=r,r>=W.limit)return;W.cursor++}}}function t(){for(;!W.in_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}for(;!W.out_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}return!1}function u(){var e=W.cursor;if(q=W.limit,g=q,p=q,W.in_grouping(F,97,251)&&W.in_grouping(F,97,251)&&W.cursor<W.limit)W.cursor++;else if(W.cursor=e,!W.find_among(v,3)){W.cursor=e;do{if(W.cursor>=W.limit){W.cursor=q;break}W.cursor++}while(!W.in_grouping(F,97,251))}q=W.cursor,W.cursor=e,t()||(g=W.cursor,t()||(p=W.cursor))}function o(){for(var e,r;;){if(r=W.cursor,W.bra=r,!(e=W.find_among(h,4)))break;switch(W.ket=W.cursor,e){case 1:W.slice_from("i");break;case 2:W.slice_from("u");break;case 3:W.slice_from("y");break;case 4:if(W.cursor>=W.limit)return;W.cursor++}}}function c(){return q<=W.cursor}function a(){return g<=W.cursor}function l(){return p<=W.cursor}function w(){var e,r;if(W.ket=W.cursor,e=W.find_among_b(C,43)){switch(W.bra=W.cursor,e){case 1:if(!l())return!1;W.slice_del();break;case 2:if(!l())return!1;W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")&&(W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU"));break;case 3:if(!l())return!1;W.slice_from("log");break;case 4:if(!l())return!1;W.slice_from("u");break;case 5:if(!l())return!1;W.slice_from("ent");break;case 6:if(!c())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(z,6))switch(W.bra=W.cursor,e){case 1:l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&W.slice_del()));break;case 2:l()?W.slice_del():a()&&W.slice_from("eux");break;case 3:l()&&W.slice_del();break;case 4:c()&&W.slice_from("i")}break;case 7:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(y,3))switch(W.bra=W.cursor,e){case 1:l()?W.slice_del():W.slice_from("abl");break;case 2:l()?W.slice_del():W.slice_from("iqU");break;case 3:l()&&W.slice_del()}break;case 8:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")))){W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU");break}break;case 9:W.slice_from("eau");break;case 10:if(!a())return!1;W.slice_from("al");break;case 11:if(l())W.slice_del();else{if(!a())return!1;W.slice_from("eux")}break;case 12:if(!a()||!W.out_grouping_b(F,97,251))return!1;W.slice_del();break;case 13:return c()&&W.slice_from("ant"),!1;case 14:return c()&&W.slice_from("ent"),!1;case 15:return r=W.limit-W.cursor,W.in_grouping_b(F,97,251)&&c()&&(W.cursor=W.limit-r,W.slice_del()),!1}return!0}return!1}function f(){var e,r;if(W.cursor<q)return!1;if(r=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,!(e=W.find_among_b(x,35)))return W.limit_backward=r,!1;if(W.bra=W.cursor,1==e){if(!W.out_grouping_b(F,97,251))return W.limit_backward=r,!1;W.slice_del()}return W.limit_backward=r,!0}function m(){var e,r,s;if(W.cursor<q)return!1;if(r=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,!(e=W.find_among_b(I,38)))return W.limit_backward=r,!1;switch(W.bra=W.cursor,e){case 1:if(!l())return W.limit_backward=r,!1;W.slice_del();break;case 2:W.slice_del();break;case 3:W.slice_del(),s=W.limit-W.cursor,W.ket=W.cursor,W.eq_s_b(1,"e")?(W.bra=W.cursor,W.slice_del()):W.cursor=W.limit-s}return W.limit_backward=r,!0}function _(){var e,r,s,i,n=W.limit-W.cursor;if(W.ket=W.cursor,W.eq_s_b(1,"s")?(W.bra=W.cursor,r=W.limit-W.cursor,W.out_grouping_b(S,97,232)?(W.cursor=W.limit-r,W.slice_del()):W.cursor=W.limit-n):W.cursor=W.limit-n,W.cursor>=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}});
\ No newline at end of file
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});
\ No newline at end of file
/*!
* Lunr languages, `Hungarian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e<L.limit&&L.cursor++),void(d=L.cursor);if(L.cursor=e,e>=L.limit)return void(d=e);L.cursor++}if(L.cursor=n,L.out_grouping(W,97,252)){for(;!L.in_grouping(W,97,252);){if(L.cursor>=L.limit)return;L.cursor++}d=L.cursor}}function i(){return d<=L.cursor}function a(){var e;if(L.ket=L.cursor,(e=L.find_among_b(h,2))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e")}}function t(){var e=L.limit-L.cursor;return!!L.find_among_b(p,23)&&(L.cursor=L.limit-e,!0)}function s(){if(L.cursor>L.limit_backward){L.cursor--,L.ket=L.cursor;var e=L.cursor-1;L.limit_backward<=e&&e<=L.limit&&(L.cursor=e,L.bra=e,L.slice_del())}}function c(){var e;if(L.ket=L.cursor,(e=L.find_among_b(_,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function o(){L.ket=L.cursor,L.find_among_b(v,44)&&(L.bra=L.cursor,i()&&(L.slice_del(),a()))}function w(){var e;if(L.ket=L.cursor,(e=L.find_among_b(z,3))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("e");break;case 2:case 3:L.slice_from("a")}}function l(){var e;if(L.ket=L.cursor,(e=L.find_among_b(y,6))&&(L.bra=L.cursor,i()))switch(e){case 1:case 2:L.slice_del();break;case 3:L.slice_from("a");break;case 4:L.slice_from("e")}}function u(){var e;if(L.ket=L.cursor,(e=L.find_among_b(j,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function m(){var e;if(L.ket=L.cursor,(e=L.find_among_b(C,7))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:L.slice_del()}}function k(){var e;if(L.ket=L.cursor,(e=L.find_among_b(P,12))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 9:L.slice_del();break;case 2:case 5:case 8:L.slice_from("e");break;case 3:case 6:L.slice_from("a")}}function f(){var e;if(L.ket=L.cursor,(e=L.find_among_b(F,31))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:L.slice_del();break;case 2:case 5:case 10:case 14:case 19:L.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:L.slice_from("e")}}function b(){var e;if(L.ket=L.cursor,(e=L.find_among_b(S,42))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:L.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:L.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:L.slice_from("e")}}var d,g=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],h=[new n("á",-1,1),new n("é",-1,2)],p=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],_=[new n("al",-1,1),new n("el",-1,2)],v=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],z=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],y=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],j=[new n("á",-1,1),new n("é",-1,2)],C=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],P=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],F=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],S=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var n=L.cursor;return e(),L.limit_backward=n,L.cursor=L.limit,c(),L.cursor=L.limit,o(),L.cursor=L.limit,w(),L.cursor=L.limit,l(),L.cursor=L.limit,u(),L.cursor=L.limit,k(),L.cursor=L.limit,f(),L.cursor=L.limit,b(),L.cursor=L.limit,m(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}});
\ No newline at end of file
/*!
* Lunr languages, `Italian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!x.eq_s(1,e)||(x.ket=x.cursor,!x.in_grouping(L,97,249)))&&(x.slice_from(r),x.cursor=n,!0)}function i(){for(var r,n,i,o,t=x.cursor;;){if(x.bra=x.cursor,r=x.find_among(h,7))switch(x.ket=x.cursor,r){case 1:x.slice_from("à");continue;case 2:x.slice_from("è");continue;case 3:x.slice_from("ì");continue;case 4:x.slice_from("ò");continue;case 5:x.slice_from("ù");continue;case 6:x.slice_from("qU");continue;case 7:if(x.cursor>=x.limit)break;x.cursor++;continue}break}for(x.cursor=t;;)for(n=x.cursor;;){if(i=x.cursor,x.in_grouping(L,97,249)){if(x.bra=x.cursor,o=x.cursor,e("u","U",i))break;if(x.cursor=o,e("i","I",i))break}if(x.cursor=i,x.cursor>=x.limit)return void(x.cursor=n);x.cursor++}}function o(e){if(x.cursor=e,!x.in_grouping(L,97,249))return!1;for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function t(){if(x.in_grouping(L,97,249)){var e=x.cursor;if(x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return o(e);x.cursor++}return!0}return o(e)}return!1}function s(){var e,r=x.cursor;if(!t()){if(x.cursor=r,!x.out_grouping(L,97,249))return;if(e=x.cursor,x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return x.cursor=e,void(x.in_grouping(L,97,249)&&x.cursor<x.limit&&x.cursor++);x.cursor++}return void(k=x.cursor)}if(x.cursor=e,!x.in_grouping(L,97,249)||x.cursor>=x.limit)return;x.cursor++}k=x.cursor}function a(){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function u(){var e=x.cursor;k=x.limit,p=k,g=k,s(),x.cursor=e,a()&&(p=x.cursor,a()&&(g=x.cursor))}function c(){for(var e;;){if(x.bra=x.cursor,!(e=x.find_among(q,3)))break;switch(x.ket=x.cursor,e){case 1:x.slice_from("i");break;case 2:x.slice_from("u");break;case 3:if(x.cursor>=x.limit)return;x.cursor++}}}function w(){return k<=x.cursor}function l(){return p<=x.cursor}function m(){return g<=x.cursor}function f(){var e;if(x.ket=x.cursor,x.find_among_b(C,37)&&(x.bra=x.cursor,(e=x.find_among_b(z,5))&&w()))switch(e){case 1:x.slice_del();break;case 2:x.slice_from("e")}}function v(){var e;if(x.ket=x.cursor,!(e=x.find_among_b(S,51)))return!1;switch(x.bra=x.cursor,e){case 1:if(!m())return!1;x.slice_del();break;case 2:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del());break;case 3:if(!m())return!1;x.slice_from("log");break;case 4:if(!m())return!1;x.slice_from("u");break;case 5:if(!m())return!1;x.slice_from("ente");break;case 6:if(!w())return!1;x.slice_del();break;case 7:if(!l())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(P,4),e&&(x.bra=x.cursor,m()&&(x.slice_del(),1==e&&(x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&x.slice_del()))));break;case 8:if(!m())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(F,3),e&&(x.bra=x.cursor,1==e&&m()&&x.slice_del());break;case 9:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del())))}return!0}function b(){var e,r;x.cursor>=k&&(r=x.limit_backward,x.limit_backward=k,x.ket=x.cursor,e=x.find_among_b(W,87),e&&(x.bra=x.cursor,1==e&&x.slice_del()),x.limit_backward=r)}function d(){var e=x.limit-x.cursor;if(x.ket=x.cursor,x.in_grouping_b(y,97,242)&&(x.bra=x.cursor,w()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(1,"i")&&(x.bra=x.cursor,w()))))return void x.slice_del();x.cursor=x.limit-e}function _(){d(),x.ket=x.cursor,x.eq_s_b(1,"h")&&(x.bra=x.cursor,x.in_grouping_b(U,99,103)&&w()&&x.slice_del())}var g,p,k,h=[new r("",-1,7),new r("qu",0,6),new r("á",0,1),new r("é",0,2),new r("í",0,3),new r("ó",0,4),new r("ú",0,5)],q=[new r("",-1,3),new r("I",0,1),new r("U",0,2)],C=[new r("la",-1,-1),new r("cela",0,-1),new r("gliela",0,-1),new r("mela",0,-1),new r("tela",0,-1),new r("vela",0,-1),new r("le",-1,-1),new r("cele",6,-1),new r("gliele",6,-1),new r("mele",6,-1),new r("tele",6,-1),new r("vele",6,-1),new r("ne",-1,-1),new r("cene",12,-1),new r("gliene",12,-1),new r("mene",12,-1),new r("sene",12,-1),new r("tene",12,-1),new r("vene",12,-1),new r("ci",-1,-1),new r("li",-1,-1),new r("celi",20,-1),new r("glieli",20,-1),new r("meli",20,-1),new r("teli",20,-1),new r("veli",20,-1),new r("gli",20,-1),new r("mi",-1,-1),new r("si",-1,-1),new r("ti",-1,-1),new r("vi",-1,-1),new r("lo",-1,-1),new r("celo",31,-1),new r("glielo",31,-1),new r("melo",31,-1),new r("telo",31,-1),new r("velo",31,-1)],z=[new r("ando",-1,1),new r("endo",-1,1),new r("ar",-1,2),new r("er",-1,2),new r("ir",-1,2)],P=[new r("ic",-1,-1),new r("abil",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],F=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],S=[new r("ica",-1,1),new r("logia",-1,3),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,9),new r("anza",-1,1),new r("enza",-1,5),new r("ice",-1,1),new r("atrice",7,1),new r("iche",-1,1),new r("logie",-1,3),new r("abile",-1,1),new r("ibile",-1,1),new r("usione",-1,4),new r("azione",-1,2),new r("uzione",-1,4),new r("atore",-1,2),new r("ose",-1,1),new r("ante",-1,1),new r("mente",-1,1),new r("amente",19,7),new r("iste",-1,1),new r("ive",-1,9),new r("anze",-1,1),new r("enze",-1,5),new r("ici",-1,1),new r("atrici",25,1),new r("ichi",-1,1),new r("abili",-1,1),new r("ibili",-1,1),new r("ismi",-1,1),new r("usioni",-1,4),new r("azioni",-1,2),new r("uzioni",-1,4),new r("atori",-1,2),new r("osi",-1,1),new r("anti",-1,1),new r("amenti",-1,6),new r("imenti",-1,6),new r("isti",-1,1),new r("ivi",-1,9),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,6),new r("imento",-1,6),new r("ivo",-1,9),new r("ità",-1,8),new r("istà",-1,1),new r("istè",-1,1),new r("istì",-1,1)],W=[new r("isca",-1,1),new r("enda",-1,1),new r("ata",-1,1),new r("ita",-1,1),new r("uta",-1,1),new r("ava",-1,1),new r("eva",-1,1),new r("iva",-1,1),new r("erebbe",-1,1),new r("irebbe",-1,1),new r("isce",-1,1),new r("ende",-1,1),new r("are",-1,1),new r("ere",-1,1),new r("ire",-1,1),new r("asse",-1,1),new r("ate",-1,1),new r("avate",16,1),new r("evate",16,1),new r("ivate",16,1),new r("ete",-1,1),new r("erete",20,1),new r("irete",20,1),new r("ite",-1,1),new r("ereste",-1,1),new r("ireste",-1,1),new r("ute",-1,1),new r("erai",-1,1),new r("irai",-1,1),new r("isci",-1,1),new r("endi",-1,1),new r("erei",-1,1),new r("irei",-1,1),new r("assi",-1,1),new r("ati",-1,1),new r("iti",-1,1),new r("eresti",-1,1),new r("iresti",-1,1),new r("uti",-1,1),new r("avi",-1,1),new r("evi",-1,1),new r("ivi",-1,1),new r("isco",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("Yamo",-1,1),new r("iamo",-1,1),new r("avamo",-1,1),new r("evamo",-1,1),new r("ivamo",-1,1),new r("eremo",-1,1),new r("iremo",-1,1),new r("assimo",-1,1),new r("ammo",-1,1),new r("emmo",-1,1),new r("eremmo",54,1),new r("iremmo",54,1),new r("immo",-1,1),new r("ano",-1,1),new r("iscano",58,1),new r("avano",58,1),new r("evano",58,1),new r("ivano",58,1),new r("eranno",-1,1),new r("iranno",-1,1),new r("ono",-1,1),new r("iscono",65,1),new r("arono",65,1),new r("erono",65,1),new r("irono",65,1),new r("erebbero",-1,1),new r("irebbero",-1,1),new r("assero",-1,1),new r("essero",-1,1),new r("issero",-1,1),new r("ato",-1,1),new r("ito",-1,1),new r("uto",-1,1),new r("avo",-1,1),new r("evo",-1,1),new r("ivo",-1,1),new r("ar",-1,1),new r("ir",-1,1),new r("erà",-1,1),new r("irà",-1,1),new r("erò",-1,1),new r("irò",-1,1)],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],y=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],U=[17],x=new n;this.setCurrent=function(e){x.setCurrent(e)},this.getCurrent=function(){return x.getCurrent()},this.stem=function(){var e=x.cursor;return i(),x.cursor=e,u(),x.limit_backward=e,x.cursor=x.limit,f(),x.cursor=x.limit,v()||(x.cursor=x.limit,b()),x.cursor=x.limit,_(),x.cursor=x.limit_backward,c(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}});
\ No newline at end of file
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});
\ No newline at end of file
module.exports=require("./lunr.ja");
\ No newline at end of file
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});
\ No newline at end of file
/*!
* Lunr languages, `Dutch` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(r,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.nl=function(){this.pipeline.reset(),this.pipeline.add(r.nl.trimmer,r.nl.stopWordFilter,r.nl.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.nl.stemmer))},r.nl.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.nl.trimmer=r.trimmerSupport.generateTrimmer(r.nl.wordCharacters),r.Pipeline.registerFunction(r.nl.trimmer,"trimmer-nl"),r.nl.stemmer=function(){var e=r.stemmerSupport.Among,i=r.stemmerSupport.SnowballProgram,n=new function(){function r(){for(var r,e,i,o=C.cursor;;){if(C.bra=C.cursor,r=C.find_among(b,11))switch(C.ket=C.cursor,r){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}});
\ No newline at end of file
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
\ No newline at end of file
/*!
* Lunr languages, `Portuguese` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}});
\ No newline at end of file
/*!
* Lunr languages, `Romanian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor<L.limit&&L.cursor++),h=L.cursor)}function u(){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!1;L.cursor++}for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!1;L.cursor++}return!0}function c(){var e=L.cursor;h=L.limit,k=h,g=h,o(),L.cursor=e,u()&&(k=L.cursor,u()&&(g=L.cursor))}function s(){for(var e;;){if(L.bra=L.cursor,e=L.find_among(z,3))switch(L.ket=L.cursor,e){case 1:L.slice_from("i");continue;case 2:L.slice_from("u");continue;case 3:if(L.cursor>=L.limit)break;L.cursor++;continue}break}}function w(){return h<=L.cursor}function m(){return k<=L.cursor}function l(){return g<=L.cursor}function f(){var e,i;if(L.ket=L.cursor,(e=L.find_among_b(C,16))&&(L.bra=L.cursor,m()))switch(e){case 1:L.slice_del();break;case 2:L.slice_from("a");break;case 3:L.slice_from("e");break;case 4:L.slice_from("i");break;case 5:i=L.limit-L.cursor,L.eq_s_b(2,"ab")||(L.cursor=L.limit-i,L.slice_from("i"));break;case 6:L.slice_from("at");break;case 7:L.slice_from("aţi")}}function p(){var e,i=L.limit-L.cursor;if(L.ket=L.cursor,(e=L.find_among_b(P,46))&&(L.bra=L.cursor,m())){switch(e){case 1:L.slice_from("abil");break;case 2:L.slice_from("ibil");break;case 3:L.slice_from("iv");break;case 4:L.slice_from("ic");break;case 5:L.slice_from("at");break;case 6:L.slice_from("it")}return _=!0,L.cursor=L.limit-i,!0}return!1}function d(){var e,i;for(_=!1;;)if(i=L.limit-L.cursor,!p()){L.cursor=L.limit-i;break}if(L.ket=L.cursor,(e=L.find_among_b(F,62))&&(L.bra=L.cursor,l())){switch(e){case 1:L.slice_del();break;case 2:L.eq_s_b(1,"ţ")&&(L.bra=L.cursor,L.slice_from("t"));break;case 3:L.slice_from("ist")}_=!0}}function b(){var e,i,r;if(L.cursor>=h){if(i=L.limit_backward,L.limit_backward=h,L.ket=L.cursor,e=L.find_among_b(q,94))switch(L.bra=L.cursor,e){case 1:if(r=L.limit-L.cursor,!L.out_grouping_b(W,97,259)&&(L.cursor=L.limit-r,!L.eq_s_b(1,"u")))break;case 2:L.slice_del()}L.limit_backward=i}}function v(){var e;L.ket=L.cursor,(e=L.find_among_b(S,5))&&(L.bra=L.cursor,w()&&1==e&&L.slice_del())}var _,g,k,h,z=[new i("",-1,3),new i("I",0,1),new i("U",0,2)],C=[new i("ea",-1,3),new i("aţia",-1,7),new i("aua",-1,2),new i("iua",-1,4),new i("aţie",-1,7),new i("ele",-1,3),new i("ile",-1,5),new i("iile",6,4),new i("iei",-1,4),new i("atei",-1,6),new i("ii",-1,4),new i("ului",-1,1),new i("ul",-1,1),new i("elor",-1,3),new i("ilor",-1,4),new i("iilor",14,4)],P=[new i("icala",-1,4),new i("iciva",-1,4),new i("ativa",-1,5),new i("itiva",-1,6),new i("icale",-1,4),new i("aţiune",-1,5),new i("iţiune",-1,6),new i("atoare",-1,5),new i("itoare",-1,6),new i("ătoare",-1,5),new i("icitate",-1,4),new i("abilitate",-1,1),new i("ibilitate",-1,2),new i("ivitate",-1,3),new i("icive",-1,4),new i("ative",-1,5),new i("itive",-1,6),new i("icali",-1,4),new i("atori",-1,5),new i("icatori",18,4),new i("itori",-1,6),new i("ători",-1,5),new i("icitati",-1,4),new i("abilitati",-1,1),new i("ivitati",-1,3),new i("icivi",-1,4),new i("ativi",-1,5),new i("itivi",-1,6),new i("icităi",-1,4),new i("abilităi",-1,1),new i("ivităi",-1,3),new i("icităţi",-1,4),new i("abilităţi",-1,1),new i("ivităţi",-1,3),new i("ical",-1,4),new i("ator",-1,5),new i("icator",35,4),new i("itor",-1,6),new i("ător",-1,5),new i("iciv",-1,4),new i("ativ",-1,5),new i("itiv",-1,6),new i("icală",-1,4),new i("icivă",-1,4),new i("ativă",-1,5),new i("itivă",-1,6)],F=[new i("ica",-1,1),new i("abila",-1,1),new i("ibila",-1,1),new i("oasa",-1,1),new i("ata",-1,1),new i("ita",-1,1),new i("anta",-1,1),new i("ista",-1,3),new i("uta",-1,1),new i("iva",-1,1),new i("ic",-1,1),new i("ice",-1,1),new i("abile",-1,1),new i("ibile",-1,1),new i("isme",-1,3),new i("iune",-1,2),new i("oase",-1,1),new i("ate",-1,1),new i("itate",17,1),new i("ite",-1,1),new i("ante",-1,1),new i("iste",-1,3),new i("ute",-1,1),new i("ive",-1,1),new i("ici",-1,1),new i("abili",-1,1),new i("ibili",-1,1),new i("iuni",-1,2),new i("atori",-1,1),new i("osi",-1,1),new i("ati",-1,1),new i("itati",30,1),new i("iti",-1,1),new i("anti",-1,1),new i("isti",-1,3),new i("uti",-1,1),new i("işti",-1,3),new i("ivi",-1,1),new i("ităi",-1,1),new i("oşi",-1,1),new i("ităţi",-1,1),new i("abil",-1,1),new i("ibil",-1,1),new i("ism",-1,3),new i("ator",-1,1),new i("os",-1,1),new i("at",-1,1),new i("it",-1,1),new i("ant",-1,1),new i("ist",-1,3),new i("ut",-1,1),new i("iv",-1,1),new i("ică",-1,1),new i("abilă",-1,1),new i("ibilă",-1,1),new i("oasă",-1,1),new i("ată",-1,1),new i("ită",-1,1),new i("antă",-1,1),new i("istă",-1,3),new i("ută",-1,1),new i("ivă",-1,1)],q=[new i("ea",-1,1),new i("ia",-1,1),new i("esc",-1,1),new i("ăsc",-1,1),new i("ind",-1,1),new i("ând",-1,1),new i("are",-1,1),new i("ere",-1,1),new i("ire",-1,1),new i("âre",-1,1),new i("se",-1,2),new i("ase",10,1),new i("sese",10,2),new i("ise",10,1),new i("use",10,1),new i("âse",10,1),new i("eşte",-1,1),new i("ăşte",-1,1),new i("eze",-1,1),new i("ai",-1,1),new i("eai",19,1),new i("iai",19,1),new i("sei",-1,2),new i("eşti",-1,1),new i("ăşti",-1,1),new i("ui",-1,1),new i("ezi",-1,1),new i("âi",-1,1),new i("aşi",-1,1),new i("seşi",-1,2),new i("aseşi",29,1),new i("seseşi",29,2),new i("iseşi",29,1),new i("useşi",29,1),new i("âseşi",29,1),new i("işi",-1,1),new i("uşi",-1,1),new i("âşi",-1,1),new i("aţi",-1,2),new i("eaţi",38,1),new i("iaţi",38,1),new i("eţi",-1,2),new i("iţi",-1,2),new i("âţi",-1,2),new i("arăţi",-1,1),new i("serăţi",-1,2),new i("aserăţi",45,1),new i("seserăţi",45,2),new i("iserăţi",45,1),new i("userăţi",45,1),new i("âserăţi",45,1),new i("irăţi",-1,1),new i("urăţi",-1,1),new i("ârăţi",-1,1),new i("am",-1,1),new i("eam",54,1),new i("iam",54,1),new i("em",-1,2),new i("asem",57,1),new i("sesem",57,2),new i("isem",57,1),new i("usem",57,1),new i("âsem",57,1),new i("im",-1,2),new i("âm",-1,2),new i("ăm",-1,2),new i("arăm",65,1),new i("serăm",65,2),new i("aserăm",67,1),new i("seserăm",67,2),new i("iserăm",67,1),new i("userăm",67,1),new i("âserăm",67,1),new i("irăm",65,1),new i("urăm",65,1),new i("ârăm",65,1),new i("au",-1,1),new i("eau",76,1),new i("iau",76,1),new i("indu",-1,1),new i("ându",-1,1),new i("ez",-1,1),new i("ească",-1,1),new i("ară",-1,1),new i("seră",-1,2),new i("aseră",84,1),new i("seseră",84,2),new i("iseră",84,1),new i("useră",84,1),new i("âseră",84,1),new i("iră",-1,1),new i("ură",-1,1),new i("âră",-1,1),new i("ează",-1,1)],S=[new i("a",-1,1),new i("e",-1,1),new i("ie",1,1),new i("i",-1,1),new i("ă",-1,1)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var e=L.cursor;return n(),L.cursor=e,c(),L.limit_backward=e,L.cursor=L.limit,f(),L.cursor=L.limit,d(),L.cursor=L.limit,_||(L.cursor=L.limit,b(),L.cursor=L.limit),v(),L.cursor=L.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}});
\ No newline at end of file
/*!
* Lunr languages, `Russian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor<b)&&(W.limit_backward=b,o()||(W.cursor=W.limit,f()||(W.cursor=W.limit),m()||(W.cursor=W.limit,l()||(W.cursor=W.limit,a()))),W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"и")?(W.bra=W.cursor,W.slice_del()):W.cursor=W.limit,p(),W.cursor=W.limit,d(),!0)}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.ru.stemmer,"stemmer-ru"),e.ru.stopWordFilter=e.generateStopWordFilter("алло без близко более больше будем будет будете будешь будто буду будут будь бы бывает бывь был была были было быть в важная важное важные важный вам вами вас ваш ваша ваше ваши вверх вдали вдруг ведь везде весь вниз внизу во вокруг вон восемнадцатый восемнадцать восемь восьмой вот впрочем времени время все всегда всего всем всеми всему всех всею всю всюду вся всё второй вы г где говорил говорит год года году да давно даже далеко дальше даром два двадцатый двадцать две двенадцатый двенадцать двух девятнадцатый девятнадцать девятый девять действительно дел день десятый десять для до довольно долго должно другая другие других друго другое другой е его ее ей ему если есть еще ещё ею её ж же жизнь за занят занята занято заняты затем зато зачем здесь значит и из или им именно иметь ими имя иногда их к каждая каждое каждые каждый кажется как какая какой кем когда кого ком кому конечно которая которого которой которые который которых кроме кругом кто куда лет ли лишь лучше люди м мало между меля менее меньше меня миллионов мимо мира мне много многочисленная многочисленное многочисленные многочисленный мной мною мог могут мож может можно можхо мои мой мор мочь моя моё мы на наверху над надо назад наиболее наконец нам нами нас начала наш наша наше наши не него недавно недалеко нее ней нельзя нем немного нему непрерывно нередко несколько нет нею неё ни нибудь ниже низко никогда никуда ними них ничего но ну нужно нх о об оба обычно один одиннадцатый одиннадцать однажды однако одного одной около он она они оно опять особенно от отовсюду отсюда очень первый перед по под пожалуйста позже пока пор пора после посреди потом потому почему почти прекрасно при про просто против процентов пятнадцатый пятнадцать пятый пять раз разве рано раньше рядом с сам сама сами самим самими самих само самого самой самом самому саму свое своего своей свои своих свою сеаой себе себя сегодня седьмой сейчас семнадцатый семнадцать семь сих сказал сказала сказать сколько слишком сначала снова со собой собою совсем спасибо стал суть т та так такая также такие такое такой там твой твоя твоё те тебе тебя тем теми теперь тех то тобой тобою тогда того тоже только том тому тот тою третий три тринадцатый тринадцать ту туда тут ты тысяч у уж уже уметь хорошо хотеть хоть хотя хочешь часто чаще чего человек чем чему через четвертый четыре четырнадцатый четырнадцать что чтоб чтобы чуть шестнадцатый шестнадцать шестой шесть эта эти этим этими этих это этого этой этом этому этот эту я \ufeffа".split(" ")),e.Pipeline.registerFunction(e.ru.stopWordFilter,"stopWordFilter-ru")}});
\ No newline at end of file
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
\ No newline at end of file
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
\ No newline at end of file
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}});
\ No newline at end of file
/*!
* Lunr languages, `Turkish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=function(){var i=r.stemmerSupport.Among,e=r.stemmerSupport.SnowballProgram,n=new function(){function r(r,i,e){for(;;){var n=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(r,i,e)){Dr.cursor=Dr.limit-n;break}if(Dr.cursor=Dr.limit-n,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function n(){var i,e;i=Dr.limit-Dr.cursor,r(Wr,97,305);for(var n=0;n<Br.length;n++){e=Dr.limit-Dr.cursor;var t=Br[n];if(Dr.eq_s_b(1,t[0])&&r(t[1],t[2],t[3]))return Dr.cursor=Dr.limit-i,!0;Dr.cursor=Dr.limit-e}return Dr.cursor=Dr.limit-e,!(!Dr.eq_s_b(1,"ü")||!r(Zr,246,252))&&(Dr.cursor=Dr.limit-i,!0)}function t(r,i){var e,n=Dr.limit-Dr.cursor;return r()&&(Dr.cursor=Dr.limit-n,Dr.cursor>Dr.limit_backward&&(Dr.cursor--,e=Dr.limit-Dr.cursor,i()))?(Dr.cursor=Dr.limit-e,!0):(Dr.cursor=Dr.limit-n,r()?(Dr.cursor=Dr.limit-n,!1):(Dr.cursor=Dr.limit-n,!(Dr.cursor<=Dr.limit_backward)&&(Dr.cursor--,!!i()&&(Dr.cursor=Dr.limit-n,!0))))}function u(r){return t(r,function(){return Dr.in_grouping_b(Wr,97,305)})}function o(){return u(function(){return Dr.eq_s_b(1,"n")})}function s(){return u(function(){return Dr.eq_s_b(1,"s")})}function c(){return u(function(){return Dr.eq_s_b(1,"y")})}function l(){return t(function(){return Dr.in_grouping_b(Lr,105,305)},function(){return Dr.out_grouping_b(Wr,97,305)})}function a(){return Dr.find_among_b(ur,10)&&l()}function m(){return n()&&Dr.in_grouping_b(Lr,105,305)&&s()}function d(){return Dr.find_among_b(or,2)}function f(){return n()&&Dr.in_grouping_b(Lr,105,305)&&c()}function b(){return n()&&Dr.find_among_b(sr,4)}function w(){return n()&&Dr.find_among_b(cr,4)&&o()}function _(){return n()&&Dr.find_among_b(lr,2)&&c()}function k(){return n()&&Dr.find_among_b(ar,2)}function p(){return n()&&Dr.find_among_b(mr,4)}function g(){return n()&&Dr.find_among_b(dr,2)}function y(){return n()&&Dr.find_among_b(fr,4)}function z(){return n()&&Dr.find_among_b(br,2)}function v(){return n()&&Dr.find_among_b(wr,2)&&c()}function h(){return Dr.eq_s_b(2,"ki")}function q(){return n()&&Dr.find_among_b(_r,2)&&o()}function C(){return n()&&Dr.find_among_b(kr,4)&&c()}function P(){return n()&&Dr.find_among_b(pr,4)}function F(){return n()&&Dr.find_among_b(gr,4)&&c()}function S(){return Dr.find_among_b(yr,4)}function W(){return n()&&Dr.find_among_b(zr,2)}function L(){return n()&&Dr.find_among_b(vr,4)}function x(){return n()&&Dr.find_among_b(hr,8)}function A(){return Dr.find_among_b(qr,2)}function E(){return n()&&Dr.find_among_b(Cr,32)&&c()}function j(){return Dr.find_among_b(Pr,8)&&c()}function T(){return n()&&Dr.find_among_b(Fr,4)&&c()}function Z(){return Dr.eq_s_b(3,"ken")&&c()}function B(){var r=Dr.limit-Dr.cursor;return!(T()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,Z()))))}function D(){if(A()){var r=Dr.limit-Dr.cursor;if(S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T())return!1}return!0}function G(){if(W()){Dr.bra=Dr.cursor,Dr.slice_del();var r=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,x()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,T()||(Dr.cursor=Dr.limit-r)))),nr=!1,!1}return!0}function H(){if(!L())return!0;var r=Dr.limit-Dr.cursor;return!E()&&(Dr.cursor=Dr.limit-r,!j())}function I(){var r,i=Dr.limit-Dr.cursor;return!(S()||(Dr.cursor=Dr.limit-i,F()||(Dr.cursor=Dr.limit-i,P()||(Dr.cursor=Dr.limit-i,C()))))||(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,T()||(Dr.cursor=Dr.limit-r),!1)}function J(){var r,i=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,nr=!0,B()&&(Dr.cursor=Dr.limit-i,D()&&(Dr.cursor=Dr.limit-i,G()&&(Dr.cursor=Dr.limit-i,H()&&(Dr.cursor=Dr.limit-i,I()))))){if(Dr.cursor=Dr.limit-i,!x())return;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T()||(Dr.cursor=Dr.limit-r)}Dr.bra=Dr.cursor,Dr.slice_del()}function K(){var r,i,e,n;if(Dr.ket=Dr.cursor,h()){if(r=Dr.limit-Dr.cursor,p())return Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,a()&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))),!0;if(Dr.cursor=Dr.limit-r,w()){if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,e=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-e,!m()&&(Dr.cursor=Dr.limit-e,!K())))return!0;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}return!0}if(Dr.cursor=Dr.limit-r,g()){if(n=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-n,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-n,!K())return!1;return!0}}return!1}function M(r){if(Dr.ket=Dr.cursor,!g()&&(Dr.cursor=Dr.limit-r,!k()))return!1;var i=Dr.limit-Dr.cursor;if(d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-i,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-i,!K())return!1;return!0}function N(r){if(Dr.ket=Dr.cursor,!z()&&(Dr.cursor=Dr.limit-r,!b()))return!1;var i=Dr.limit-Dr.cursor;return!(!m()&&(Dr.cursor=Dr.limit-i,!d()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)}function O(){var r,i=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,!(!w()&&(Dr.cursor=Dr.limit-i,!v()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,!(!W()||(Dr.bra=Dr.cursor,Dr.slice_del(),!K()))||(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!(a()||(Dr.cursor=Dr.limit-r,m()||(Dr.cursor=Dr.limit-r,K())))||(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)))}function Q(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,!p()&&(Dr.cursor=Dr.limit-e,!f()&&(Dr.cursor=Dr.limit-e,!_())))return!1;if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,a())Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()||(Dr.cursor=Dr.limit-i);else if(Dr.cursor=Dr.limit-r,!W())return!0;return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,K(),!0}function R(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,W())return Dr.bra=Dr.cursor,Dr.slice_del(),void K();if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,q())if(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-r,!m())){if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!W())return;if(Dr.bra=Dr.cursor,Dr.slice_del(),!K())return}Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}else if(Dr.cursor=Dr.limit-e,!M(e)&&(Dr.cursor=Dr.limit-e,!N(e))){if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,y())return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,i=Dr.limit-Dr.cursor,void(a()?(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())):(Dr.cursor=Dr.limit-i,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,K())));if(Dr.cursor=Dr.limit-e,!O()){if(Dr.cursor=Dr.limit-e,d())return Dr.bra=Dr.cursor,void Dr.slice_del();Dr.cursor=Dr.limit-e,K()||(Dr.cursor=Dr.limit-e,Q()||(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,(a()||(Dr.cursor=Dr.limit-e,m()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))))}}}function U(){var r;if(Dr.ket=Dr.cursor,r=Dr.find_among_b(Sr,4))switch(Dr.bra=Dr.cursor,r){case 1:Dr.slice_from("p");break;case 2:Dr.slice_from("ç");break;case 3:Dr.slice_from("t");break;case 4:Dr.slice_from("k")}}function V(){for(;;){var r=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(Wr,97,305)){Dr.cursor=Dr.limit-r;break}if(Dr.cursor=Dr.limit-r,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function X(r,i,e){if(Dr.cursor=Dr.limit-r,V()){var n=Dr.limit-Dr.cursor;if(!Dr.eq_s_b(1,i)&&(Dr.cursor=Dr.limit-n,!Dr.eq_s_b(1,e)))return!0;Dr.cursor=Dr.limit-r;var t=Dr.cursor;return Dr.insert(Dr.cursor,Dr.cursor,e),Dr.cursor=t,!1}return!0}function Y(){var r=Dr.limit-Dr.cursor;(Dr.eq_s_b(1,"d")||(Dr.cursor=Dr.limit-r,Dr.eq_s_b(1,"g")))&&X(r,"a","ı")&&X(r,"e","i")&&X(r,"o","u")&&X(r,"ö","ü")}function $(){for(var r,i=Dr.cursor,e=2;;){for(r=Dr.cursor;!Dr.in_grouping(Wr,97,305);){if(Dr.cursor>=Dr.limit)return Dr.cursor=r,!(e>0)&&(Dr.cursor=i,!0);Dr.cursor++}e--}}function rr(r,i,e){for(;!Dr.eq_s(i,e);){if(Dr.cursor>=Dr.limit)return!0;Dr.cursor++}return(tr=i)!=Dr.limit||(Dr.cursor=r,!1)}function ir(){var r=Dr.cursor;return!rr(r,2,"ad")||(Dr.cursor=r,!rr(r,5,"soyad"))}function er(){var r=Dr.cursor;return!ir()&&(Dr.limit_backward=r,Dr.cursor=Dr.limit,Y(),Dr.cursor=Dr.limit,U(),!0)}var nr,tr,ur=[new i("m",-1,-1),new i("n",-1,-1),new i("miz",-1,-1),new i("niz",-1,-1),new i("muz",-1,-1),new i("nuz",-1,-1),new i("müz",-1,-1),new i("nüz",-1,-1),new i("mız",-1,-1),new i("nız",-1,-1)],or=[new i("leri",-1,-1),new i("ları",-1,-1)],sr=[new i("ni",-1,-1),new i("nu",-1,-1),new i("nü",-1,-1),new i("nı",-1,-1)],cr=[new i("in",-1,-1),new i("un",-1,-1),new i("ün",-1,-1),new i("ın",-1,-1)],lr=[new i("a",-1,-1),new i("e",-1,-1)],ar=[new i("na",-1,-1),new i("ne",-1,-1)],mr=[new i("da",-1,-1),new i("ta",-1,-1),new i("de",-1,-1),new i("te",-1,-1)],dr=[new i("nda",-1,-1),new i("nde",-1,-1)],fr=[new i("dan",-1,-1),new i("tan",-1,-1),new i("den",-1,-1),new i("ten",-1,-1)],br=[new i("ndan",-1,-1),new i("nden",-1,-1)],wr=[new i("la",-1,-1),new i("le",-1,-1)],_r=[new i("ca",-1,-1),new i("ce",-1,-1)],kr=[new i("im",-1,-1),new i("um",-1,-1),new i("üm",-1,-1),new i("ım",-1,-1)],pr=[new i("sin",-1,-1),new i("sun",-1,-1),new i("sün",-1,-1),new i("sın",-1,-1)],gr=[new i("iz",-1,-1),new i("uz",-1,-1),new i("üz",-1,-1),new i("ız",-1,-1)],yr=[new i("siniz",-1,-1),new i("sunuz",-1,-1),new i("sünüz",-1,-1),new i("sınız",-1,-1)],zr=[new i("lar",-1,-1),new i("ler",-1,-1)],vr=[new i("niz",-1,-1),new i("nuz",-1,-1),new i("nüz",-1,-1),new i("nız",-1,-1)],hr=[new i("dir",-1,-1),new i("tir",-1,-1),new i("dur",-1,-1),new i("tur",-1,-1),new i("dür",-1,-1),new i("tür",-1,-1),new i("dır",-1,-1),new i("tır",-1,-1)],qr=[new i("casına",-1,-1),new i("cesine",-1,-1)],Cr=[new i("di",-1,-1),new i("ti",-1,-1),new i("dik",-1,-1),new i("tik",-1,-1),new i("duk",-1,-1),new i("tuk",-1,-1),new i("dük",-1,-1),new i("tük",-1,-1),new i("dık",-1,-1),new i("tık",-1,-1),new i("dim",-1,-1),new i("tim",-1,-1),new i("dum",-1,-1),new i("tum",-1,-1),new i("düm",-1,-1),new i("tüm",-1,-1),new i("dım",-1,-1),new i("tım",-1,-1),new i("din",-1,-1),new i("tin",-1,-1),new i("dun",-1,-1),new i("tun",-1,-1),new i("dün",-1,-1),new i("tün",-1,-1),new i("dın",-1,-1),new i("tın",-1,-1),new i("du",-1,-1),new i("tu",-1,-1),new i("dü",-1,-1),new i("tü",-1,-1),new i("dı",-1,-1),new i("tı",-1,-1)],Pr=[new i("sa",-1,-1),new i("se",-1,-1),new i("sak",-1,-1),new i("sek",-1,-1),new i("sam",-1,-1),new i("sem",-1,-1),new i("san",-1,-1),new i("sen",-1,-1)],Fr=[new i("miş",-1,-1),new i("muş",-1,-1),new i("müş",-1,-1),new i("mış",-1,-1)],Sr=[new i("b",-1,1),new i("c",-1,2),new i("d",-1,3),new i("ğ",-1,4)],Wr=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],Lr=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],xr=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],Ar=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],Er=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],jr=[17],Tr=[65],Zr=[65],Br=[["a",xr,97,305],["e",Ar,101,252],["ı",Er,97,305],["i",jr,101,105],["o",Tr,111,117],["ö",Zr,246,252],["u",Tr,111,117]],Dr=new e;this.setCurrent=function(r){Dr.setCurrent(r)},this.getCurrent=function(){return Dr.getCurrent()},this.stem=function(){return!!($()&&(Dr.limit_backward=Dr.cursor,Dr.cursor=Dr.limit,J(),Dr.cursor=Dr.limit,nr&&(R(),Dr.cursor=Dr.limit_backward,er())))}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}});
\ No newline at end of file
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});
\ No newline at end of file
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("nodejieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});
\ No newline at end of file
/**
* export the module via AMD, CommonJS or as a browser global
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory)
} else if (typeof exports === 'object') {
/**
* Node. Does not work with strict CommonJS, but
* only CommonJS-like environments that support module.exports,
* like Node.
*/
module.exports = factory()
} else {
// Browser globals (root is window)
factory()(root.lunr);
}
}(this, function () {
/**
* Just return a value to define the module export.
* This example returns an object, but the module
* can return a function as the exported value.
*/
return function(lunr) {
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
// (c) 2008 Taku Kudo <taku@chasen.org>
// TinySegmenter is freely distributable under the terms of a new BSD licence.
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
function TinySegmenter() {
var patterns = {
"[一二三四五六七八九十百千万億兆]":"M",
"[一-龠々〆ヵヶ]":"H",
"[ぁ-ん]":"I",
"[ァ-ヴーア-ン゙ー]":"K",
"[a-zA-Za-zA-Z]":"A",
"[0-90-9]":"N"
}
this.chartype_ = [];
for (var i in patterns) {
var regexp = new RegExp(i);
this.chartype_.push([regexp, patterns[i]]);
}
this.BIAS__ = -332
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
this.BP2__ = {"BO":60,"OO":-1762};
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669};
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
this.TW1__ = {"につい":-4681,"東京都":2026};
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
this.UC3__ = {"A":-1370,"I":2311};
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
this.UP1__ = {"O":-214};
this.UP2__ = {"B":69,"O":935};
this.UP3__ = {"B":189};
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496};
return this;
}
TinySegmenter.prototype.ctype_ = function(str) {
for (var i in this.chartype_) {
if (str.match(this.chartype_[i][0])) {
return this.chartype_[i][1];
}
}
return "O";
}
TinySegmenter.prototype.ts_ = function(v) {
if (v) { return v; }
return 0;
}
TinySegmenter.prototype.segment = function(input) {
if (input == null || input == undefined || input == "") {
return [];
}
var result = [];
var seg = ["B3","B2","B1"];
var ctype = ["O","O","O"];
var o = input.split("");
for (i = 0; i < o.length; ++i) {
seg.push(o[i]);
ctype.push(this.ctype_(o[i]))
}
seg.push("E1");
seg.push("E2");
seg.push("E3");
ctype.push("O");
ctype.push("O");
ctype.push("O");
var word = seg[3];
var p1 = "U";
var p2 = "U";
var p3 = "U";
for (var i = 4; i < seg.length - 3; ++i) {
var score = this.BIAS__;
var w1 = seg[i-3];
var w2 = seg[i-2];
var w3 = seg[i-1];
var w4 = seg[i];
var w5 = seg[i+1];
var w6 = seg[i+2];
var c1 = ctype[i-3];
var c2 = ctype[i-2];
var c3 = ctype[i-1];
var c4 = ctype[i];
var c5 = ctype[i+1];
var c6 = ctype[i+2];
score += this.ts_(this.UP1__[p1]);
score += this.ts_(this.UP2__[p2]);
score += this.ts_(this.UP3__[p3]);
score += this.ts_(this.BP1__[p1 + p2]);
score += this.ts_(this.BP2__[p2 + p3]);
score += this.ts_(this.UW1__[w1]);
score += this.ts_(this.UW2__[w2]);
score += this.ts_(this.UW3__[w3]);
score += this.ts_(this.UW4__[w4]);
score += this.ts_(this.UW5__[w5]);
score += this.ts_(this.UW6__[w6]);
score += this.ts_(this.BW1__[w2 + w3]);
score += this.ts_(this.BW2__[w3 + w4]);
score += this.ts_(this.BW3__[w4 + w5]);
score += this.ts_(this.TW1__[w1 + w2 + w3]);
score += this.ts_(this.TW2__[w2 + w3 + w4]);
score += this.ts_(this.TW3__[w3 + w4 + w5]);
score += this.ts_(this.TW4__[w4 + w5 + w6]);
score += this.ts_(this.UC1__[c1]);
score += this.ts_(this.UC2__[c2]);
score += this.ts_(this.UC3__[c3]);
score += this.ts_(this.UC4__[c4]);
score += this.ts_(this.UC5__[c5]);
score += this.ts_(this.UC6__[c6]);
score += this.ts_(this.BC1__[c2 + c3]);
score += this.ts_(this.BC2__[c3 + c4]);
score += this.ts_(this.BC3__[c4 + c5]);
score += this.ts_(this.TC1__[c1 + c2 + c3]);
score += this.ts_(this.TC2__[c2 + c3 + c4]);
score += this.ts_(this.TC3__[c3 + c4 + c5]);
score += this.ts_(this.TC4__[c4 + c5 + c6]);
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
score += this.ts_(this.UQ1__[p1 + c1]);
score += this.ts_(this.UQ2__[p2 + c2]);
score += this.ts_(this.UQ3__[p3 + c3]);
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
var p = "O";
if (score > 0) {
result.push(word);
word = "";
p = "B";
}
p1 = p2;
p2 = p3;
p3 = p;
word += seg[i];
}
result.push(word);
return result;
}
lunr.TinySegmenter = TinySegmenter;
};
}));
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
(()=>{var ge=Object.create;var W=Object.defineProperty,ye=Object.defineProperties,me=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyDescriptors,xe=Object.getOwnPropertyNames,G=Object.getOwnPropertySymbols,Se=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable;var J=(t,e,r)=>e in t?W(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,M=(t,e)=>{for(var r in e||(e={}))X.call(e,r)&&J(t,r,e[r]);if(G)for(var r of G(e))Qe.call(e,r)&&J(t,r,e[r]);return t},Z=(t,e)=>ye(t,ve(e));var K=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var be=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of xe(e))!X.call(t,i)&&i!==r&&W(t,i,{get:()=>e[i],enumerable:!(n=me(e,i))||n.enumerable});return t};var H=(t,e,r)=>(r=t!=null?ge(Se(t)):{},be(e||!t||!t.__esModule?W(r,"default",{value:t,enumerable:!0}):r,t));var z=(t,e,r)=>new Promise((n,i)=>{var s=u=>{try{a(r.next(u))}catch(c){i(c)}},o=u=>{try{a(r.throw(u))}catch(c){i(c)}},a=u=>u.done?n(u.value):Promise.resolve(u.value).then(s,o);a((r=r.apply(t,e)).next())});var re=K((ee,te)=>{/**
* lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
* Copyright (C) 2020 Oliver Nightingale
* @license MIT
*/(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";/*!
* lunr.utils
* Copyright (C) 2020 Oliver Nightingale
*/t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var s=n[i],o=e[s];if(Array.isArray(o)){r[s]=o.slice();continue}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){r[s]=o;continue}throw new TypeError("clone is not deep and does not support nested objects")}return r},t.FieldRef=function(e,r,n){this.docRef=e,this.fieldName=r,this._stringValue=n},t.FieldRef.joiner="/",t.FieldRef.fromString=function(e){var r=e.indexOf(t.FieldRef.joiner);if(r===-1)throw"malformed field ref string";var n=e.slice(0,r),i=e.slice(r+1);return new t.FieldRef(i,n,e)},t.FieldRef.prototype.toString=function(){return this._stringValue==null&&(this._stringValue=this.fieldName+t.FieldRef.joiner+this.docRef),this._stringValue};/*!
* lunr.Set
* Copyright (C) 2020 Oliver Nightingale
*/t.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var r=0;r<this.length;r++)this.elements[e[r]]=!0}else this.length=0},t.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},t.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},t.Set.prototype.contains=function(e){return!!this.elements[e]},t.Set.prototype.intersect=function(e){var r,n,i,s=[];if(e===t.Set.complete)return this;if(e===t.Set.empty)return e;this.length<e.length?(r=this,n=e):(r=e,n=this),i=Object.keys(r.elements);for(var o=0;o<i.length;o++){var a=i[o];a in n.elements&&s.push(a)}return new t.Set(s)},t.Set.prototype.union=function(e){return e===t.Set.complete?t.Set.complete:e===t.Set.empty?this:new t.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},t.idf=function(e,r){var n=0;for(var i in e)i!="_index"&&(n+=Object.keys(e[i]).length);var s=(r-n+.5)/(n+.5);return Math.log(1+Math.abs(s))},t.Token=function(e,r){this.str=e||"",this.metadata=r||{}},t.Token.prototype.toString=function(){return this.str},t.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},t.Token.prototype.clone=function(e){return e=e||function(r){return r},new t.Token(e(this.str,this.metadata),this.metadata)};/*!
* lunr.tokenizer
* Copyright (C) 2020 Oliver Nightingale
*/t.tokenizer=function(e,r){if(e==null||e==null)return[];if(Array.isArray(e))return e.map(function(y){return new t.Token(t.utils.asString(y).toLowerCase(),t.utils.clone(r))});for(var n=e.toString().toLowerCase(),i=n.length,s=[],o=0,a=0;o<=i;o++){var u=n.charAt(o),c=o-a;if(u.match(t.tokenizer.separator)||o==i){if(c>0){var h=t.utils.clone(r)||{};h.position=[a,c],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;/*!
* lunr.Pipeline
* Copyright (C) 2020 Oliver Nightingale
*/t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index.
`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n<r;n++){for(var i=this._stack[n],s=[],o=0;o<e.length;o++){var a=i(e[o],o,e);if(!(a==null||a===""))if(Array.isArray(a))for(var u=0;u<a.length;u++)s.push(a[u]);else s.push(a)}e=s}return e},t.Pipeline.prototype.runString=function(e,r){var n=new t.Token(e,r);return this.run([n]).map(function(i){return i.toString()})},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})};/*!
* lunr.Vector
* Copyright (C) 2020 Oliver Nightingale
*/t.Vector=function(e){this._magnitude=0,this.elements=e||[]},t.Vector.prototype.positionForIndex=function(e){if(this.elements.length==0)return 0;for(var r=0,n=this.elements.length/2,i=n-r,s=Math.floor(i/2),o=this.elements[s*2];i>1&&(o<e&&(r=s),o>e&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(o<e)return(s+1)*2},t.Vector.prototype.insert=function(e,r){this.upsert(e,r,function(){throw"duplicate index"})},t.Vector.prototype.upsert=function(e,r,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],r):this.elements.splice(i,0,e,r)},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,r=this.elements.length,n=1;n<r;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},t.Vector.prototype.dot=function(e){for(var r=0,n=this.elements,i=e.elements,s=n.length,o=i.length,a=0,u=0,c=0,h=0;c<s&&h<o;)a=n[c],u=i[h],a<u?c+=2:a>u?h+=2:a==u&&(r+=n[c+1]*i[h+1],c+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r<this.elements.length;r+=2,n++)e[n]=this.elements[r];return e},t.Vector.prototype.toJSON=function(){return this.elements};/*!
* lunr.stemmer
* Copyright (C) 2020 Oliver Nightingale
* Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
*/t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},r={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",s=n+"[^aeiouy]*",o=i+"[aeiou]*",a="^("+s+")?"+o+s,u="^("+s+")?"+o+s+"("+o+")?$",c="^("+s+")?"+o+s+o+s,h="^("+s+")?"+i,y=new RegExp(a),g=new RegExp(c),b=new RegExp(u),m=new RegExp(h),Q=/^(.+?)(ss|i)es$/,p=/^(.+?)([^s])s$/,d=/^(.+?)eed$/,w=/^(.+?)(ed|ing)$/,L=/.$/,k=/(at|bl|iz)$/,I=new RegExp("([^aeiouylsz])\\1$"),j=new RegExp("^"+s+i+"[^aeiouwxy]$"),F=/^(.+?[^aeiou])y$/,A=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,N=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,C=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,$=/^(.+?)(s|t)(ion)$/,T=/^(.+?)e$/,V=/ll$/,B=new RegExp("^"+s+i+"[^aeiouwxy]$"),D=function(l){var v,P,E,f,x,R,_;if(l.length<3)return l;if(E=l.substr(0,1),E=="y"&&(l=E.toUpperCase()+l.substr(1)),f=Q,x=p,f.test(l)?l=l.replace(f,"$1$2"):x.test(l)&&(l=l.replace(x,"$1$2")),f=d,x=w,f.test(l)){var S=f.exec(l);f=y,f.test(S[1])&&(f=L,l=l.replace(f,""))}else if(x.test(l)){var S=x.exec(l);v=S[1],x=m,x.test(v)&&(l=v,x=k,R=I,_=j,x.test(l)?l=l+"e":R.test(l)?(f=L,l=l.replace(f,"")):_.test(l)&&(l=l+"e"))}if(f=F,f.test(l)){var S=f.exec(l);v=S[1],l=v+"i"}if(f=A,f.test(l)){var S=f.exec(l);v=S[1],P=S[2],f=y,f.test(v)&&(l=v+e[P])}if(f=N,f.test(l)){var S=f.exec(l);v=S[1],P=S[2],f=y,f.test(v)&&(l=v+r[P])}if(f=C,x=$,f.test(l)){var S=f.exec(l);v=S[1],f=g,f.test(v)&&(l=v)}else if(x.test(l)){var S=x.exec(l);v=S[1]+S[2],x=g,x.test(v)&&(l=v)}if(f=T,f.test(l)){var S=f.exec(l);v=S[1],f=g,x=b,R=B,(f.test(v)||x.test(v)&&!R.test(v))&&(l=v)}return f=V,x=g,f.test(l)&&x.test(l)&&(f=L,l=l.replace(f,"")),E=="y"&&(l=E.toLowerCase()+l.substr(1)),l};return function(O){return O.update(D)}}(),t.Pipeline.registerFunction(t.stemmer,"stemmer");/*!
* lunr.stopWordFilter
* Copyright (C) 2020 Oliver Nightingale
*/t.generateStopWordFilter=function(e){var r=e.reduce(function(n,i){return n[i]=i,n},{});return function(n){if(n&&r[n.toString()]!==n.toString())return n}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter");/*!
* lunr.trimmer
* Copyright (C) 2020 Oliver Nightingale
*/t.trimmer=function(e){return e.update(function(r){return r.replace(/^\W+/,"").replace(/\W+$/,"")})},t.Pipeline.registerFunction(t.trimmer,"trimmer");/*!
* lunr.TokenSet
* Copyright (C) 2020 Oliver Nightingale
*/t.TokenSet=function(){this.final=!1,this.edges={},this.id=t.TokenSet._nextId,t.TokenSet._nextId+=1},t.TokenSet._nextId=1,t.TokenSet.fromArray=function(e){for(var r=new t.TokenSet.Builder,n=0,i=e.length;n<i;n++)r.insert(e[n]);return r.finish(),r.root},t.TokenSet.fromClause=function(e){return"editDistance"in e?t.TokenSet.fromFuzzyString(e.term,e.editDistance):t.TokenSet.fromString(e.term)},t.TokenSet.fromFuzzyString=function(e,r){for(var n=new t.TokenSet,i=[{node:n,editsRemaining:r,str:e}];i.length;){var s=i.pop();if(s.str.length>0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),y=s.str.charAt(1),g;y in s.node.edges?g=s.node.edges[y]:(g=new t.TokenSet,s.node.edges[y]=g),s.str.length==1&&(g.final=!0),i.push({node:g,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i<s;i++){var o=e[i],a=i==s-1;if(o=="*")r.edges[o]=r,r.final=a;else{var u=new t.TokenSet;u.final=a,r.edges[o]=u,r=u}}return n},t.TokenSet.prototype.toArray=function(){for(var e=[],r=[{prefix:"",node:this}];r.length;){var n=r.pop(),i=Object.keys(n.node.edges),s=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<s;o++){var a=i[o];r.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},t.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",r=Object.keys(this.edges).sort(),n=r.length,i=0;i<n;i++){var s=r[i],o=this.edges[s];e=e+s+o.id}return e},t.TokenSet.prototype.intersect=function(e){for(var r=new t.TokenSet,n=void 0,i=[{qNode:e,output:r,node:this}];i.length;){n=i.pop();for(var s=Object.keys(n.qNode.edges),o=s.length,a=Object.keys(n.node.edges),u=a.length,c=0;c<o;c++)for(var h=s[c],y=0;y<u;y++){var g=a[y];if(g==h||h=="*"){var b=n.node.edges[g],m=n.qNode.edges[h],Q=b.final&&m.final,p=void 0;g in n.output.edges?(p=n.output.edges[g],p.final=p.final||Q):(p=new t.TokenSet,p.final=Q,n.output.edges[g]=p),i.push({qNode:m,output:p,node:b})}}}return r},t.TokenSet.Builder=function(){this.previousWord="",this.root=new t.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},t.TokenSet.Builder.prototype.insert=function(e){var r,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),this.uncheckedNodes.length==0?r=this.root:r=this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var i=n;i<e.length;i++){var s=new t.TokenSet,o=e[i];r.edges[o]=s,this.uncheckedNodes.push({parent:r,char:o,child:s}),r=s}r.final=!0,this.previousWord=e},t.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},t.TokenSet.Builder.prototype.minimize=function(e){for(var r=this.uncheckedNodes.length-1;r>=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};/*!
* lunr.Index
* Copyright (C) 2020 Oliver Nightingale
*/t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u<this.fields.length;u++)i[this.fields[u]]=new t.Vector;e.call(r,r);for(var u=0;u<r.clauses.length;u++){var c=r.clauses[u],h=null,y=t.Set.empty;c.usePipeline?h=this.pipeline.runString(c.term,{fields:c.fields}):h=[c.term];for(var g=0;g<h.length;g++){var b=h[g];c.term=b;var m=t.TokenSet.fromClause(c),Q=this.tokenSet.intersect(m).toArray();if(Q.length===0&&c.presence===t.Query.presence.REQUIRED){for(var p=0;p<c.fields.length;p++){var d=c.fields[p];o[d]=t.Set.empty}break}for(var w=0;w<Q.length;w++)for(var L=Q[w],k=this.invertedIndex[L],I=k._index,p=0;p<c.fields.length;p++){var d=c.fields[p],j=k[d],F=Object.keys(j),A=L+"/"+d,N=new t.Set(F);if(c.presence==t.Query.presence.REQUIRED&&(y=y.union(N),o[d]===void 0&&(o[d]=t.Set.complete)),c.presence==t.Query.presence.PROHIBITED){a[d]===void 0&&(a[d]=t.Set.empty),a[d]=a[d].union(N);continue}if(i[d].upsert(I,c.boost,function(pe,de){return pe+de}),!s[A]){for(var C=0;C<F.length;C++){var $=F[C],T=new t.FieldRef($,d),V=j[$],B;(B=n[T])===void 0?n[T]=new t.MatchData(L,d,V):B.add(L,d,V)}s[A]=!0}}}if(c.presence===t.Query.presence.REQUIRED)for(var p=0;p<c.fields.length;p++){var d=c.fields[p];o[d]=o[d].intersect(y)}}for(var D=t.Set.complete,O=t.Set.empty,u=0;u<this.fields.length;u++){var d=this.fields[u];o[d]&&(D=D.intersect(o[d])),a[d]&&(O=O.union(a[d]))}var l=Object.keys(n),v=[],P=Object.create(null);if(r.isNegated()){l=Object.keys(this.fieldVectors);for(var u=0;u<l.length;u++){var T=l[u],E=t.FieldRef.fromString(T);n[T]=new t.MatchData}}for(var u=0;u<l.length;u++){var E=t.FieldRef.fromString(l[u]),f=E.docRef;if(!!D.contains(f)&&!O.contains(f)){var x=this.fieldVectors[E],R=i[E.fieldName].similarity(x),_;if((_=P[f])!==void 0)_.score+=R,_.matchData.combine(n[E]);else{var S={ref:f,score:R,matchData:n[E]};P[f]=S,v.push(S)}}}return v.sort(function(he,fe){return fe.score-he.score})},t.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(n){return[n,this.invertedIndex[n]]},this),r=Object.keys(this.fieldVectors).map(function(n){return[n,this.fieldVectors[n].toJSON()]},this);return{version:t.version,fields:this.fields,fieldVectors:r,invertedIndex:e,pipeline:this.pipeline.toJSON()}},t.Index.load=function(e){var r={},n={},i=e.fieldVectors,s=Object.create(null),o=e.invertedIndex,a=new t.TokenSet.Builder,u=t.Pipeline.load(e.pipeline);e.version!=t.version&&t.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+t.version+"' does not match serialized index '"+e.version+"'");for(var c=0;c<i.length;c++){var h=i[c],y=h[0],g=h[1];n[y]=new t.Vector(g)}for(var c=0;c<o.length;c++){var h=o[c],b=h[0],m=h[1];a.insert(b),s[b]=m}return a.finish(),r.fields=e.fields,r.fieldVectors=n,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=u,new t.Index(r)};/*!
* lunr.Builder
* Copyright (C) 2020 Oliver Nightingale
*/t.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=t.tokenizer,this.pipeline=new t.Pipeline,this.searchPipeline=new t.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},t.Builder.prototype.ref=function(e){this._ref=e},t.Builder.prototype.field=function(e,r){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=r||{}},t.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s<i.length;s++){var o=i[s],a=this._fields[o].extractor,u=a?a(e):e[o],c=this.tokenizer(u,{fields:[o]}),h=this.pipeline.run(c),y=new t.FieldRef(n,o),g=Object.create(null);this.fieldTermFrequencies[y]=g,this.fieldLengths[y]=0,this.fieldLengths[y]+=h.length;for(var b=0;b<h.length;b++){var m=h[b];if(g[m]==null&&(g[m]=0),g[m]+=1,this.invertedIndex[m]==null){var Q=Object.create(null);Q._index=this.termIndex,this.termIndex+=1;for(var p=0;p<i.length;p++)Q[i[p]]=Object.create(null);this.invertedIndex[m]=Q}this.invertedIndex[m][o][n]==null&&(this.invertedIndex[m][o][n]=Object.create(null));for(var d=0;d<this.metadataWhitelist.length;d++){var w=this.metadataWhitelist[d],L=m.metadata[w];this.invertedIndex[m][o][n][w]==null&&(this.invertedIndex[m][o][n][w]=[]),this.invertedIndex[m][o][n][w].push(L)}}}},t.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),r=e.length,n={},i={},s=0;s<r;s++){var o=t.FieldRef.fromString(e[s]),a=o.fieldName;i[a]||(i[a]=0),i[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}for(var u=Object.keys(this._fields),s=0;s<u.length;s++){var c=u[s];n[c]=n[c]/i[c]}this.averageFieldLength=n},t.Builder.prototype.createFieldVectors=function(){for(var e={},r=Object.keys(this.fieldTermFrequencies),n=r.length,i=Object.create(null),s=0;s<n;s++){for(var o=t.FieldRef.fromString(r[s]),a=o.fieldName,u=this.fieldLengths[o],c=new t.Vector,h=this.fieldTermFrequencies[o],y=Object.keys(h),g=y.length,b=this._fields[a].boost||1,m=this._documents[o.docRef].boost||1,Q=0;Q<g;Q++){var p=y[Q],d=h[p],w=this.invertedIndex[p]._index,L,k,I;i[p]===void 0?(L=t.idf(this.invertedIndex[p],this.documentCount),i[p]=L):L=i[p],k=L*((this._k1+1)*d)/(this._k1*(1-this._b+this._b*(u/this.averageFieldLength[a]))+d),k*=b,k*=m,I=Math.round(k*1e3)/1e3,c.insert(w,I)}e[o]=c}this.fieldVectors=e},t.Builder.prototype.createTokenSet=function(){this.tokenSet=t.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},t.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new t.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},t.Builder.prototype.use=function(e){var r=Array.prototype.slice.call(arguments,1);r.unshift(this),e.apply(this,r)},t.MatchData=function(e,r,n){for(var i=Object.create(null),s=Object.keys(n||{}),o=0;o<s.length;o++){var a=s[o];i[a]=n[a].slice()}this.metadata=Object.create(null),e!==void 0&&(this.metadata[e]=Object.create(null),this.metadata[e][r]=i)},t.MatchData.prototype.combine=function(e){for(var r=Object.keys(e.metadata),n=0;n<r.length;n++){var i=r[n],s=Object.keys(e.metadata[i]);this.metadata[i]==null&&(this.metadata[i]=Object.create(null));for(var o=0;o<s.length;o++){var a=s[o],u=Object.keys(e.metadata[i][a]);this.metadata[i][a]==null&&(this.metadata[i][a]=Object.create(null));for(var c=0;c<u.length;c++){var h=u[c];this.metadata[i][a][h]==null?this.metadata[i][a][h]=e.metadata[i][a][h]:this.metadata[i][a][h]=this.metadata[i][a][h].concat(e.metadata[i][a][h])}}}},t.MatchData.prototype.add=function(e,r,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][r]=n;return}if(!(r in this.metadata[e])){this.metadata[e][r]=n;return}for(var i=Object.keys(n),s=0;s<i.length;s++){var o=i[s];o in this.metadata[e][r]?this.metadata[e][r][o]=this.metadata[e][r][o].concat(n[o]):this.metadata[e][r][o]=n[o]}},t.Query=function(e){this.clauses=[],this.allFields=e},t.Query.wildcard=new String("*"),t.Query.wildcard.NONE=0,t.Query.wildcard.LEADING=1,t.Query.wildcard.TRAILING=2,t.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},t.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=t.Query.wildcard.NONE),e.wildcard&t.Query.wildcard.LEADING&&e.term.charAt(0)!=t.Query.wildcard&&(e.term="*"+e.term),e.wildcard&t.Query.wildcard.TRAILING&&e.term.slice(-1)!=t.Query.wildcard&&(e.term=""+e.term+"*"),"presence"in e||(e.presence=t.Query.presence.OPTIONAL),this.clauses.push(e),this},t.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=t.Query.presence.PROHIBITED)return!1;return!0},t.Query.prototype.term=function(e,r){if(Array.isArray(e))return e.forEach(function(i){this.term(i,t.utils.clone(r))},this),this;var n=r||{};return n.term=e.toString(),this.clause(n),this},t.QueryParseError=function(e,r,n){this.name="QueryParseError",this.message=e,this.start=r,this.end=n},t.QueryParseError.prototype=new Error,t.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},t.QueryLexer.prototype.run=function(){for(var e=t.QueryLexer.lexText;e;)e=e(this)},t.QueryLexer.prototype.sliceString=function(){for(var e=[],r=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(r,n)),r=n+1;return e.push(this.str.slice(r,this.pos)),this.escapeCharPositions.length=0,e.join("")},t.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},t.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},t.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos<this.length},t.QueryLexer.EOS="EOS",t.QueryLexer.FIELD="FIELD",t.QueryLexer.TERM="TERM",t.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",t.QueryLexer.BOOST="BOOST",t.QueryLexer.PRESENCE="PRESENCE",t.QueryLexer.lexField=function(e){return e.backup(),e.emit(t.QueryLexer.FIELD),e.ignore(),t.QueryLexer.lexText},t.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof ee=="object"?te.exports=r():e.lunr=r()}(this,function(){return t})})()});var q=K((Re,ne)=>{"use strict";/*!
* escape-html
* Copyright(c) 2012-2013 TJ Holowaychuk
* Copyright(c) 2015 Andreas Lubbe
* Copyright(c) 2015 Tiancheng "Timothy" Gu
* MIT Licensed
*/var Le=/["'&<>]/;ne.exports=we;function we(t){var e=""+t,r=Le.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s<e.length;s++){switch(e.charCodeAt(s)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}o!==s&&(i+=e.substring(o,s)),o=s+1,i+=n}return o!==s?i+e.substring(o,s):i}});var le=H(re());Object.entries||(Object.entries=function(t){let e=[];for(let r of Object.keys(t))e.push([r,t[r]]);return e});Object.values||(Object.values=function(t){let e=[];for(let r of Object.keys(t))e.push(t[r]);return e});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(t,e){typeof t=="object"?(this.scrollLeft=t.left,this.scrollTop=t.top):(this.scrollLeft=t,this.scrollTop=e)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...t){let e=this.parentNode;if(e){t.length===0&&e.removeChild(this);for(let r=t.length-1;r>=0;r--){let n=t[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));var ie=H(q());function se(t){let e=new Map,r=new Set;for(let n of t){let[i,s]=n.location.split("#"),o=n.location,a=n.title,u=n.tags,c=(0,ie.default)(n.text).replace(/\s+(?=[,.:;!?])/g,"").replace(/\s+/g," ");if(s){let h=e.get(i);r.has(h)?e.set(o,{location:o,title:a,text:c,parent:h}):(h.title=n.title,h.text=c,r.add(h))}else e.set(o,M({location:o,title:a,text:c},u&&{tags:u}))}return e}var oe=H(q());function ae(t,e){let r=new RegExp(t.separator,"img"),n=(i,s,o)=>`${s}<mark data-md-highlight>${o}</mark>`;return i=>{i=i.replace(/[\s*+\-:~^]+/g," ").trim();let s=new RegExp(`(^|${t.separator})(${i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return o=>(e?(0,oe.default)(o):o).replace(s,n).replace(/<\/mark>(\s+)<mark[^>]*>/img,"$1")}}function ue(t){let e=new lunr.Query(["title","text"]);return new lunr.QueryParser(t,e).parse(),e.clauses}function ce(t,e){var i;let r=new Set(t),n={};for(let s=0;s<e.length;s++)for(let o of r)e[s].startsWith(o.term)&&(n[o.term]=!0,r.delete(o));for(let s of r)(i=lunr.stopWordFilter)!=null&&i.call(lunr,s.term)&&(n[s.term]=!1);return n}function Ee(t,e){let[r,n]=[new Set(t),new Set(e)];return[...new Set([...r].filter(i=>!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){this.options=n,this.documents=se(r),this.highlight=ae(e,!1),lunr.tokenizer.separator=new RegExp(e.separator),this.index=lunr(function(){e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang));let i=Ee(["trimmer","stopWordFilter","stemmer"],n.pipeline);for(let s of e.lang.map(o=>o==="en"?lunr:lunr[o]))for(let o of i)this.pipeline.remove(s[o]),this.searchPipeline.remove(s[o]);this.ref("location"),this.field("title",{boost:1e3}),this.field("text"),this.field("tags",{boost:1e6,extractor:s=>{let{tags:o=[]}=s;return o.flatMap(a=>lunr.tokenizer(a))}});for(let s of r)this.add(s,{boost:s.boost})})}search(e){if(e)try{let r=this.highlight(e),n=ue(e).filter(o=>o.presence!==lunr.Query.presence.PROHIBITED),i=this.index.search(`${e}*`).reduce((o,{ref:a,score:u,matchData:c})=>{let h=this.documents.get(a);if(typeof h!="undefined"){let{location:y,title:g,text:b,tags:m,parent:Q}=h,p=ce(n,Object.keys(c.metadata)),d=+!Q+ +Object.values(p).every(w=>w);o.push(Z(M({location:y,title:r(g),text:r(b)},m&&{tags:m.map(r)}),{score:u*(1+d),terms:p}))}return o},[]).sort((o,a)=>a.score-o.score).reduce((o,a)=>{let u=this.documents.get(a.location);if(typeof u!="undefined"){let c="parent"in u?u.parent.location:u.location;o.set(c,[...o.get(c)||[],a])}return o},new Map),s;if(this.options.suggestions){let o=this.index.query(a=>{for(let u of n)a.term(u.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});s=o.length?Object.keys(o[0].matchData.metadata):[]}return M({items:[...i.values()]},typeof s!="undefined"&&{suggestions:s})}catch(r){console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`)}return{items:[]}}};var Y;function ke(t){return z(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=document.querySelector("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Te(t){return z(this,null,function*(){switch(t.type){case 0:return yield ke(t.data.config),Y=new U(t.data),{type:1};case 2:return{type:3,data:Y?Y.search(t.data):{items:[]}};default:throw new TypeError("Invalid message type")}})}self.lunr=le.default;addEventListener("message",t=>z(void 0,null,function*(){postMessage(yield Te(t.data))}));})();
//# sourceMappingURL=search.85cb4492.min.js.map
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/layout/_banner.scss","src/assets/stylesheets/main/layout/_base.scss","src/assets/stylesheets/main/layout/_clipboard.scss","src/assets/stylesheets/main/layout/_content.scss","src/assets/stylesheets/main/layout/_dialog.scss","src/assets/stylesheets/main/layout/_footer.scss","src/assets/stylesheets/main/layout/_form.scss","src/assets/stylesheets/main/layout/_header.scss","src/assets/stylesheets/main/layout/_nav.scss","src/assets/stylesheets/main/layout/_search.scss","src/assets/stylesheets/main/layout/_select.scss","src/assets/stylesheets/main/layout/_sidebar.scss","src/assets/stylesheets/main/layout/_source.scss","src/assets/stylesheets/main/layout/_tabs.scss","src/assets/stylesheets/main/layout/_tag.scss","src/assets/stylesheets/main/layout/_tooltip.scss","src/assets/stylesheets/main/layout/_top.scss","src/assets/stylesheets/main/layout/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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C+BlnGE,4CACE,mBAAA,CACA,cAAA,CACA,uB/B+mGJ,C+B5mGI,yDAGE,iBAAA,CADA,eAAA,CADA,a/BgnGN,C+BjnGI,sDAGE,iBAAA,CADA,eAAA,CADA,a/BgnGN,C+BjnGI,gDAGE,iBAAA,CADA,eAAA,CADA,a/BgnGN,CgCtnGE,gCACE,sChCynGJ,CgC1nGE,6BACE,sChCynGJ,CgC1nGE,uBACE,sChCynGJ,CgCtnGE,cACE,yChCwnGJ,CgC5mGE,4DACE,oChC8mGJ,CgC/mGE,yDACE,oChC8mGJ,CgC/mGE,mDACE,oChC8mGJ,CgCtmGE,6CACE,qChCwmGJ,CgCzmGE,0CACE,qChCwmGJ,CgCzmGE,oCACE,qChCwmGJ,CgC9lGE,oDACE,oChCgmGJ,CgCjmGE,iDACE,oChCgmGJ,CgCjmGE,2CACE,oChCgmGJ,CgCvlGE,gDACE,qChCylGJ,CgC1lGE,6CACE,qChCylGJ,CgC1lGE,uCACE,qChCylGJ,CgCplGE,gCACE,kChCslGJ,CgCvlGE,6BACE,kChCslGJ,CgCvlGE,uBACE,kChCslGJ,CgChlGE,qCACE,sChCklGJ,CgCnlGE,kCACE,sChCklGJ,CgCnlGE,4BACE,sChCklGJ,CgC3kGE,yCACE,sChC6kGJ,CgC9kGE,sCACE,sChC6kGJ,CgC9kGE,gCACE,sChC6kGJ,CgCtkGE,yCACE,qChCwkGJ,CgCzkGE,sCACE,qChCwkGJ,CgCzkGE,gCACE,qChCwkGJ,CgC/jGE,gDACE,qChCikGJ,CgClkGE,6CACE,qChCikGJ,CgClkGE,uCACE,qChCikGJ,CgCzjGE,6CACE,sChC2jGJ,CgC5jGE,0CACE,sChC2jGJ,CgC5jGE,oCACE,sChC2jGJ,CgChjGE,yDACE,qChCkjGJ,CgCnjGE,sDACE,qChCkjGJ,CgCnjGE,gDACE,qChCkjGJ,CgC7iGE,iCAGE,mBAAA,CAFA,gBAAA,CACA,gBhCgjGJ,CgCljGE,8BAGE,mBAAA,CAFA,gBAAA,CACA,gBhCgjGJ,CgCljGE,wBAGE,mBAAA,CAFA,gBAAA,CACA,gBhCgjGJ,CgC5iGE,eACE,4ChC8iGJ,CgC3iGE,eACE,4ChC6iG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","file":"main.css"}
\ No newline at end of file
@media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:rgba(66,135,255,.15);--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(66,135,255,.3);--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.3),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35)}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:rgba(255,25,71,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:rgba(245,0,86,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:rgba(223,65,251,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:rgba(124,77,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:rgba(66,135,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:rgba(0,145,235,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:rgba(0,186,214,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:rgba(0,189,164,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:rgba(0,199,83,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:rgba(99,222,23,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:rgba(176,235,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:rgba(255,213,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:rgba(255,170,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:rgba(255,145,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:rgba(255,110,66,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:hsla(0,0%,100%,.7);--md-primary-fg-color--dark:rgba(0,0,0,.07);--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54);--md-typeset-a-color:#4051b5}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:rgba(0,0,0,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:rgba(0,0,0,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07)}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:rgba(0,0,0,.54);--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-header{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:rgba(0,0,0,.87)}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:hsla(0,0%,100%,.12)}[data-md-color-primary=black] .md-search__form:hover{background-color:hsla(0,0%,100%,.3)}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}}
\ No newline at end of file
{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"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","file":"palette.css"}
\ No newline at end of file
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://github.com/SAP-samples/cloud-cap-risk-management/includes/Prepare-SAP-BTP-Live-or-Canary/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>Prepare SAP BTP Live or Canary - SAP BTP Application Development</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL("../..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#option-2-create-live-account" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../../markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Prepare SAP BTP Live or Canary
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../../markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Welcome
</a>
</li>
<li class="md-nav__item">
<a href="../../Kyma/" class="md-nav__link">
Run a CAP Application on Kyma
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#option-2-create-live-account" class="md-nav__link">
Option 2: Create Live Account
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management/edit/master/docs/includes/Prepare-SAP-BTP-Live-or-Canary.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
</a>
<h1>Prepare SAP BTP Live or Canary</h1>
<h2 id="option-2-create-live-account">Option 2: Create Live Account</h2>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://github.com/SAP-samples/cloud-cap-risk-management/includes/SAP-BTP-Entitlements/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>SAP BTP Entitlements - SAP BTP Application Development</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL("../..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../../markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
SAP BTP Entitlements
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="../../markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Welcome
</a>
</li>
<li class="md-nav__item">
<a href="../../Kyma/" class="md-nav__link">
Run a CAP Application on Kyma
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management/edit/master/docs/includes/SAP-BTP-Entitlements.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
</a>
<h1>SAP BTP Entitlements</h1>
<!-- external version with reduced content according the external scenarios -->
<table>
<thead>
<tr>
<th>Service</th>
<th>Plan</th>
<th>Amount</th>
<th>Unit</th>
<th>Tutorial</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cloud Foundry runtime</td>
<td><code>MEMORY</code></td>
<td>4</td>
<td>GB</td>
<td><a href="/CAP-MTA-Deployment">Deploy Your Multi-Target Application (MTA)</a></td>
</tr>
<tr>
<td>SAP Application Logging service</td>
<td><code>standard</code></td>
<td>1</td>
<td>instances</td>
<td><a href="/CAP-MTA-Deployment">Deploy Your Multi-Target Application (MTA)</a></td>
</tr>
<tr>
<td>SAP HANA Schemas &amp; HDI Containers</td>
<td><code>hdi-shared</code></td>
<td>1</td>
<td>instances</td>
<td><a href="/CAP-MTA-Deployment">Deploy Your Multi-Target Application (MTA)</a></td>
</tr>
<tr>
<td>SAP HANA Cloud</td>
<td><code>hana</code></td>
<td>1</td>
<td>instances</td>
<td><a href="/HANA-Cloud-Setup">Set Up the SAP HANA Cloud Service</a></td>
</tr>
<tr>
<td>SAP Build Work Zone, standard edition</td>
<td><code>standard</code></td>
<td>1</td>
<td>active users</td>
<td><a href="../Work-Zone-Subscribe">Subscribe to the SAP Build Work Zone, Standard Edition</a></td>
</tr>
<tr>
<td>SAP Event Mesh</td>
<td><code>default</code></td>
<td>1</td>
<td>instances</td>
<td><a href="/Events-App-Setup-S4HC">Set Up Your CAP Application for Eventing</a></td>
</tr>
</tbody>
</table>
<div class="admonition info">
<p class="admonition-title">The services mentioned below are Utility Services, no entitlement needed</p>
</div>
<table>
<thead>
<tr>
<th>Service</th>
<th>Plan</th>
<th>Amount</th>
<th>Unit</th>
<th>Tutorial</th>
</tr>
</thead>
<tbody>
<tr>
<td>SAP HTML5 Application Repository service</td>
<td><code>app-host</code></td>
<td>100</td>
<td>MB</td>
<td><a href="../Work-Zone-Subscribe">Subscribe to the SAP Build Work Zone, Standard Edition</a></td>
</tr>
<tr>
<td>SAP Authorization and Trust Management service</td>
<td><code>application</code></td>
<td>1</td>
<td>instances</td>
<td><a href="/CAP-MTA-Deployment">Deploy Your Multi-Target Application (MTA)</a></td>
</tr>
</tbody>
</table>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://github.com/SAP-samples/cloud-cap-risk-management/">
<link rel="icon" href="assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.3.6">
<title>SAP BTP Application Development</title>
<link rel="stylesheet" href="assets/stylesheets/main.4a0965b7.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.cbb835fc.min.css">
<meta name="theme-color" content="#000000">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="styles/additonal.css">
<link rel="stylesheet" href="https://unpkg.com/mermaid@8.4.8/dist/mermaid.css">
<script>__md_scope=new URL(".",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="black" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#welcome" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="." title="SAP BTP Application Development" class="md-header__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="markdown/images/sap.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SAP BTP Application Development
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Welcome
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="." title="SAP BTP Application Development" class="md-nav__button md-logo" aria-label="SAP BTP Application Development" data-md-component="logo">
<img src="markdown/images/sap.svg" alt="logo">
</a>
SAP BTP Application Development
</label>
<div class="md-nav__source">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Welcome
<span class="md-nav__icon md-icon"></span>
</label>
<a href="." class="md-nav__link md-nav__link--active">
Welcome
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#download-and-installation" class="md-nav__link">
Download and Installation
</a>
</li>
<li class="md-nav__item">
<a href="#known-issues" class="md-nav__link">
Known Issues
</a>
</li>
<li class="md-nav__item">
<a href="#how-to-obtain-support" class="md-nav__link">
How to Obtain Support
</a>
</li>
<li class="md-nav__item">
<a href="#contributing" class="md-nav__link">
Contributing
</a>
</li>
<li class="md-nav__item">
<a href="#license" class="md-nav__link">
License
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="Kyma/" class="md-nav__link">
Run a CAP Application on Kyma
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#download-and-installation" class="md-nav__link">
Download and Installation
</a>
</li>
<li class="md-nav__item">
<a href="#known-issues" class="md-nav__link">
Known Issues
</a>
</li>
<li class="md-nav__item">
<a href="#how-to-obtain-support" class="md-nav__link">
How to Obtain Support
</a>
</li>
<li class="md-nav__item">
<a href="#contributing" class="md-nav__link">
Contributing
</a>
</li>
<li class="md-nav__item">
<a href="#license" class="md-nav__link">
License
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/SAP-samples/cloud-cap-risk-management/edit/master/docs/README.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
</a>
<h1 id="welcome">Welcome</h1>
<p>Welcome to this tutorial for application development on SAP Business Technology Platform (SAP BTP). We provide information and examples on how to develop and deploy an application based on <a href="https://cap.cloud.sap/">SAP Cloud Application Programming Model (CAP)</a> on SAP BTP using different tools and services step by step.</p>
<p>It's planned to provide multiple modules that are built upon each other. You can start the tutorial with the first module, or start in between, because the source code for every tutorial module is provided in this repository.</p>
<h2 id="download-and-installation">Download and Installation</h2>
<p>If you want to start from a specific tutorial module, get the name of its branch from the <a href="http://sap-samples.github.io/cloud-cap-risk-management">tutorial</a>, download this repository and switch to the desired branch:</p>
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/SAP-samples/cloud-cap-risk-management
<span class="nb">cd</span><span class="w"> </span>cloud-cap-risk-management
git<span class="w"> </span>checkout<span class="w"> </span>&lt;branch&gt;
</code></pre></div>
<h2 id="known-issues">Known Issues</h2>
<p>You can find the known issues <a href="https://github.com/SAP-samples/cloud-cap-risk-management/issues">here</a>.</p>
<h2 id="how-to-obtain-support">How to Obtain Support</h2>
<p>Check out the documentation for:</p>
<ul>
<li><a href="https://cap.cloud.sap/docs/advanced/troubleshooting">CAP aka "capire"</a></li>
<li><a href="https://help.sap.com/viewer/product/CP/Cloud/">SAP BTP</a></li>
</ul>
<p>In case you have a question, find a bug, or otherwise need support to use SAP products, use:</p>
<ul>
<li><a href="https://answers.sap.com/tags/9f13aee1-834c-4105-8e43-ee442775e5ce">CAP Community</a></li>
<li><a href="https://community.sap.com/">SAP Community</a></li>
<li><a href="https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/08d1103928fb42f3a73b3f425e00e13c.html">SAP BTP Support Components</a></li>
</ul>
<p>If you face a problem with the example application or the description, feel free to create an <a href="https://github.com/SAP-samples/cloud-cap-risk-management/issues">issue</a>.</p>
<h2 id="contributing">Contributing</h2>
<p>If you have suggestions on how to improve the tutorial, you are welcome to provide your input <a href="https://github.com/SAP-samples/cloud-cap-risk-management/issues">here</a>.</p>
<h2 id="license">License</h2>
<p><a href="https://api.reuse.software/info/github.com/SAP-samples/cloud-cap-risk-management"><img alt="REUSE status" src="https://api.reuse.software/badge/github.com/SAP-samples/cloud-cap-risk-management" /></a></p>
<p>Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the <a href="LICENSES/Apache-2.0.txt">LICENSE</a> file.</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="Kyma/" class="md-footer__link md-footer__link--next" aria-label="Next: Run a CAP Application on Kyma" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Run a CAP Application on Kyma
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": ".", "features": [], "search": "assets/javascripts/workers/search.85cb4492.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
<script src="assets/javascripts/bundle.a877e258.min.js"></script>
<script src="https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js"></script>
</body>
</html>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 35.62"><defs><style>.cls-1,.cls-2{fill-rule:evenodd;}.cls-1{fill:url(#linear-gradient);}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="36" x2="36" y2="35.62" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#00b8f1"/><stop offset="0.02" stop-color="#01b6f0"/><stop offset="0.31" stop-color="#0d90d9"/><stop offset="0.58" stop-color="#1775c8"/><stop offset="0.82" stop-color="#1c65bf"/><stop offset="1" stop-color="#1e5fbb"/></linearGradient></defs><title>SAP_sign_R</title><polyline class="cls-1" points="0 35.62 36.39 35.62 72 0 0 0 0 35.62"/><path class="cls-2" d="M45.68,9.16H38.6V26L32.4,9.15H26.27L21,23.25c-.56-3.55-4.24-4.78-7.13-5.7C11.94,16.93,9.91,16,9.93,15c0-.82,1.09-1.58,3.21-1.46A11.59,11.59,0,0,1,18.33,15l2.46-4.29a19.17,19.17,0,0,0-8-1.9h0a9.75,9.75,0,0,0-7.09,2.59A6,6,0,0,0,4,15.5a5.55,5.55,0,0,0,2.43,4.95,16.56,16.56,0,0,0,4.82,2.2c2,.61,3.57,1.14,3.56,2.27A1.67,1.67,0,0,1,14.3,26a3.12,3.12,0,0,1-2.28.72,9.8,9.8,0,0,1-5.87-1.67L4,29.42a16.37,16.37,0,0,0,8,2.13h.37a9.68,9.68,0,0,0,6.1-2l.26-.22L18,31.18h6.44l1.08-3.29a11.75,11.75,0,0,0,3.78.6A11.9,11.9,0,0,0,33,27.93l1,3.25h10.5v-6.8h2.29c5.54,0,8.81-2.82,8.81-7.54C55.64,11.57,52.46,9.16,45.68,9.16ZM29.3,23.58a6.47,6.47,0,0,1-2.27-.4l2.25-7.09h0l2.21,7.11A6.66,6.66,0,0,1,29.3,23.58ZM46.1,19.5H44.54V13.79H46.1c2.08,0,3.74.69,3.74,2.82S48.18,19.5,46.1,19.5" transform="translate(-2.95 -2.46)"/></svg>
\ No newline at end of file
{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Welcome Welcome to this tutorial for application development on SAP Business Technology Platform (SAP BTP). We provide information and examples on how to develop and deploy an application based on SAP Cloud Application Programming Model (CAP) on SAP BTP using different tools and services step by step. It's planned to provide multiple modules that are built upon each other. You can start the tutorial with the first module, or start in between, because the source code for every tutorial module is provided in this repository. Download and Installation If you want to start from a specific tutorial module, get the name of its branch from the tutorial , download this repository and switch to the desired branch: git clone https://github.com/SAP-samples/cloud-cap-risk-management cd cloud-cap-risk-management git checkout <branch> Known Issues You can find the known issues here . How to Obtain Support Check out the documentation for: CAP aka \"capire\" SAP BTP In case you have a question, find a bug, or otherwise need support to use SAP products, use: CAP Community SAP Community SAP BTP Support Components If you face a problem with the example application or the description, feel free to create an issue . Contributing If you have suggestions on how to improve the tutorial, you are welcome to provide your input here . License Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the LICENSE file.","title":"Welcome"},{"location":"#welcome","text":"Welcome to this tutorial for application development on SAP Business Technology Platform (SAP BTP). We provide information and examples on how to develop and deploy an application based on SAP Cloud Application Programming Model (CAP) on SAP BTP using different tools and services step by step. It's planned to provide multiple modules that are built upon each other. You can start the tutorial with the first module, or start in between, because the source code for every tutorial module is provided in this repository.","title":"Welcome"},{"location":"#download-and-installation","text":"If you want to start from a specific tutorial module, get the name of its branch from the tutorial , download this repository and switch to the desired branch: git clone https://github.com/SAP-samples/cloud-cap-risk-management cd cloud-cap-risk-management git checkout <branch>","title":"Download and Installation"},{"location":"#known-issues","text":"You can find the known issues here .","title":"Known Issues"},{"location":"#how-to-obtain-support","text":"Check out the documentation for: CAP aka \"capire\" SAP BTP In case you have a question, find a bug, or otherwise need support to use SAP products, use: CAP Community SAP Community SAP BTP Support Components If you face a problem with the example application or the description, feel free to create an issue .","title":"How to Obtain Support"},{"location":"#contributing","text":"If you have suggestions on how to improve the tutorial, you are welcome to provide your input here .","title":"Contributing"},{"location":"#license","text":"Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the LICENSE file.","title":"License"},{"location":"CF-Logon/","text":"If you don't know whether you are logged on to Cloud Foundry or if you are wondering to which Cloud Foundry org and space are you logged on, you can always use cf target in a command line window to find out. If you aren't logged on already, go to your SAP BTP cockpit by using one of the following links, depending on the landscape you want to deploy to: Trial https://cockpit.hanatrial.ondemand.com/ Canary https://account.int.sap.eu2.hana.ondemand.com Live https://account.hana.ondemand.com/ Make sure you've installed the Cloud Foundry CLI (as described in Step 6: Install the Cloud Foundry command line interface ) before proceeding with the steps below. Enter your Global Account . If you are using a trial account, choose Go To Your Trial Account . Choose Account Explorer . In the Subaccounts tab, choose the subaccount to which you want to deploy your service and application. On the subaccount page, gather all the data to log in to Cloud Foundry (CF). API Endpoint Org Name Space Name Open a command line window. Set the Cloud Foundry API endpoint. cf api <API Endpoint of your landscape> Log in to your Cloud Foundry account, using your SAP BTP credentials. cf login","title":"CF Logon"},{"location":"Kyma/","text":"Run a CAP Application on Kyma Additional Documentation Administration and Operations in the Kyma Environment Preface SAP recently released the SAP Business Technology Platform, Kyma runtime , a managed Kubernetes offering with Kyma. Kyma is much about extending existing applications, but you also get a full-blown Kubernetes cluster including Istio service mesh that you can use to build a standalone cloud application. In this tutorial, you deploy an application built with the SAP Cloud Application Programming Model (CAP) to an SAP Business Technology Platform, Kyma runtime cluster. The CAP application has an OData service, SAP Fiori UI and uses SAP HANA as a database. The SAP BTP Application Development example is used as starting point. The tutorial can be also done with any other Kyma installation, but you need an SAP HANA database and an HDI container and you then need to do the part with SAP HANA credentials differently. The CAP part is probably the smallest in the tutorial: Frankly speaking, just package it into a docker container and run it. But the tutorial also describes how to get a small docker registry running. If you are experienced with Kubernetes, you can skip some sections. Since SAP HANA Cloud isn\u2019t yet available for Kyma, you take it from Cloud Foundry. It's a bit tricky to copy the credentials, but at the end it's just copying and pasting values. Scripts are provided to help you here. So, don't get distracted by this. Disclaimer Note, that this tutorial is intended to give an introduction in the topic and not for deploying productive applications. CAP doesn't officially support Kubernetes and Kyma as a platform right now. Preconditions These are preconditions to do this tutorial: SAP BTP Application Development Example You can find the starting point of this tutorial in the cap/freestyle branch: Go to the directory where you want to create the example. Create a folder for your example: For example: mkdir cap-kyma-app Clone the example GitHub repository and checkout the example branch: git clone https://github.com/SAP-samples/cloud-cap-risk-management cd cloud-cap-risk-management git checkout cap/freestyle-ui5-app Copy all files from the example to your folder, except the .git folder: For example: cp -r .gitignore $( ls -1A | grep -v .git ) ../cap-kyma-app Open a new project in your source editor for the folder cap-kyma-app : For Visual Studio Code: cd ../cap-kyma-app code . Find the final code in the kyma/app branch. Local Software The following local software is required: node ( Node.js version 12.x or 14.x is recommended) @sap/cds-dk NPM package ( npm install --global @sap/cds-dk ) docker (for example, Docker Desktop for macOS or Windows) A source code editor ( Visual Studio Code is recommended) bash or zsh shell to run the command snippets on MacOS or Linux, or Git Bash for Windows, MinGW, or Cygwin ) kubectl ( Kubernetes Command Line tool ), see this tutorial how to install it helm ( Helm Chart Command Line , not needed if you use an existing docker registry) cf ( Cloud Foundry Command Line Interface (CLI) ) git ( Git Downloads ) (For Windows users only): You have installed the SQLite tools for Windows. Find the steps how to install it in the Troubleshooting guide in the CAP documentation. If you have a Mac, many of the commands can be installed using Homebrew ( brew install ... ). For Windows, there's a similar offering called Chocolatey. Refer to the binary installers of the components otherwise. Enable Kyma in SAP BTP Subaccount You need an SAP BTP Subaccount with consumption-based model (that is, Cloud Credits). Kyma is currently supported on Azure landscapes only, as of September 2020. Although Kyma is needed at a later point in the tutorial, it\u2019s recommended to start with this step, because the Kyma provisioning can take some time. For this tutorial you have two options: Option 1: Create Your Own SAP BTP Trial Account Option 2: Use an Existing SAP BTP Subaccount Option 1: Create Your Own SAP BTP Trial Account Go to SAP BTP Cockpit . Choose Go To Your Trial Account . If you don't have a user, you need to register for a free. Wait for the completion of the on-boarding. You should land on the Subaccounts page of your Global Account on trial. Choose trial . Go to Kyma Environment . Choose Enable Kyma . Provide a Cluster Name . Choose Create . This takes a while. You can start the tutorial in the meantime. Option 2: Use Your Existing SAP BTP Subaccount If you already have an older trial account, then you might not see the Enable Kyma button. In that case: Go to Entitlements . Choose Configure Entitlements . Choose Add Service Plans . Search for and select Kyma runtime . Check the trial (Environment) checkbox. Choose Add 1 Service Plan . Choose Enable Kyma . Provide a Cluster Name . Choose Create . This takes a while. You can start the tutorial in the meantime. SAP BTP\u2019s XSUAA is used to access the Kyma runtime. Please follow the steps to assign Roles in the Kyma Environment . In some cases, it will still take 5-10 minutes to get access to Kyma Runtime. Enable Cloud Foundry To use the SAP HANA Cloud service, you can either enable Cloud Foundry for the same subaccount or use a different subaccount, for example, an already existing or trial subaccount. Install the Cloud Foundry CLI Later in this tutorial, you need to log on to Cloud Foundry using the command line. Therefore, it's necessary to install the Cloud Foundry CLI. See the Cloud Foundry documentation for detailed steps on how to do that. Run the CAP Application in a Docker Container Locally In the first part of this tutorial, you prepare your application to be run on Kyma. Build a Docker Container Since all applications in Kubernetes as in Kyma are docker containers, you need to create a docker image for the CAP application. For that, you need to define a file Dockerfile that describes, how to build up the image and what to do when the docker image is run. The file starts with the FROM directive that names the base image that you want to use since you don't want to start from scratch. Here, you use a public image that already contains the NodeJS 12.x installation. Additionally install openssl , which is required by the SAP HANA client and carry out npm install . You then declare that the CAP default port 4004 is exposed to the outside and run the CAP server with npm start . Navigate to the root folder of your app: cd cpapp Create a file named Dockerfile and add the following lines to it: FROM node:12-slim WORKDIR /usr/src/app COPY gen/srv . RUN npm install EXPOSE 4004 USER node CMD [ \"npm\" , \"start\" ] Add sqlite3 as project dependency, so you can try out the scenario without an external database service: First, the dev dependency to sqlite3 needs to be removed and then its added again as a runtime dependency. npm uninstall sqlite3 npm install sqlite3 Add the following snippet to the package.json file: { \"name\" : \"cpapp\" , ... \"cds\" : { \"requires\" : { \"db\" : { \"kind\" : \"sql\" } } } } This tells CAP to use SQLite in dev and SAP HANA in productive mode. Before you can build the image, run cds build , because the image takes the build results from the gen/srv folder. You can also do this in the docker build, but that would require additional steps that you skip for now. cds build Build the docker image locally: Make sure that the docker daemon is running (for example, Docker Desktop for MacOS or Windows). docker build -t cpapp . This builds the docker image specified in Dockerfile from the current directory ( . argument). The image is tagged with the name cpapp . Without giving a tag a random tag will be added. You should see an output similar like: ... Removing intermediate container 4f451017d70f ---> 948523646f60 Step 5 /6 : EXPOSE 4004 ---> Running in 1a2b7a0ec606 Removing intermediate container 1a2b7a0ec606 ---> be849ff002e1 Step 6 /6 : CMD [ \"npm\" , \"start\" ] ---> Running in cb0b32163709 Removing intermediate container cb0b32163709 ---> 1e0c26b94ac6 Successfully built 1e0c26b94ac6 Successfully tagged cpapp:latest Docker images consist of several \"filesystem layers\". The base image is a layer and your own docker image is a layer on top. Each layer can add or remove files. This is convenient because it saves storage because your custom images contain only the delta of files added or removed. To be more precise an image consists of multiple layers. The docker build will automatically decide when to create a new layer. You can see the different layers in the docker build output, for example: ---> 365313c4290e Run the Docker Container Check the Content of the Docker Container You can run the docker container and look inside its contents: docker run --rm -i -t cpapp /bin/bash This starts a docker container with your image ( -t cpapp ) and starts the bash shell ( /bin/bash ) that happens to be part of your base image in an interactive ( -i ) mode. Look inside the contents using the ls command: node@a5a0b8115eb5:/usr/src/app# ls manifest.yaml node_modules package-lock.json package.json srv Exit the container using exit (Pro-tip: Ctrl + D :-)). Run Your CAP Service Now, it's time to run your CAP service. So, lets do this. Run the container: docker run --rm -t cpapp Without specifying the command, it runs the default command, that is npm start . You can try to access the service at http://localhost:4004 , but it doesn't work. It shows a similar error message like this: This site can\u2019t be reached localhost refused to connect. Although the docker container exposes port 4004 , the \"host\" of the container, that is your PC or Mac, doesn't make it accessible. You need to declare it in the docker command line. Stop the service with Ctrl + C . Run the container again with the publish parameter: docker run --rm -p 4004 :4004 -t cpapp This tells docker to expose the port 4004 of the docker container to the port 4004 of the host. You could also use a different port of the host, but let's keep it simple. Now, you can access the CAP service at http://localhost:4004 . You can click on the Risks ( http://localhost:4004/service/risk/Risks ) or Mitigations * ( http://localhost:4004/service/risk/Risks ) link that returns an empty OData response. Add SAP Fiori UI There's already an SAP Fiori Elements UI for Risks and a SAPUI5 Freestyle UI for Mitigations in the project. You could think of several ways to deploy it to the cloud. For the sake of simplicity, you can use the CAP service's capability to serve static resources from the app folder. After the cds build , the app folder isn\u2019t part of the service. You can copy it in, but you need to remove the *.cds files because they\u2019re already copied from app to srv and duplicating these files confuses CAP. You can automate this in the docker build by modifying the Dockerfile . Add the highlighted lines to the file Dockerfile : FROM node:12-slim WORKDIR /usr/src/app COPY gen/srv . RUN npm install COPY app app/ RUN find app -name '*.cds' | xargs rm -f EXPOSE 4004 USER node CMD [ \"npm\" , \"start\" ] Rebuild the docker image: cds build docker build -t cpapp . Run it locally: docker run --rm -p 4004 :4004 -t cpapp Try it out by navigating to http://localhost:4004/launchpage.html . Deploy to Kyma In this part of the tutorial, you deploy the dockerized CAP application to Kyma. Log In to Kyma (Kubernetes Cluster) The first step is to log in to Kyma using the Kyma Console and configure the local kubectl command to connect to the Kyma Kubernetes cluster. Go to SAP BTP Cockpit . Choose Enter Your Trial Account . Choose your Global Account . Choose your Subaccount . On the Overview page, under Kyma Environment , choose Link to dashboard . The Kyma console should open. The console is a web-based administrative UI for Kyma. If not, see the troubleshooting information. Troubleshooting: Not enough permissions to launch the kyma console If you can not launch the kyma console, please follow the steps to get permissions: Open your subaccount. Navigate to Security --\u203a Role Collections --\u203a Trust Configuration and assign the role collection Kyma_Roles to your user. Navigate back to the subaccount overview and launch the kyma console. Choose the account icon in the upper right corner. Choose Get Kubeconfig from the dropdown menu. A file download should be triggered. If no download is triggered, see the troubleshooting information. Troubleshooting: If no download is triggered It can happen, that no download is triggered. In this case follow these steps: Open your browser's developer tools (press F12 ). Navigate to the Network tab. Choose the Get Kubeconfig button again. Locate the response of the kubeconfig file. Look at the response. Copy the response, you will need it in the next steps. Navigate to your home folder. The config for the default cluster is stored in .kube/config in your home directory. Navigate to the .kube folder. Create a file named cap-kyma-app-config to avoid overwriting the existing configuration. Copy the content of the downloaded kubeconfig.yml into the file cap-kyma-app-config . Make sure that only your user can access the content of the file, that contains your login token. For example, on Mac or Linux, change the file to be only readable and writable by your user using: chmod 0600 ~/.kube/cap-kyma-app-config Set the new config file for the running shell process: export KUBECONFIG = ~/.kube/cap-kyma-app-config Now, you can access your kubernetes cluster. Check if you can access your kubernetes cluster. kubectl get pods The command should run without an error message, but it doesn't output any pods if you have a newly created cluster. If you want to use kubectl in another shell session, then rerun the export statement. The authentication session will expire after some hours. You then need to download the kubeconfig.yml file again and replace the value of the token parameter in your cap-kyma-app-config file with the one from the newly downloaded kubeconfig.yml file. Prepare the Docker Registry Kubernetes needs a docker registry that can be accessed from the cluster's network. This could be any public or private registry. To keep this tutorial self-contained, you use a slightly different approach, which isn\u2019t recommended for productive use: You deploy your own docker registry to the cluster. If you want to use a different docker registry, then you need to adjust the docker push commands and the URLs for the docker images. In the approach with the cluster's own docker registry, a Helm Chart is used to install it on the cluster. Add the stable Helm Chart repository to the helm CLI: helm repo add stable https://charts.helm.sh/stable Install the Helm Chart for a docker registry: helm install docker-registry stable/docker-registry You need to make the docker registry available on the public internet. The details to this step are explained later. Run the following commands: kubectl apply -f - <<EOF apiVersion: gateway.kyma-project.io/v1alpha1 kind: APIRule metadata: labels: app: docker-registry name: docker-registry spec: service: host: docker-registry name: docker-registry port: 5000 gateway: kyma-gateway.kyma-system.svc.cluster.local rules: - path: /.* methods: [\"GET\", \"HEAD\" ] accessStrategies: - handler: noop mutators: [] EOF To be able to push docker images via HTTP, you need to add it as an \"insecure registry\" (not using secure socket communication) to your Docker config. Open your Docker Desktop. Choose Preferences . Choose Docker Engine . Add the following line: { ... \"insecure-registries\" : [ \"0.0.0.0:5000\" ] } Choose Apply and Restart . Wait for the startup to be completed. Push Docker Image Since the docker registry isn\u2019t exposed to the open internet (and you don't want to), you need to establish a tunnel from your localhost to the registry: kubectl port-forward deployment/docker-registry 5000 :5000 & The & causes the process to run in the background. You need to keep it running until you finished pushing docker images. You may need to start it newly in case the \"docker push\" doesn't work anymore. You should see the following output that tells you that the tunneling is established: Forwarding from 127.0.0.1:5000 -> 5000 Forwarding from [::1]:5000 -> 5000 Your docker image needs an additional tag to declare it part of your forwarded docker registry. Otherwise, you can't push it. docker tag cpapp 0 .0.0.0:5000/cpapp Push it, using the new tag: docker push 0 .0.0.0:5000/cpapp The output mixes the docker push output with the kubectl port-forward output. It should finish with a line like: ``` latest: digest: sha256:4054dd60ee4f9889d58aa97295cb3b1430a5c1549e602b6c619d7c4ed7d04ad0 size: 2412 ``` Deploy the CAP Application Now, you can deploy your CAP service to Kubernetes. You use the Deployment resource of Kubernetes to describe the application. It contains a description of the container and manages its creation and takes care that the instance keeps running. Create a directory to store your deployment YAML files: mkdir deployment Create a file deployment/deployment.yaml with the following contents: apiVersion : apps/v1 kind : Deployment metadata : name : cpapp labels : app : cpapp version : v1 spec : replicas : 1 selector : matchLabels : app : cpapp version : v1 template : metadata : labels : app : cpapp version : v1 spec : containers : - name : cpapp image : docker-registry.{{CLUSTER_DOMAIN}}/cpapp imagePullPolicy : Always ports : - containerPort : 4004 The file contains a placeholder {{CLUSER_DOMAIN}} that you need to replace with your cluster's domain. Either in the file or replacing it when applying the file. You can find your cluster's domain, for example, for the URL of the Kyma Console. If your console URL is for example https://console.c-abcd123.kyma.shoot.live.k8s-hana.ondemand.com/ , the cluster's domain is c-abcd123.kyma.shoot.live.k8s-hana.ondemand.com , just without the leading console. Apply the new configuration: kubectl apply -f deployment/deployment.yaml Or you can take it from the current kubectl configuration and replace it on deployment, like this: sed <deployment/deployment.yaml \"s/{{CLUSTER_DOMAIN}}/ $( kubectl config current-context ) /\" | kubectl apply -f - Check the state of the deployment using: kubectl get deployments Initially, it looks like this: ``` NAME READY UP-TO-DATE AVAILABLE AGE cpapp 0/1 1 0 5s ``` If all goes well, it turns to: ``` NAME READY UP-TO-DATE AVAILABLE AGE cpapp 1/1 1 1 14m ``` Since you have not exposed the app to the public internet, you can only access it with a tunnel. So, lets create another tunnel: kubectl port-forward deployment/cpapp 4004 :4004 Open the CAP service in the browser at http://localhost:4004 . Your service is now running through kubernetes. Press Ctrl + C to stop the tunnel. Expose CAP Application to the Public Internet Create a new file deployment/apirule.yaml with following content: apiVersion : v1 kind : Service metadata : name : cpapp labels : app : cpapp service : cpapp spec : ports : - port : 4004 name : http selector : app : cpapp --- apiVersion : gateway.kyma-project.io/v1alpha1 kind : APIRule metadata : labels : app : cpapp name : cpapp spec : service : host : cpapp name : cpapp port : 4004 gateway : kyma-gateway.kyma-system.svc.cluster.local rules : - path : /.* methods : [ \"GET\" , \"PUT\" , \"POST\" , \"HEAD\" , \"PATCH\" , \"DELETE\" ] accessStrategies : - handler : noop mutators : [] Apply with: kubectl apply -f deployment/apirule.yaml Look up your CAP service URL: echo \"https://cpapp. $( kubectl config current-context ) \" The console outputs your CAP service URL, for example https://cpapp.example.kyma.live.k8s-hana.ondemand.com/ . Check if you can access your service via your URL. You can also add entries to the Risks application. Add SAP HANA Cloud Your application runs on Kyma and is accessible from public internet now. Still, it works like the local development version ( cds watch ) without a real database persistence. In this step, you add support for SAP HANA. As already said, you need to provision it from Cloud Foundry and add the credentials manually. To keep the latency between the CAP service and SAP HANA low, it makes sense to provision the SAP HANA Cloud database on the same SAP BTP region as the Kyma cluster. But to try it out you can also use an SAP HANA Cloud instance from your Trial account. Prepare CAP Application for SAP HANA Cloud The hdb module needs to be added to your package.json to enable CAP to talk to an SAP HANA database. Install the hdb module: npm install --save hdb Open the package.json file. Add the following snippet for SAP HANA: { \"name\" : \"cpapp\" , ... \"cds\" : { \"requires\" : { \"db\" : { \"kind\" : \"sql\" } }, \"hana\" : { \"deploy-format\" : \"hdbtable\" } } ... } With requires.db.kind : sql you tell CAP to use SQLite in development and SAP HANA in productive mode. The setting hana.deploy-format : hdbtable is required for SAP HANA Cloud since it supports only the hdbtable and hdbview files for deployment. You now need to tell the CAP service to run in the productive mode. To do that, edit the Dockerfile and add the highlighted statement: FROM node:12-slim ENV NODE_ENV = production WORKDIR /usr/src/app COPY gen/srv . RUN npm install COPY app app/ RUN find app -name '*.cds' | xargs rm -f EXPOSE 4004 USER node CMD [ \"npm\" , \"start\" ] Rebuild the CAP project and the docker image for production: cds build --production docker build -t 0.0.0.0:5000/cpapp . docker push 0.0.0.0:5000/cpapp The command cds build uses the --production argument to build the SAP HANA artifacts. npm and node uses the environment variable NODE_ENV=production . Without that CAP falls back to \"development mode\" settings and tries to use SQLite. Create and Deploy SAP HANA HDI Container You use the cds deploy command to create an HDI container on Cloud Foundry and deploy the database schema to the container. Make sure that you are logged in to a Cloud Foundry account where an SAP HANA Cloud instance and entitlement for the service plan hana hdi-shared is available or you use an SAP BTP Trial account, run: Set the Cloud Foundry API endpoint: cf api <api-endpoint> You can find the API Endpoint URL in the overview page of your subaccount. Log on to your Cloud Foundry account: cf login Run the following line to create an HDI container: cds deploy --to hana:cpapp-kyma-db The suffix :cpapp-kyma-db tells cds deploy to create an HDI container with name cpapp-kyma-db . It also creates a service key with the name cpapp-kyma-db-key that you use to access the database in the next section. Then it deploys the database tables and the test content. It should end with something like: Finalizing... Finalizing... ok (0s 96ms) Make succeeded (0 warnings): 14 files deployed (effective 22), 0 files undeployed (effective 0), 0 dependent files redeployed Making... ok (1s 597ms) Enabling table replication for the container schema \"C5DF44CB9C08482D821F5BC3BE344FCF\"... Enabling table replication for the container schema \"C5DF44CB9C08482D821F5BC3BE344FCF\"... ok (0s 63ms) Starting make in the container \"C5DF44CB9C08482D821F5BC3BE344FCF\" with 14 files to deploy, 0 files to undeploy... ok (1s 756ms) Deploying to the container \"C5DF44CB9C08482D821F5BC3BE344FCF\"... ok (2s 211ms) No default-access-role handling needed; global role \"C5DF44CB9C08482D821F5BC3BE344FCF::access_role\" will not be adapted Unlocking the container \"C5DF44CB9C08482D821F5BC3BE344FCF\"... Unlocking the container \"C5DF44CB9C08482D821F5BC3BE344FCF\"... ok (0s 0ms) Deployment to container C5DF44CB9C08482D821F5BC3BE344FCF done [Deployment ID: none]. (4s 499ms) Application can be stopped. If it's missing, then there's probably a problem with the HDI deployer on your operating system. It can be worked around by putting the HDI deployer in a docker container as describe in the following section. Workaround: Use HDI Deployer in Docker Container Create a file Dockerfile.hdi-deploy with the following content: FROM node:12-slim AS build ENV NODE_ENV = production WORKDIR /usr/src/app RUN apt-get update RUN apt-get install -y openssl python make g++ COPY gen/db/package.json . RUN npm install COPY gen/db . CMD [ \"npm\" , \"start\" , \"--\" , \"--exit\" ] Execute the following commands and check if the output gets right this time: docker build -t cpapp-hdi-deployer -f Dockerfile.hdi-deploy . docker run --rm --env VCAP_SERVICES = '{\"hana\":[{\"credentials\": ' \" $( cf service-key cpapp-kyma-db cpapp-kyma-db-key | sed 1d ) \" ', \"name\": \"hana\",\"label\":\"hana\",\"plan\":\"hdi-shared\",\"tags\":[\"hana\"]}]}' -t cpapp-hdi-deployer Add SAP HANA HDI Container Credentials You need to somehow inject the SAP HANA credentials into the CAP application. On Cloud Foundry that is done using an environment variable called VCAP_SERVICES that takes the credentials for all bound services. Kubernetes takes a slightly different approach, it uses secrets, that can be injected into applications as environment variables. But as individual environment variables for each value. Luckily, CAP supports both. On Kyma the service credentials for SAP HANA would look like this: driver=com.sap.db.jdbc.Driver hdi_password=... hdi_user=... host=...hana.eu10.hanacloud.ondemand.com password=... port=443 schema=DE6922EF2F3449E984E2E794456B7CBE url=jdbc:sap://...hana.eu10.hanacloud.ondemand.com:443?encrypt=true&validateCertificate=true&currentschema=DE6922EF2F3449E984E2E794456B7CBE user=... Since you need to take the SAP HANA credentials from Cloud Foundry, it\u2019s easier to stick to the VCAP_SERVICES approach for now. So, let's have a look at the credentials that have been created by cds deploy : cf service-key cpapp-kyma-db cpapp-kyma-db-key The output looks like this: Ge tt i n g key `cpapp - kyma - db - key` f or service i nstan ce `cpapp - kyma - db` as MySel f ... { \"certificate\" : \"-----BEGIN CERTIFICATE-----\\n...\\n...\\n...\\n-----END CERTIFICATE-----\" , \"driver\" : \"com.sap.db.jdbc.Driver\" , \"hdi_password\" : \"...\" , \"hdi_user\" : \"...\" , \"host\" : \"...hana.eu10.hanacloud.ondemand.com\" , \"password\" : \"...\" , \"port\" : \"443\" , \"schema\" : \"C5DF44CB9C08482D821F5BC3BE344FCF\" , \"url\" : \"jdbc:sap://...hana.eu10.hanacloud.ondemand.com:443?encrypt=true\\u0026validateCertificate=true\\u0026currentschema=C5DF44CB9C08482D821F5BC3BE344FCF\" , \"user\" : \"...\" } Create a Secret for SAP HANA HDI Container Credentials As a first step, you need to upload the SAP HANA HDI container credentials from the Cloud Foundry service key to a Kubernetes secret. You build the file gen/hdi-secret.yaml with the next steps. Create the file gen/hdi-secret.yaml with the following content: apiVersion : v1 kind : Secret metadata : name : cpapp-kyma-db-secret type : opaque stringData : VCAP_SERVICES : > { \"hana\": [ { \"binding_name\": null, \"credentials\": {{CREDENTIALS}}, \"instance_name\": \"hana\", \"label\": \"hana\", \"name\": \"hana\", \"plan\": \"hdi-shared\", \"provider\": null, \"syslog_drain_url\": null, \"tags\": [ \"hana\", \"database\", \"relational\" ], \"volume_mounts\": [] } ] } Replace the {{CREDENTIALS}} variable: Option A: Replace {{CREDENTIALS}} with the JSON output of cf service-key cpapp-kyma-db cpapp-kyma-db-key (without the initial line). Create the secret on Kubernetes: kubectl apply -f gen/hdi-secret.yaml Option B: node -e 'console.log(process.argv[1].replace(\"{{CREDENTIALS}}\", process.argv[2]))' \" $( cat gen/hdi-secret.yaml ) \" \" $( cf service-key cpapp-kyma-db cpapp-kyma-db-key | sed 1d | sed 's/^/ /' ) \" | kubectl apply -f - Look at your uploaded secret: kubectl describe secret cpapp-kyma-db-secret It should be similar to the following output: NAME TYPE DATA AGE Name: cpapp-kyma-db-secret Namespace: docker-registry Labels: <none> Annotations: Type: opaque Data ==== VCAP_SERVICES: 2602 bytes Connect the CAP Application to the SAP HANA HDI Container Now, you need to inject the secret's value as environment variables into your CAP application. Add the highlighted lines to your deployment/deployment.yaml file: ... spec : containers : - name : cpapp image : docker-registry.{{CLUSTER_DOMAIN}}/cpapp imagePullPolicy : Always ports : - containerPort : 4004 envFrom : - secretRef : name : cpapp-kyma-db-secret This adds all name value pairs in the secret, currently only VCAP_SERVICES , as environment variables to the container of the deployment. Update the Kubernetes cluster with the deployment file: Option A (if you replaced {{CLUSTER_DOMAIN}} in the deployment/deployment.yaml file): kubectl apply -f deployment/deployment.yaml Option B: sed <deployment/deployment.yaml \"s/{{CLUSTER_DOMAIN}}/ $( kubectl config current-context ) /\" | kubectl apply -f - Through the deployment, you see temporarily two pods. The old pod will be deleted after the new was launched. Check the pods: kubectl get pods Output: NAME READY STATUS RESTARTS AGE cpapp-566fcb5f9b-8dfjb 2/2 Running 0 26m cpapp-66b5cb4876-hx5l6 0/2 Init:0/1 0 2s Rerun the command kubectl get pods until there\u2019s only one Running pod for the application. Get the URL of your application: echo \"https://cpapp. $( kubectl config current-context ) \" Open the URL to your application. Now, you can create some entries in the Risks application, which are stored in the SAP HANA database. Summary In the tutorial, you\u2019ve learned how to deploy a CAP application on Kyma. When the SAP HANA Cloud service is available for Kyma (Disclaimer: This isn\u2019t an SAP product commitment), it will be much easier. You can find the final code in the kyma/app branch. Troubleshooting Viewing the Application's Log You can use the following command to view the latest logs of your app: kubectl logs $(kubectl get pods -l app=cpapp -o jsonpath='{.items[0].metadata.name}') cpapp The log-level of the CAP application can be increased, by adding the environment variable DEBUG to the deployment/deployment.yaml file and apply the file again with kubectl : env: - name: DEBUG value: \"y\" Make sure that env has the same indent as envFrom . Execute Commands in the Application's Container With the following command, you can \"ssh\" to your container and start a bash shell: kubectl exec $(kubectl get pods -l app=cpapp -o jsonpath='{.items[0].metadata.name}') -t -i /bin/bash Teardown If want to quickly delete all artifacts created in this tutorial, execute the following commands: cf delete-service-key cpapp-kyma-db cpapp-kyma-db-key -f cf delete-service cpapp-kyma-db -f for i in deployment/*.yaml ; do kubectl delete -f $i done kubectl delete secret cpapp-kyma-db-secret helm uninstall docker-registry","title":"Run a CAP Application on Kyma"},{"location":"Kyma/#run-a-cap-application-on-kyma","text":"Additional Documentation Administration and Operations in the Kyma Environment","title":"Run a CAP Application on Kyma"},{"location":"Kyma/#preface","text":"SAP recently released the SAP Business Technology Platform, Kyma runtime , a managed Kubernetes offering with Kyma. Kyma is much about extending existing applications, but you also get a full-blown Kubernetes cluster including Istio service mesh that you can use to build a standalone cloud application. In this tutorial, you deploy an application built with the SAP Cloud Application Programming Model (CAP) to an SAP Business Technology Platform, Kyma runtime cluster. The CAP application has an OData service, SAP Fiori UI and uses SAP HANA as a database. The SAP BTP Application Development example is used as starting point. The tutorial can be also done with any other Kyma installation, but you need an SAP HANA database and an HDI container and you then need to do the part with SAP HANA credentials differently. The CAP part is probably the smallest in the tutorial: Frankly speaking, just package it into a docker container and run it. But the tutorial also describes how to get a small docker registry running. If you are experienced with Kubernetes, you can skip some sections. Since SAP HANA Cloud isn\u2019t yet available for Kyma, you take it from Cloud Foundry. It's a bit tricky to copy the credentials, but at the end it's just copying and pasting values. Scripts are provided to help you here. So, don't get distracted by this.","title":"Preface"},{"location":"Kyma/#disclaimer","text":"Note, that this tutorial is intended to give an introduction in the topic and not for deploying productive applications. CAP doesn't officially support Kubernetes and Kyma as a platform right now.","title":"Disclaimer"},{"location":"Kyma/#preconditions","text":"These are preconditions to do this tutorial:","title":"Preconditions"},{"location":"Kyma/#sap-btp-application-development-example","text":"You can find the starting point of this tutorial in the cap/freestyle branch: Go to the directory where you want to create the example. Create a folder for your example: For example: mkdir cap-kyma-app Clone the example GitHub repository and checkout the example branch: git clone https://github.com/SAP-samples/cloud-cap-risk-management cd cloud-cap-risk-management git checkout cap/freestyle-ui5-app Copy all files from the example to your folder, except the .git folder: For example: cp -r .gitignore $( ls -1A | grep -v .git ) ../cap-kyma-app Open a new project in your source editor for the folder cap-kyma-app : For Visual Studio Code: cd ../cap-kyma-app code . Find the final code in the kyma/app branch.","title":"SAP BTP Application Development Example"},{"location":"Kyma/#local-software","text":"The following local software is required: node ( Node.js version 12.x or 14.x is recommended) @sap/cds-dk NPM package ( npm install --global @sap/cds-dk ) docker (for example, Docker Desktop for macOS or Windows) A source code editor ( Visual Studio Code is recommended) bash or zsh shell to run the command snippets on MacOS or Linux, or Git Bash for Windows, MinGW, or Cygwin ) kubectl ( Kubernetes Command Line tool ), see this tutorial how to install it helm ( Helm Chart Command Line , not needed if you use an existing docker registry) cf ( Cloud Foundry Command Line Interface (CLI) ) git ( Git Downloads ) (For Windows users only): You have installed the SQLite tools for Windows. Find the steps how to install it in the Troubleshooting guide in the CAP documentation. If you have a Mac, many of the commands can be installed using Homebrew ( brew install ... ). For Windows, there's a similar offering called Chocolatey. Refer to the binary installers of the components otherwise.","title":"Local Software"},{"location":"Kyma/#enable-kyma-in-sap-btp-subaccount","text":"You need an SAP BTP Subaccount with consumption-based model (that is, Cloud Credits). Kyma is currently supported on Azure landscapes only, as of September 2020. Although Kyma is needed at a later point in the tutorial, it\u2019s recommended to start with this step, because the Kyma provisioning can take some time. For this tutorial you have two options: Option 1: Create Your Own SAP BTP Trial Account Option 2: Use an Existing SAP BTP Subaccount","title":"Enable Kyma in SAP BTP Subaccount"},{"location":"Kyma/#option-1-create-your-own-sap-btp-trial-account","text":"Go to SAP BTP Cockpit . Choose Go To Your Trial Account . If you don't have a user, you need to register for a free. Wait for the completion of the on-boarding. You should land on the Subaccounts page of your Global Account on trial. Choose trial . Go to Kyma Environment . Choose Enable Kyma . Provide a Cluster Name . Choose Create . This takes a while. You can start the tutorial in the meantime.","title":"Option 1: Create Your Own SAP BTP Trial Account"},{"location":"Kyma/#option-2-use-your-existing-sap-btp-subaccount","text":"If you already have an older trial account, then you might not see the Enable Kyma button. In that case: Go to Entitlements . Choose Configure Entitlements . Choose Add Service Plans . Search for and select Kyma runtime . Check the trial (Environment) checkbox. Choose Add 1 Service Plan . Choose Enable Kyma . Provide a Cluster Name . Choose Create . This takes a while. You can start the tutorial in the meantime. SAP BTP\u2019s XSUAA is used to access the Kyma runtime. Please follow the steps to assign Roles in the Kyma Environment . In some cases, it will still take 5-10 minutes to get access to Kyma Runtime.","title":"Option 2: Use Your Existing SAP BTP Subaccount"},{"location":"Kyma/#enable-cloud-foundry","text":"To use the SAP HANA Cloud service, you can either enable Cloud Foundry for the same subaccount or use a different subaccount, for example, an already existing or trial subaccount.","title":"Enable Cloud Foundry"},{"location":"Kyma/#install-the-cloud-foundry-cli","text":"Later in this tutorial, you need to log on to Cloud Foundry using the command line. Therefore, it's necessary to install the Cloud Foundry CLI. See the Cloud Foundry documentation for detailed steps on how to do that.","title":"Install the Cloud Foundry CLI"},{"location":"Kyma/#run-the-cap-application-in-a-docker-container-locally","text":"In the first part of this tutorial, you prepare your application to be run on Kyma.","title":"Run the CAP Application in a Docker Container Locally"},{"location":"Kyma/#build-a-docker-container","text":"Since all applications in Kubernetes as in Kyma are docker containers, you need to create a docker image for the CAP application. For that, you need to define a file Dockerfile that describes, how to build up the image and what to do when the docker image is run. The file starts with the FROM directive that names the base image that you want to use since you don't want to start from scratch. Here, you use a public image that already contains the NodeJS 12.x installation. Additionally install openssl , which is required by the SAP HANA client and carry out npm install . You then declare that the CAP default port 4004 is exposed to the outside and run the CAP server with npm start . Navigate to the root folder of your app: cd cpapp Create a file named Dockerfile and add the following lines to it: FROM node:12-slim WORKDIR /usr/src/app COPY gen/srv . RUN npm install EXPOSE 4004 USER node CMD [ \"npm\" , \"start\" ] Add sqlite3 as project dependency, so you can try out the scenario without an external database service: First, the dev dependency to sqlite3 needs to be removed and then its added again as a runtime dependency. npm uninstall sqlite3 npm install sqlite3 Add the following snippet to the package.json file: { \"name\" : \"cpapp\" , ... \"cds\" : { \"requires\" : { \"db\" : { \"kind\" : \"sql\" } } } } This tells CAP to use SQLite in dev and SAP HANA in productive mode. Before you can build the image, run cds build , because the image takes the build results from the gen/srv folder. You can also do this in the docker build, but that would require additional steps that you skip for now. cds build Build the docker image locally: Make sure that the docker daemon is running (for example, Docker Desktop for MacOS or Windows). docker build -t cpapp . This builds the docker image specified in Dockerfile from the current directory ( . argument). The image is tagged with the name cpapp . Without giving a tag a random tag will be added. You should see an output similar like: ... Removing intermediate container 4f451017d70f ---> 948523646f60 Step 5 /6 : EXPOSE 4004 ---> Running in 1a2b7a0ec606 Removing intermediate container 1a2b7a0ec606 ---> be849ff002e1 Step 6 /6 : CMD [ \"npm\" , \"start\" ] ---> Running in cb0b32163709 Removing intermediate container cb0b32163709 ---> 1e0c26b94ac6 Successfully built 1e0c26b94ac6 Successfully tagged cpapp:latest Docker images consist of several \"filesystem layers\". The base image is a layer and your own docker image is a layer on top. Each layer can add or remove files. This is convenient because it saves storage because your custom images contain only the delta of files added or removed. To be more precise an image consists of multiple layers. The docker build will automatically decide when to create a new layer. You can see the different layers in the docker build output, for example: ---> 365313c4290e","title":"Build a Docker Container"},{"location":"Kyma/#run-the-docker-container","text":"","title":"Run the Docker Container"},{"location":"Kyma/#check-the-content-of-the-docker-container","text":"You can run the docker container and look inside its contents: docker run --rm -i -t cpapp /bin/bash This starts a docker container with your image ( -t cpapp ) and starts the bash shell ( /bin/bash ) that happens to be part of your base image in an interactive ( -i ) mode. Look inside the contents using the ls command: node@a5a0b8115eb5:/usr/src/app# ls manifest.yaml node_modules package-lock.json package.json srv Exit the container using exit (Pro-tip: Ctrl + D :-)).","title":"Check the Content of the Docker Container"},{"location":"Kyma/#run-your-cap-service","text":"Now, it's time to run your CAP service. So, lets do this. Run the container: docker run --rm -t cpapp Without specifying the command, it runs the default command, that is npm start . You can try to access the service at http://localhost:4004 , but it doesn't work. It shows a similar error message like this: This site can\u2019t be reached localhost refused to connect. Although the docker container exposes port 4004 , the \"host\" of the container, that is your PC or Mac, doesn't make it accessible. You need to declare it in the docker command line. Stop the service with Ctrl + C . Run the container again with the publish parameter: docker run --rm -p 4004 :4004 -t cpapp This tells docker to expose the port 4004 of the docker container to the port 4004 of the host. You could also use a different port of the host, but let's keep it simple. Now, you can access the CAP service at http://localhost:4004 . You can click on the Risks ( http://localhost:4004/service/risk/Risks ) or Mitigations * ( http://localhost:4004/service/risk/Risks ) link that returns an empty OData response.","title":"Run Your CAP Service"},{"location":"Kyma/#add-sap-fiori-ui","text":"There's already an SAP Fiori Elements UI for Risks and a SAPUI5 Freestyle UI for Mitigations in the project. You could think of several ways to deploy it to the cloud. For the sake of simplicity, you can use the CAP service's capability to serve static resources from the app folder. After the cds build , the app folder isn\u2019t part of the service. You can copy it in, but you need to remove the *.cds files because they\u2019re already copied from app to srv and duplicating these files confuses CAP. You can automate this in the docker build by modifying the Dockerfile . Add the highlighted lines to the file Dockerfile : FROM node:12-slim WORKDIR /usr/src/app COPY gen/srv . RUN npm install COPY app app/ RUN find app -name '*.cds' | xargs rm -f EXPOSE 4004 USER node CMD [ \"npm\" , \"start\" ] Rebuild the docker image: cds build docker build -t cpapp . Run it locally: docker run --rm -p 4004 :4004 -t cpapp Try it out by navigating to http://localhost:4004/launchpage.html .","title":"Add SAP Fiori UI"},{"location":"Kyma/#deploy-to-kyma","text":"In this part of the tutorial, you deploy the dockerized CAP application to Kyma.","title":"Deploy to Kyma"},{"location":"Kyma/#log-in-to-kyma-kubernetes-cluster","text":"The first step is to log in to Kyma using the Kyma Console and configure the local kubectl command to connect to the Kyma Kubernetes cluster. Go to SAP BTP Cockpit . Choose Enter Your Trial Account . Choose your Global Account . Choose your Subaccount . On the Overview page, under Kyma Environment , choose Link to dashboard . The Kyma console should open. The console is a web-based administrative UI for Kyma. If not, see the troubleshooting information. Troubleshooting: Not enough permissions to launch the kyma console If you can not launch the kyma console, please follow the steps to get permissions: Open your subaccount. Navigate to Security --\u203a Role Collections --\u203a Trust Configuration and assign the role collection Kyma_Roles to your user. Navigate back to the subaccount overview and launch the kyma console. Choose the account icon in the upper right corner. Choose Get Kubeconfig from the dropdown menu. A file download should be triggered. If no download is triggered, see the troubleshooting information. Troubleshooting: If no download is triggered It can happen, that no download is triggered. In this case follow these steps: Open your browser's developer tools (press F12 ). Navigate to the Network tab. Choose the Get Kubeconfig button again. Locate the response of the kubeconfig file. Look at the response. Copy the response, you will need it in the next steps. Navigate to your home folder. The config for the default cluster is stored in .kube/config in your home directory. Navigate to the .kube folder. Create a file named cap-kyma-app-config to avoid overwriting the existing configuration. Copy the content of the downloaded kubeconfig.yml into the file cap-kyma-app-config . Make sure that only your user can access the content of the file, that contains your login token. For example, on Mac or Linux, change the file to be only readable and writable by your user using: chmod 0600 ~/.kube/cap-kyma-app-config Set the new config file for the running shell process: export KUBECONFIG = ~/.kube/cap-kyma-app-config Now, you can access your kubernetes cluster. Check if you can access your kubernetes cluster. kubectl get pods The command should run without an error message, but it doesn't output any pods if you have a newly created cluster. If you want to use kubectl in another shell session, then rerun the export statement. The authentication session will expire after some hours. You then need to download the kubeconfig.yml file again and replace the value of the token parameter in your cap-kyma-app-config file with the one from the newly downloaded kubeconfig.yml file.","title":"Log In to Kyma (Kubernetes Cluster)"},{"location":"Kyma/#prepare-the-docker-registry","text":"Kubernetes needs a docker registry that can be accessed from the cluster's network. This could be any public or private registry. To keep this tutorial self-contained, you use a slightly different approach, which isn\u2019t recommended for productive use: You deploy your own docker registry to the cluster. If you want to use a different docker registry, then you need to adjust the docker push commands and the URLs for the docker images. In the approach with the cluster's own docker registry, a Helm Chart is used to install it on the cluster. Add the stable Helm Chart repository to the helm CLI: helm repo add stable https://charts.helm.sh/stable Install the Helm Chart for a docker registry: helm install docker-registry stable/docker-registry You need to make the docker registry available on the public internet. The details to this step are explained later. Run the following commands: kubectl apply -f - <<EOF apiVersion: gateway.kyma-project.io/v1alpha1 kind: APIRule metadata: labels: app: docker-registry name: docker-registry spec: service: host: docker-registry name: docker-registry port: 5000 gateway: kyma-gateway.kyma-system.svc.cluster.local rules: - path: /.* methods: [\"GET\", \"HEAD\" ] accessStrategies: - handler: noop mutators: [] EOF To be able to push docker images via HTTP, you need to add it as an \"insecure registry\" (not using secure socket communication) to your Docker config. Open your Docker Desktop. Choose Preferences . Choose Docker Engine . Add the following line: { ... \"insecure-registries\" : [ \"0.0.0.0:5000\" ] } Choose Apply and Restart . Wait for the startup to be completed.","title":"Prepare the Docker Registry"},{"location":"Kyma/#push-docker-image","text":"Since the docker registry isn\u2019t exposed to the open internet (and you don't want to), you need to establish a tunnel from your localhost to the registry: kubectl port-forward deployment/docker-registry 5000 :5000 & The & causes the process to run in the background. You need to keep it running until you finished pushing docker images. You may need to start it newly in case the \"docker push\" doesn't work anymore. You should see the following output that tells you that the tunneling is established: Forwarding from 127.0.0.1:5000 -> 5000 Forwarding from [::1]:5000 -> 5000 Your docker image needs an additional tag to declare it part of your forwarded docker registry. Otherwise, you can't push it. docker tag cpapp 0 .0.0.0:5000/cpapp Push it, using the new tag: docker push 0 .0.0.0:5000/cpapp The output mixes the docker push output with the kubectl port-forward output. It should finish with a line like: ``` latest: digest: sha256:4054dd60ee4f9889d58aa97295cb3b1430a5c1549e602b6c619d7c4ed7d04ad0 size: 2412 ```","title":"Push Docker Image"},{"location":"Kyma/#deploy-the-cap-application","text":"Now, you can deploy your CAP service to Kubernetes. You use the Deployment resource of Kubernetes to describe the application. It contains a description of the container and manages its creation and takes care that the instance keeps running. Create a directory to store your deployment YAML files: mkdir deployment Create a file deployment/deployment.yaml with the following contents: apiVersion : apps/v1 kind : Deployment metadata : name : cpapp labels : app : cpapp version : v1 spec : replicas : 1 selector : matchLabels : app : cpapp version : v1 template : metadata : labels : app : cpapp version : v1 spec : containers : - name : cpapp image : docker-registry.{{CLUSTER_DOMAIN}}/cpapp imagePullPolicy : Always ports : - containerPort : 4004 The file contains a placeholder {{CLUSER_DOMAIN}} that you need to replace with your cluster's domain. Either in the file or replacing it when applying the file. You can find your cluster's domain, for example, for the URL of the Kyma Console. If your console URL is for example https://console.c-abcd123.kyma.shoot.live.k8s-hana.ondemand.com/ , the cluster's domain is c-abcd123.kyma.shoot.live.k8s-hana.ondemand.com , just without the leading console. Apply the new configuration: kubectl apply -f deployment/deployment.yaml Or you can take it from the current kubectl configuration and replace it on deployment, like this: sed <deployment/deployment.yaml \"s/{{CLUSTER_DOMAIN}}/ $( kubectl config current-context ) /\" | kubectl apply -f - Check the state of the deployment using: kubectl get deployments Initially, it looks like this: ``` NAME READY UP-TO-DATE AVAILABLE AGE cpapp 0/1 1 0 5s ``` If all goes well, it turns to: ``` NAME READY UP-TO-DATE AVAILABLE AGE cpapp 1/1 1 1 14m ``` Since you have not exposed the app to the public internet, you can only access it with a tunnel. So, lets create another tunnel: kubectl port-forward deployment/cpapp 4004 :4004 Open the CAP service in the browser at http://localhost:4004 . Your service is now running through kubernetes. Press Ctrl + C to stop the tunnel.","title":"Deploy the CAP Application"},{"location":"Kyma/#expose-cap-application-to-the-public-internet","text":"Create a new file deployment/apirule.yaml with following content: apiVersion : v1 kind : Service metadata : name : cpapp labels : app : cpapp service : cpapp spec : ports : - port : 4004 name : http selector : app : cpapp --- apiVersion : gateway.kyma-project.io/v1alpha1 kind : APIRule metadata : labels : app : cpapp name : cpapp spec : service : host : cpapp name : cpapp port : 4004 gateway : kyma-gateway.kyma-system.svc.cluster.local rules : - path : /.* methods : [ \"GET\" , \"PUT\" , \"POST\" , \"HEAD\" , \"PATCH\" , \"DELETE\" ] accessStrategies : - handler : noop mutators : [] Apply with: kubectl apply -f deployment/apirule.yaml Look up your CAP service URL: echo \"https://cpapp. $( kubectl config current-context ) \" The console outputs your CAP service URL, for example https://cpapp.example.kyma.live.k8s-hana.ondemand.com/ . Check if you can access your service via your URL. You can also add entries to the Risks application.","title":"Expose CAP Application to the Public Internet"},{"location":"Kyma/#add-sap-hana-cloud","text":"Your application runs on Kyma and is accessible from public internet now. Still, it works like the local development version ( cds watch ) without a real database persistence. In this step, you add support for SAP HANA. As already said, you need to provision it from Cloud Foundry and add the credentials manually. To keep the latency between the CAP service and SAP HANA low, it makes sense to provision the SAP HANA Cloud database on the same SAP BTP region as the Kyma cluster. But to try it out you can also use an SAP HANA Cloud instance from your Trial account.","title":"Add SAP HANA Cloud"},{"location":"Kyma/#prepare-cap-application-for-sap-hana-cloud","text":"The hdb module needs to be added to your package.json to enable CAP to talk to an SAP HANA database. Install the hdb module: npm install --save hdb Open the package.json file. Add the following snippet for SAP HANA: { \"name\" : \"cpapp\" , ... \"cds\" : { \"requires\" : { \"db\" : { \"kind\" : \"sql\" } }, \"hana\" : { \"deploy-format\" : \"hdbtable\" } } ... } With requires.db.kind : sql you tell CAP to use SQLite in development and SAP HANA in productive mode. The setting hana.deploy-format : hdbtable is required for SAP HANA Cloud since it supports only the hdbtable and hdbview files for deployment. You now need to tell the CAP service to run in the productive mode. To do that, edit the Dockerfile and add the highlighted statement: FROM node:12-slim ENV NODE_ENV = production WORKDIR /usr/src/app COPY gen/srv . RUN npm install COPY app app/ RUN find app -name '*.cds' | xargs rm -f EXPOSE 4004 USER node CMD [ \"npm\" , \"start\" ] Rebuild the CAP project and the docker image for production: cds build --production docker build -t 0.0.0.0:5000/cpapp . docker push 0.0.0.0:5000/cpapp The command cds build uses the --production argument to build the SAP HANA artifacts. npm and node uses the environment variable NODE_ENV=production . Without that CAP falls back to \"development mode\" settings and tries to use SQLite.","title":"Prepare CAP Application for SAP HANA Cloud"},{"location":"Kyma/#create-and-deploy-sap-hana-hdi-container","text":"You use the cds deploy command to create an HDI container on Cloud Foundry and deploy the database schema to the container. Make sure that you are logged in to a Cloud Foundry account where an SAP HANA Cloud instance and entitlement for the service plan hana hdi-shared is available or you use an SAP BTP Trial account, run: Set the Cloud Foundry API endpoint: cf api <api-endpoint> You can find the API Endpoint URL in the overview page of your subaccount. Log on to your Cloud Foundry account: cf login Run the following line to create an HDI container: cds deploy --to hana:cpapp-kyma-db The suffix :cpapp-kyma-db tells cds deploy to create an HDI container with name cpapp-kyma-db . It also creates a service key with the name cpapp-kyma-db-key that you use to access the database in the next section. Then it deploys the database tables and the test content. It should end with something like: Finalizing... Finalizing... ok (0s 96ms) Make succeeded (0 warnings): 14 files deployed (effective 22), 0 files undeployed (effective 0), 0 dependent files redeployed Making... ok (1s 597ms) Enabling table replication for the container schema \"C5DF44CB9C08482D821F5BC3BE344FCF\"... Enabling table replication for the container schema \"C5DF44CB9C08482D821F5BC3BE344FCF\"... ok (0s 63ms) Starting make in the container \"C5DF44CB9C08482D821F5BC3BE344FCF\" with 14 files to deploy, 0 files to undeploy... ok (1s 756ms) Deploying to the container \"C5DF44CB9C08482D821F5BC3BE344FCF\"... ok (2s 211ms) No default-access-role handling needed; global role \"C5DF44CB9C08482D821F5BC3BE344FCF::access_role\" will not be adapted Unlocking the container \"C5DF44CB9C08482D821F5BC3BE344FCF\"... Unlocking the container \"C5DF44CB9C08482D821F5BC3BE344FCF\"... ok (0s 0ms) Deployment to container C5DF44CB9C08482D821F5BC3BE344FCF done [Deployment ID: none]. (4s 499ms) Application can be stopped. If it's missing, then there's probably a problem with the HDI deployer on your operating system. It can be worked around by putting the HDI deployer in a docker container as describe in the following section.","title":"Create and Deploy SAP HANA HDI Container"},{"location":"Kyma/#workaround-use-hdi-deployer-in-docker-container","text":"Create a file Dockerfile.hdi-deploy with the following content: FROM node:12-slim AS build ENV NODE_ENV = production WORKDIR /usr/src/app RUN apt-get update RUN apt-get install -y openssl python make g++ COPY gen/db/package.json . RUN npm install COPY gen/db . CMD [ \"npm\" , \"start\" , \"--\" , \"--exit\" ] Execute the following commands and check if the output gets right this time: docker build -t cpapp-hdi-deployer -f Dockerfile.hdi-deploy . docker run --rm --env VCAP_SERVICES = '{\"hana\":[{\"credentials\": ' \" $( cf service-key cpapp-kyma-db cpapp-kyma-db-key | sed 1d ) \" ', \"name\": \"hana\",\"label\":\"hana\",\"plan\":\"hdi-shared\",\"tags\":[\"hana\"]}]}' -t cpapp-hdi-deployer","title":"Workaround: Use HDI Deployer in Docker Container"},{"location":"Kyma/#add-sap-hana-hdi-container-credentials","text":"You need to somehow inject the SAP HANA credentials into the CAP application. On Cloud Foundry that is done using an environment variable called VCAP_SERVICES that takes the credentials for all bound services. Kubernetes takes a slightly different approach, it uses secrets, that can be injected into applications as environment variables. But as individual environment variables for each value. Luckily, CAP supports both. On Kyma the service credentials for SAP HANA would look like this: driver=com.sap.db.jdbc.Driver hdi_password=... hdi_user=... host=...hana.eu10.hanacloud.ondemand.com password=... port=443 schema=DE6922EF2F3449E984E2E794456B7CBE url=jdbc:sap://...hana.eu10.hanacloud.ondemand.com:443?encrypt=true&validateCertificate=true&currentschema=DE6922EF2F3449E984E2E794456B7CBE user=... Since you need to take the SAP HANA credentials from Cloud Foundry, it\u2019s easier to stick to the VCAP_SERVICES approach for now. So, let's have a look at the credentials that have been created by cds deploy : cf service-key cpapp-kyma-db cpapp-kyma-db-key The output looks like this: Ge tt i n g key `cpapp - kyma - db - key` f or service i nstan ce `cpapp - kyma - db` as MySel f ... { \"certificate\" : \"-----BEGIN CERTIFICATE-----\\n...\\n...\\n...\\n-----END CERTIFICATE-----\" , \"driver\" : \"com.sap.db.jdbc.Driver\" , \"hdi_password\" : \"...\" , \"hdi_user\" : \"...\" , \"host\" : \"...hana.eu10.hanacloud.ondemand.com\" , \"password\" : \"...\" , \"port\" : \"443\" , \"schema\" : \"C5DF44CB9C08482D821F5BC3BE344FCF\" , \"url\" : \"jdbc:sap://...hana.eu10.hanacloud.ondemand.com:443?encrypt=true\\u0026validateCertificate=true\\u0026currentschema=C5DF44CB9C08482D821F5BC3BE344FCF\" , \"user\" : \"...\" }","title":"Add SAP HANA HDI Container Credentials"},{"location":"Kyma/#create-a-secret-for-sap-hana-hdi-container-credentials","text":"As a first step, you need to upload the SAP HANA HDI container credentials from the Cloud Foundry service key to a Kubernetes secret. You build the file gen/hdi-secret.yaml with the next steps. Create the file gen/hdi-secret.yaml with the following content: apiVersion : v1 kind : Secret metadata : name : cpapp-kyma-db-secret type : opaque stringData : VCAP_SERVICES : > { \"hana\": [ { \"binding_name\": null, \"credentials\": {{CREDENTIALS}}, \"instance_name\": \"hana\", \"label\": \"hana\", \"name\": \"hana\", \"plan\": \"hdi-shared\", \"provider\": null, \"syslog_drain_url\": null, \"tags\": [ \"hana\", \"database\", \"relational\" ], \"volume_mounts\": [] } ] } Replace the {{CREDENTIALS}} variable: Option A: Replace {{CREDENTIALS}} with the JSON output of cf service-key cpapp-kyma-db cpapp-kyma-db-key (without the initial line). Create the secret on Kubernetes: kubectl apply -f gen/hdi-secret.yaml Option B: node -e 'console.log(process.argv[1].replace(\"{{CREDENTIALS}}\", process.argv[2]))' \" $( cat gen/hdi-secret.yaml ) \" \" $( cf service-key cpapp-kyma-db cpapp-kyma-db-key | sed 1d | sed 's/^/ /' ) \" | kubectl apply -f - Look at your uploaded secret: kubectl describe secret cpapp-kyma-db-secret It should be similar to the following output: NAME TYPE DATA AGE Name: cpapp-kyma-db-secret Namespace: docker-registry Labels: <none> Annotations: Type: opaque Data ==== VCAP_SERVICES: 2602 bytes","title":"Create a Secret for SAP HANA HDI Container Credentials"},{"location":"Kyma/#connect-the-cap-application-to-the-sap-hana-hdi-container","text":"Now, you need to inject the secret's value as environment variables into your CAP application. Add the highlighted lines to your deployment/deployment.yaml file: ... spec : containers : - name : cpapp image : docker-registry.{{CLUSTER_DOMAIN}}/cpapp imagePullPolicy : Always ports : - containerPort : 4004 envFrom : - secretRef : name : cpapp-kyma-db-secret This adds all name value pairs in the secret, currently only VCAP_SERVICES , as environment variables to the container of the deployment. Update the Kubernetes cluster with the deployment file: Option A (if you replaced {{CLUSTER_DOMAIN}} in the deployment/deployment.yaml file): kubectl apply -f deployment/deployment.yaml Option B: sed <deployment/deployment.yaml \"s/{{CLUSTER_DOMAIN}}/ $( kubectl config current-context ) /\" | kubectl apply -f - Through the deployment, you see temporarily two pods. The old pod will be deleted after the new was launched. Check the pods: kubectl get pods Output: NAME READY STATUS RESTARTS AGE cpapp-566fcb5f9b-8dfjb 2/2 Running 0 26m cpapp-66b5cb4876-hx5l6 0/2 Init:0/1 0 2s Rerun the command kubectl get pods until there\u2019s only one Running pod for the application. Get the URL of your application: echo \"https://cpapp. $( kubectl config current-context ) \" Open the URL to your application. Now, you can create some entries in the Risks application, which are stored in the SAP HANA database.","title":"Connect the CAP Application to the SAP HANA HDI Container"},{"location":"Kyma/#summary","text":"In the tutorial, you\u2019ve learned how to deploy a CAP application on Kyma. When the SAP HANA Cloud service is available for Kyma (Disclaimer: This isn\u2019t an SAP product commitment), it will be much easier. You can find the final code in the kyma/app branch.","title":"Summary"},{"location":"Kyma/#troubleshooting","text":"","title":"Troubleshooting"},{"location":"Kyma/#viewing-the-applications-log","text":"You can use the following command to view the latest logs of your app: kubectl logs $(kubectl get pods -l app=cpapp -o jsonpath='{.items[0].metadata.name}') cpapp The log-level of the CAP application can be increased, by adding the environment variable DEBUG to the deployment/deployment.yaml file and apply the file again with kubectl : env: - name: DEBUG value: \"y\" Make sure that env has the same indent as envFrom .","title":"Viewing the Application's Log"},{"location":"Kyma/#execute-commands-in-the-applications-container","text":"With the following command, you can \"ssh\" to your container and start a bash shell: kubectl exec $(kubectl get pods -l app=cpapp -o jsonpath='{.items[0].metadata.name}') -t -i /bin/bash","title":"Execute Commands in the Application's Container"},{"location":"Kyma/#teardown","text":"If want to quickly delete all artifacts created in this tutorial, execute the following commands: cf delete-service-key cpapp-kyma-db cpapp-kyma-db-key -f cf delete-service cpapp-kyma-db -f for i in deployment/*.yaml ; do kubectl delete -f $i done kubectl delete secret cpapp-kyma-db-secret helm uninstall docker-registry","title":"Teardown"},{"location":"Tutorial-Overview/","text":"Tutorial Overview The diagram shows the order and dependency of the different modules of this tutorial. Most modules are based on each other and you need to work through them in the given sequence. Click on the boxes to go directly to the first step of the module. graph TD 1[Create a CAP Service and SAP Fiori UI] --> 2[Deploy Your CAP Service<br/> on SAP BTP, Cloud Foundry environment] click 1 \"../Create-CAP-Application\" 2[Deploy Your CAP Service<br/> on SAP BTP, Cloud Foundry environment] click 2 \"../Prepare-BTP\" 1[Create a CAP Service and SAP Fiori UI] --> 3[Run Your CAP Application <br/>on SAP BTP, Kyma runtime] click 3 \"../Kyma\" %% -- Formatting -- class 1,2,3,4 SAPcolors; classDef SAPcolors fill:#008FD3,stroke:#008FD3, color:#fff, stroke-width:4px; classDef SAPcolorsOptional fill:#CCC,stroke:#000, color:#000, stroke-width:2px, stroke-dasharray: 5 5;","title":"Tutorial Overview"},{"location":"Tutorial-Overview/#tutorial-overview","text":"The diagram shows the order and dependency of the different modules of this tutorial. Most modules are based on each other and you need to work through them in the given sequence. Click on the boxes to go directly to the first step of the module. graph TD 1[Create a CAP Service and SAP Fiori UI] --> 2[Deploy Your CAP Service<br/> on SAP BTP, Cloud Foundry environment] click 1 \"../Create-CAP-Application\" 2[Deploy Your CAP Service<br/> on SAP BTP, Cloud Foundry environment] click 2 \"../Prepare-BTP\" 1[Create a CAP Service and SAP Fiori UI] --> 3[Run Your CAP Application <br/>on SAP BTP, Kyma runtime] click 3 \"../Kyma\" %% -- Formatting -- class 1,2,3,4 SAPcolors; classDef SAPcolors fill:#008FD3,stroke:#008FD3, color:#fff, stroke-width:4px; classDef SAPcolorsOptional fill:#CCC,stroke:#000, color:#000, stroke-width:2px, stroke-dasharray: 5 5;","title":"Tutorial Overview"},{"location":"includes/Prepare-SAP-BTP-Live-or-Canary/","text":"Option 2: Create Live Account","title":"Prepare SAP BTP Live or Canary"},{"location":"includes/Prepare-SAP-BTP-Live-or-Canary/#option-2-create-live-account","text":"","title":"Option 2: Create Live Account"},{"location":"includes/SAP-BTP-Entitlements/","text":"Service Plan Amount Unit Tutorial Cloud Foundry runtime MEMORY 4 GB Deploy Your Multi-Target Application (MTA) SAP Application Logging service standard 1 instances Deploy Your Multi-Target Application (MTA) SAP HANA Schemas & HDI Containers hdi-shared 1 instances Deploy Your Multi-Target Application (MTA) SAP HANA Cloud hana 1 instances Set Up the SAP HANA Cloud Service SAP Build Work Zone, standard edition standard 1 active users Subscribe to the SAP Build Work Zone, Standard Edition SAP Event Mesh default 1 instances Set Up Your CAP Application for Eventing The services mentioned below are Utility Services, no entitlement needed Service Plan Amount Unit Tutorial SAP HTML5 Application Repository service app-host 100 MB Subscribe to the SAP Build Work Zone, Standard Edition SAP Authorization and Trust Management service application 1 instances Deploy Your Multi-Target Application (MTA)","title":"SAP BTP Entitlements"}]}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://github.com/SAP-samples/cloud-cap-risk-management/</loc>
<lastmod>2024-02-16</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://github.com/SAP-samples/cloud-cap-risk-management/CF-Logon/</loc>
<lastmod>2024-02-16</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://github.com/SAP-samples/cloud-cap-risk-management/Kyma/</loc>
<lastmod>2024-02-16</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://github.com/SAP-samples/cloud-cap-risk-management/Tutorial-Overview/</loc>
<lastmod>2024-02-16</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://github.com/SAP-samples/cloud-cap-risk-management/includes/Prepare-SAP-BTP-Live-or-Canary/</loc>
<lastmod>2024-02-16</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://github.com/SAP-samples/cloud-cap-risk-management/includes/SAP-BTP-Entitlements/</loc>
<lastmod>2024-02-16</lastmod>
<changefreq>daily</changefreq>
</url>
</urlset>
\ No newline at end of file
.codehilite .hll {
background-color: #ffff00
}
.md-grid {
max-width: 100rem;
}
.md-sidebar {
width: 15rem;
}
/* hide edit button */
a.md-content__button.md-icon {
display: none;
}
\ No newline at end of file
#!/bin/bash
read -p "Docker Server: " DOCKER_SERVER
read -p "User ($USER): " DOCKER_USER
if [ "$DOCKER_USER" == "" ]; then
DOCKER_USER="$USER"
fi
if [ "$EMAIL" == "" ]; then
read -p "EMail: " DOCKER_EMAIL
else
read -p "EMail ($EMAIL): " DOCKER_EMAIL
if [ "$DOCKER_EMAIL" == "" ]; then
DOCKER_EMAIL="$EMAIL"
fi
fi
read -sp "API Key: " API_KEY
echo
echo
kubectl create secret docker-registry container-registry \
"--docker-server=$DOCKER_SERVER" \
"--docker-username=$DOCKER_USER" \
"--docker-email=$DOCKER_EMAIL" \
"--docker-password=$API_KEY"
#!/bin/bash
set -e
cd "$(dirname "$(dirname "$0")")"
. ./scripts/values.sh
if true-value 2>/dev/null .saas_registry.enabled; then
echo >&2 "[ERROR] DB secret only required for single tenancy apps"
fi
NAME="$1"
if [ "$NAME" == "" ]; then
if [ ! -f "chart/values.yaml" ]; then
echo >&2 "[ERROR] Please either specify the name for the DB secret or maintain it in the Helm chart"
exit 1
fi
NAME="$(value .srv.bindings.db.fromSecret)"
if [ "$NAME" == "" -o "$NAME" == "<nil>" ]; then
echo >&2 "[ERROR] Please either specify the name for the DB secret or maintain it in the Helm chart"
exit 1
fi
fi
SECRET_HEADER="$(cat <<EOF
apiVersion: v1
kind: Secret
metadata:
name: $NAME
type: Opaque
stringData:
.metadata: |
{
"credentialProperties":
[
{ "name": "certificate", "format": "text"},
{ "name": "database_id", "format": "text"},
{ "name": "driver", "format": "text"},
{ "name": "hdi_password", "format": "text"},
{ "name": "hdi_user", "format": "text"},
{ "name": "host", "format": "text"},
{ "name": "password", "format": "text"},
{ "name": "port", "format": "text"},
{ "name": "schema", "format": "text"},
{ "name": "url", "format": "text"},
{ "name": "user", "format": "text"}
],
"metaDataProperties":
[
{ "name": "plan", "format": "text" },
{ "name": "label", "format": "text" },
{ "name": "type", "format": "text" },
{ "name": "tags", "format": "json" }
]
}
type: hana
label: hana
plan: hdi-shared
tags: '[ "hana", "database", "relational" ]'
EOF
)"
cf 2>/dev/null >/dev/null service $NAME || cf create-service hana hdi-shared $NAME
while true; do
STATUS="$(cf 2>/dev/null service $NAME | grep status: | head -n 1)"
echo $STATUS
if [[ "$STATUS" = *succeeded* ]]; then
break
fi
sleep 1
done
cf create-service-key $NAME $NAME-key
node "$(dirname "$0")/format-kyma-secret.js" -- "$(echo "$SECRET_HEADER")" "$(cf service-key $NAME $NAME-key)" | kubectl apply -f -
echo
echo "HANA DB Kubernetes secret '$NAME' created."
echo
echo "You can view it using:"
echo
echo "kubectl get secret $NAME -o yaml"
exit 0
\ No newline at end of file
const key=JSON.parse(process.argv[4].replace(/^.*/, ""));
const credentials=key.credentials /* new cfcli? */ || key;
console.log(process.argv[3]);
console.log(Object.keys(credentials).map(k => {
if (credentials[k].match(/\n/s))
return (` ${k}: |\n${credentials[k]}`).replace(/\n/gs,"\n ")
else
return ` ${k}: "${credentials[k]}"`
}).join("\n"))
\ No newline at end of file
function read-value() {
if [ -f .values.yaml ]; then
local VALUE="$(yaml2json <.values.yaml | jq -er "$1" || echo "")"
if [ "$VALUE" != "" -a "$VALUE" != "null" ]; then
echo "$VALUE"
return
fi
fi
local VALUE="$(helm inspect values ./chart --jsonpath="{$1}")"
echo "$VALUE"
}
function true-value() {
local VALUE="$(read-value "$1")"
if [ "$VALUE" == "" -o "$VALUE" == "false" ]; then
return 1
else
return 0
fi
}
function value() {
local VALUE="$(read-value "$1")"
if [ "$VALUE" == "" ]; then
echo >&2 "ERROR: Expect value for $1 in chart/values.yaml"
return 1
fi
echo "$VALUE"
}
function image() {
local REPOSITORY="$(value "$1.image.repository")"
local TAG="$(read-value "$1.image.tag")"
if [ "$TAG" != "" ]; then
echo "$REPOSITORY:$TAG"
else
echo "$REPOSITORY"
fi
}
This source diff could not be displayed because it is too large. You can view the blob instead.
using { sap.ui.riskmanagement as my } from '../db/schema';
using { RiskService } from './risk-service';
extend service RiskService {
@readonly
entity RisksAnalysis @(restrict : [
{
grant : [ 'READ' ],
to : [ 'RiskManager' ]
}
]) as projection on my.Risks {
*,
substring(createdAt,1,4) as riskyear:String,
cast (substring(createdAt,1,10) as Date) as createdAt
};
}
// Fix ambiguity in Mitigations.risk association ensuring it points to Risks
extend RiskService.Risks with @cds.redirection.target;
\ No newline at end of file
using RiskService as service from './risk-analysis-service';
annotate service.RisksAnalysis with {
ID @ID: 'ID';
title @title: 'Title';
descr @title: 'Description';
createdAt @title: 'Creation Date';
prio @title: 'Priority';
impact @title: 'Impact';
riskyear @title: 'Year';
};
annotate service.RisksAnalysis with @(
Common.SemanticKey : [ID],
UI.LineItem : {
$value : [
{
$Type : 'UI.DataField',
Value : title,
![@UI.Importance] : #High,
},
{
$Type : 'UI.DataField',
Value : descr,
![@UI.Importance] : #High,
},
{
$Type : 'UI.DataField',
Value : createdAt,
![@UI.Importance] : #High,
},
{
$Type : 'UI.DataField',
Value : prio,
![@UI.Importance] : #High,
},
{
$Type : 'UI.DataField',
Value : impact,
![@UI.Importance] : #High,
},
],
},
);
annotate service.RisksAnalysis with @(
Aggregation.ApplySupported : {
Rollup : #None,
PropertyRestrictions : true,
GroupableProperties : [
title,
descr,
createdAt,
impact,
prio,
riskyear,
],
AggregatableProperties : [
{
Property : prio,
},
{
Property : impact,
},
{
Property : createdAt,
},
{
Property : ID,
}
],
}
);
annotate service.RisksAnalysis with @(
Analytics.AggregatedProperties : [
{
Name : 'minAmount',
AggregationMethod : 'min',
AggregatableProperty : 'impact',
![@Common.Label] : 'Minimal Impact'
},
{
Name : 'maxAmount',
AggregationMethod : 'max',
AggregatableProperty : 'impact',
![@Common.Label] : 'Maximal Impact'
},
{
Name : 'avgAmount',
AggregationMethod : 'average',
AggregatableProperty : 'impact',
![@Common.Label] : 'Average Impact'
},
{
Name : 'sumImpact',
AggregationMethod : 'sum',
AggregatableProperty : 'impact',
![@Common.Label] : 'Total Cost Impact'
},
{
Name : 'countRisk',
AggregationMethod : 'countdistinct',
AggregatableProperty : 'ID',
![@Common.Label] : 'Number of Risks'
},
{
Name : 'countRiskYear',
AggregationMethod : 'countdistinct',
AggregatableProperty : 'riskyear',
![@Common.Label] : 'Number of Risks Per Year'
},
],
);
annotate service.RisksAnalysis with @(
UI.Chart : {
Title : 'Risk Impacts',
ChartType : #Column,
Measures : [sumImpact],
Dimensions : [riskyear],
MeasureAttributes : [{
$Type : 'UI.ChartMeasureAttributeType',
Measure : sumImpact,
Role : #Axis1
}],
DimensionAttributes : [
{
$Type : 'UI.ChartDimensionAttributeType',
Dimension : riskyear,
Role : #Category
},
{
$Type : 'UI.ChartDimensionAttributeType',
Dimension : prio,
Role : #Category
},
],
},
);
annotate service.RisksAnalysis with @(
UI.PresentationVariant #pvPrio : {
SortOrder : [
{
$Type : 'Common.SortOrderType',
Property : impact,
Descending : true
},
],
Visualizations : [
'@UI.Chart#chartPrio'
]
},
UI.SelectionVariant #svPrio : {
SelectOptions : [
{
$Type : 'UI.SelectOptionType',
PropertyName : impact,
Ranges : [
{
$Type : 'UI.SelectionRangeType',
Sign : #I,
Option : #GE,
Low : 0,
},
],
},
],
},
UI.Chart #chartPrio : {
$Type : 'UI.ChartDefinitionType',
ChartType : #Bar,
Dimensions : [
prio
],
DimensionAttributes : [
{
$Type : 'UI.ChartDimensionAttributeType',
Dimension : prio,
Role : #Category
}
],
Measures : [
sumImpact
],
MeasureAttributes : [
{
$Type : 'UI.ChartMeasureAttributeType',
Measure : sumImpact,
Role : #Axis1,
DataPoint : '@UI.DataPoint#dpPrio',
}
]
},
UI.DataPoint #dpPrio : {
Value : impact,
Title : 'Impact'
},
) {
prio @(
Common.ValueList #vlPrio: {
Label : 'Priority',
CollectionPath : 'RisksAnalysis',
SearchSupported : true,
PresentationVariantQualifier : 'pvPrio',
SelectionVariantQualifier : 'svPrio',
Parameters : [
{
$Type : 'Common.ValueListParameterInOut',
LocalDataProperty : prio,
ValueListProperty : 'prio'
},
]
}
);
};
annotate service.RisksAnalysis with @(
UI.PresentationVariant #pvPeriod : {
Text : 'FilterRisksOverPeriodPV',
SortOrder : [
{
$Type : 'Common.SortOrderType',
Property : createdAt,
Descending : true
},
],
Visualizations : [
'@UI.Chart#chartPeriod'
]
},
UI.Chart #chartPeriod : {
$Type : 'UI.ChartDefinitionType',
Title : 'Risks Over Period',
ChartType : #Line,
Dimensions : [
createdAt
],
DimensionAttributes : [
{
$Type : 'UI.ChartDimensionAttributeType',
Dimension : createdAt,
Role : #Category
}
],
Measures : [
countRisk
],
MeasureAttributes : [
{
$Type : 'UI.ChartMeasureAttributeType',
Measure : countRisk,
Role : #Axis1,
DataPoint : '@UI.DataPoint#dpPeriod',
}
]
},
UI.DataPoint #dpPeriod : {
Value : createdAt,
Title : 'Creation Date'
},
) {
createdAt @(
Common.ValueList #vlcreatedAt: {
Label : 'Creation Date',
CollectionPath : 'RisksAnalysis',
SearchSupported : true,
PresentationVariantQualifier : 'pvPeriod',
Parameters : [
{
$Type : 'Common.ValueListParameterInOut',
LocalDataProperty : createdAt,
ValueListProperty : 'createdAt'
},
]
}
);
};
const cds = require('@sap/cds')
/**
* Implementation for Risk Management service defined in ./risk-service.cds
*/
module.exports = cds.service.impl(async function() {
this.after('READ', 'Risks', risksData => {
const risks = Array.isArray(risksData) ? risksData : [risksData];
risks.forEach(risk => {
if (risk.impact >= 100000) {
risk.criticality = 1;
} else {
risk.criticality = 2;
}
});
});
});
\ No newline at end of file
ID;createdAt;createdBy;description;owner;timeline
20466921-7d57-4e76-b14c-e53fd97dcb11;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;SLA violation: authorize account manager to offer service credits for recent delivery issues;suitable BuPa;Q4 2022
20466921-7d57-4e76-b14c-e53fd97dcb12;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;"SLA violation: review third party contractors to ease service delivery challenges; trigger budget review";suitable BuPa;Q4 2022
20466921-7d57-4e76-b14c-e53fd97dcb13;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;Embargo violation: investigate source of shipment request, revoke authorization;SFSF Employee with link possible?;29.03.2023
20466921-7d57-4e76-b14c-e53fd97dcb14;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;Embargo violation: review shipment proceedure and stop delivery until further notice;SFSF Employee with link possible?;01.03.2023
\ No newline at end of file
ID;createdAt;createdBy;title;prio;descr;miti_ID;impact
20466922-7d57-4e76-b14c-e53fd97dcb11;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;CFR non-compliance ;3;Recent restructuring might violate CFR code 71;20466921-7d57-4e76-b14c-e53fd97dcb11;10000
20466922-7d57-4e76-b14c-e53fd97dcb12;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;SLA violation with possible termination cause;2;Repeated SAL violation on service delivery for two successive quarters;20466921-7d57-4e76-b14c-e53fd97dcb12;90000
20466922-7d57-4e76-b14c-e53fd97dcb13;2021-04-27T00:00:00.000Z;max.mustermann@muster.com;Shipment violating export control;1;Violation of export and trade control with unauthorized downloads;20466921-7d57-4e76-b14c-e53fd97dcb13;200000
\ No newline at end of file
namespace sap.ui.riskmanagement;
using { managed } from '@sap/cds/common';
entity Risks : managed {
key ID : UUID @(Core.Computed : true);
title : String(100);
prio : String(5);
descr : String;
miti : Association to Mitigations;
impact : Integer;
criticality : Integer;
}
entity Mitigations : managed {
key ID : UUID @(Core.Computed : true);
description : String;
owner : String;
timeline : String;
risks : Association to many Risks on risks.miti = $self;
}
using { sap.ui.riskmanagement as my } from '../db/schema';
@path: 'service/risk'
service RiskService {
entity Risks as projection on my.Risks;
annotate Risks with @odata.draft.enabled;
entity Mitigations as projection on my.Mitigations;
annotate Mitigations with @odata.draft.enabled;
}
\ No newline at end of file
using RiskService from './risk-service';
annotate RiskService.Risks with {
title @title: 'Title';
prio @title: 'Priority';
descr @title: 'Description';
miti @title: 'Mitigation';
impact @title: 'Impact';
}
annotate RiskService.Mitigations with {
ID @(
UI.Hidden,
Common: {
Text: description
}
);
description @title: 'Description';
owner @title: 'Owner';
timeline @title: 'Timeline';
risks @title: 'Risks';
}
annotate RiskService.Risks with @(
UI: {
HeaderInfo: {
TypeName: 'Risk',
TypeNamePlural: 'Risks',
Title : {
$Type : 'UI.DataField',
Value : title
},
Description : {
$Type: 'UI.DataField',
Value: descr
}
},
SelectionFields: [prio],
LineItem: [
{Value: title},
{Value: miti_ID},
{
Value: prio,
Criticality: criticality
},
{
Value: impact,
Criticality: criticality
}
],
Facets: [
{$Type: 'UI.ReferenceFacet', Label: 'Main', Target: '@UI.FieldGroup#Main'}
],
FieldGroup#Main: {
Data: [
{Value: miti_ID},
{
Value: prio,
Criticality: criticality
},
{
Value: impact,
Criticality: criticality
}
]
}
},
) {
};
annotate RiskService.Risks with {
miti @(
Common: {
//show text, not id for mitigation in the context of risks
Text: miti.description , TextArrangement: #TextOnly,
ValueList: {
Label: 'Mitigations',
CollectionPath: 'Mitigations',
Parameters: [
{ $Type: 'Common.ValueListParameterInOut',
LocalDataProperty: miti_ID,
ValueListProperty: 'ID'
},
{ $Type: 'Common.ValueListParameterDisplayOnly',
ValueListProperty: 'description'
}
]
}
}
);
}
{
"emClientId": "RISK",
"systemName": "CPAPP_S4HANA_CLOUD"
}
value;criticality
CHANGED;2
NEW;5
ASSESSED;3
\ No newline at end of file
ID;createdAt;createdBy;title;prio;descr;miti_id;impact;supplier_ID;status_value
20466922-7d57-4e76-b14c-e53fd97dcb11;2019-10-24;max.mustermann@muster.com;CFR non-compliance ;3;Recent restructuring might violate CFR code 71;20466921-7d57-4e76-b14c-e53fd97dcb11;10000;1000038;ASSESSED
20466922-7d57-4e76-b14c-e53fd97dcb12;2019-10-24;max.mustermann@muster.com;SLA violation with possible termination cause;2;Repeated SAL violation on service delivery for two successive quarters;20466921-7d57-4e76-b14c-e53fd97dcb12;90000;1000040;CHANGED
20466922-7d57-4e76-b14c-e53fd97dcb13;2019-10-24;max.mustermann@muster.com;Shipment violating export control;1;Violation of export and trade control with unauthorized downloads;20466921-7d57-4e76-b14c-e53fd97dcb13;200000;1000042;NEW
{
"emname": "cpapp-em",
"namespace": "cpapp/eventing/s4hc",
"version": "1.1.0",
"options": {
"management": true,
"messagingrest": true,
"messaging": true
},
"rules": {
"queueRules": {
"publishFilter": [
"${namespace}/*"
],
"subscribeFilter": [
"*"
]
},
"topicRules": {
"publishFilter": [
"${namespace}/*"
],
"subscribeFilter": [
"*"
]
}
}
}
\ No newline at end of file
using { API_BUSINESS_PARTNER } from './API_BUSINESS_PARTNER';
extend service API_BUSINESS_PARTNER {
@topic: 'sap.s4.beh.businesspartner.v1.BusinessPartner.Created.v1'
event Created : {
BusinessPartner : API_BUSINESS_PARTNER.A_BusinessPartner:BusinessPartner
}
@topic: 'sap.s4.beh.businesspartner.v1.BusinessPartner.Changed.v1'
event Changed : {
BusinessPartner : API_BUSINESS_PARTNER.A_BusinessPartner:BusinessPartner
}
}
\ No newline at end of file
const cds = require('@sap/cds')
module.exports = cds.service.impl(async function() {
this.after('INSERT', data => {
const { BusinessPartner } = data;
return this.emit('Created', { BusinessPartner });
});
this.after('UPDATE', data => {
const { BusinessPartner } = data;
return this.emit('Changed', { BusinessPartner });
});
});
This source diff could not be displayed because it is too large. You can view the blob instead.
BusinessPartner;BusinessPartnerFullName;BusinessPartnerIsBlocked
1000038;Williams Electric Drives;false
1000040;Smith Batteries Ltd;false
1000042;Johnson Automotive Supplies;true
ID;createdAt;createdBy;title;prio;descr;miti_id;impact;supplier_ID
20466922-7d57-4e76-b14c-e53fd97dcb11;2019-10-24;max.mustermann@muster.com;CFR non-compliance ;3;Recent restructuring might violate CFR code 71;20466921-7d57-4e76-b14c-e53fd97dcb11;10000;1000038
20466922-7d57-4e76-b14c-e53fd97dcb12;2019-10-24;max.mustermann@muster.com;SLA violation with possible termination cause;2;Repeated SAL violation on service delivery for two successive quarters;20466921-7d57-4e76-b14c-e53fd97dcb12;90000;1000040
20466922-7d57-4e76-b14c-e53fd97dcb13;2019-10-24;max.mustermann@muster.com;Shipment violating export control;1;Violation of export and trade control with unauthorized downloads;20466921-7d57-4e76-b14c-e53fd97dcb13;200000;1000042
{
"systemName": "<set in mta.yaml>",
"communicationArrangement": {
"communicationArrangementName": "CPAPP_COM_0008",
"scenarioId": "SAP_COM_0008",
"inboundAuthentication": "BasicAuthentication",
"outboundAuthentication": "BasicAuthentication",
"outboundServices": [
{
"name": "Replicate Customers from S/4 System to Client",
"isServiceActive": false
},
{
"name": "Replicate Suppliers from S/4 System to Client",
"isServiceActive": false
},
{
"name": "Replicate Company Addresses from S/4 System to Client",
"isServiceActive": false
},
{
"name": "Replicate Workplace Addresses from S/4 System to Client",
"isServiceActive": false
},
{
"name": "Replicate Personal Addresses from S/4 System to Client",
"isServiceActive": false
},
{
"name": "Business Partner - Replicate from SAP S/4HANA Cloud to Client",
"isServiceActive": false
},
{
"name": "Business Partner Relationship - Replicate from SAP S/4HANA Cloud to Client",
"isServiceActive": false
},
{
"name": "Business Partner - Send Confirmation from SAP S/4HANA Cloud to Client",
"isServiceActive": false
},
{
"name": "BP Relationship - Send Confirmation from SAP S/4HANA Cloud to Client",
"isServiceActive": false
}
],
"communicationSystem": {
"communicationSystemHostname": "default.com",
"outboundCommunicationUser": {
"username": "DefaultUser",
"password": "DefaultPassword"
}
}
}
}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script>
window['sap-ushell-config'] = {
defaultRenderer: 'fiori2',
applications: {
"risks-app": {
title: 'Risks',
description: 'Risks',
additionalInformation: 'SAPUI5.Component=ns.risks',
applicationType: 'URL',
url: "./risks/webapp",
navigationMode: 'embedded'
},
"mitigations-app": {
title: "Mitigations",
description: "Mitigations",
additionalInformation: "SAPUI5.Component=ns.mitigations",
applicationType: "URL",
url: "./mitigations/webapp",
navigationMode: "embedded"
}
}
};
</script>
<script src="https://ui5.sap.com/test-resources/sap/ushell/bootstrap/sandbox.js"></script>
<script
src="https://ui5.sap.com/resources/sap-ui-core.js"
data-sap-ui-libs="sap.m, sap.ushell, sap.fe.templates"
data-sap-ui-compatVersion="edge"
data-sap-ui-theme="sap_fiori_3"
data-sap-ui-frameOptions="allow"
data-sap-ui-bindingSyntax="complex"
></script>
<script>
sap.ui.getCore().attachInit(function() {
sap.ushell.Container.createRenderer().placeAt('content');
});
</script>
</head>
<body class="sapUiBody" id="content"></body>
</html>
{
"xsappname": "cpapp",
"tenant-mode": "dedicated",
"scopes": [
{
"name": "$XSAPPNAME.RiskViewer",
"description": "RiskViewer"
},
{
"name": "$XSAPPNAME.RiskManager",
"description": "RiskManager"
}
],
"attributes": [],
"role-templates": [
{
"name": "RiskViewer",
"description": "generated",
"scope-references": [
"$XSAPPNAME.RiskViewer"
],
"attribute-references": []
},
{
"name": "RiskManager",
"description": "generated",
"scope-references": [
"$XSAPPNAME.RiskManager"
],
"attribute-references": []
}
]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment