Codercat Studio | Cookbook

This cookbook contains a collection of useful HoudiniFX node setups. All examples are stored using the new Houdini recipe API and can be copied from this website directly into Houdini using our simple shelf tools. We also periodically make a backup of the recipes here.

Copy a snippet of interest from this page, then use Paste on the "Cookbook" shelf to paste it in.

If you would like to share a recipe, click the Create button and paste in the output of the "Copy" shelf tool. Note that you must be logged in to do so. If you have any questions or comments, feel free to reach out at codercatclub@gmail.com.

Get new recipes updates over RSS feed.

⚠️ Changelog

11.20.2025 - We updated the copy shelf tool to include the Houdini version, which is also visible on the recipes listing. Please update your shelf tools using the Python one-liner from the Recommended Install section.

📦 Recommended Install

To install Cookbook shelf tools copy this code to Houdini Python Shell and press Enter. You will see Cookbook shelf apper on the top panel.

To open Python Shell press Alt-Shift-P or go to main menu Window > Python Shell.

📂 Alternative Manual Install
⬇️ Download shelf tool file and place it to your Houdini toolbar folder:
  • Windows:
  • macOS:
  • Linux:

Replace USERNAME and X.Y with your account name and Houdini version.

Restart Houdini.

? About this project

Motivation and Goals

We created this Houdini Cookbook because:

  • We needed a way to quickly share and store small Houdini node setups. Previously, we attempted to create HDA libraries, but it was too cumbersome for our small team.
  • We believe there is a better way to share Houdini examples than by sharing entire Houdini files.
  • We enjoy sharing our small setups with the Houdini community.
  • We strongly believe in the idea of "Own Your Data," therefore we do not hold any published recipes hostage. All recipes are backed up once a day to a public Git repository here. Even if this service goes down, anyone can still download the full collection and use it directly with the Cookbook shelf tool or by using the two Python functions described below.
  • We also embrace the idea of decentralization, and we are considering open sourcing the Cookbook web service so that anyone can run it locally with their own collection or as their own public webpage. Let us know if this is something that interests you.

How Does It Work

In Houdini 20.5, SideFX introduced a new Recipe system that allows users to save collections of nodes into human-readable structured text files (JSON). Within this, they added a new collection of Python utilities (hou.data) that allows for creating and loading recipes programmatically.

In particular, the Cookbook shelf tools use hou.data.selectedItemsAsData(...) for copying nodes and hou.createItemsFromData(...) for pasting.

For this web service, we use the Go programming language and store all submitted recipes in plain text JSON files.

Worm Rig
sop
Simple cartoon rig if you ever need a cute worm sliding across the screen.
Jan 02, 2026 | 21.0.440 | animation Cooked By: hugomorais
ewogICAgIk9VVF9jZW50ZXJfb2Zmc2V0IjogewogICAgICAgICJjb2xvciI6IFsKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMC42OCwKICAgICAgICAgICAgMC42OAogICAgICAgIF0sCiAgICAgICAgImZsYWdzIjogewogICAgICAgICAgICAiY29sb3JkZWZhdWx0IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogInNldF9jZW50ZXJfb2Zmc2V0IiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICAwLAogICAgICAgICAgICAtMy4xOAogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAibnVsbCIKICAgIH0sCiAgICAiT1VUX3NwbGluZV9yaWdnZWQiOiB7CiAgICAgICAgImNvbG9yIjogWwogICAgICAgICAgICAxLAogICAgICAgICAgICAwLAogICAgICAgICAgICAwCiAgICAgICAgXSwKICAgICAgICAiZmxhZ3MiOiB7CiAgICAgICAgICAgICJjb2xvcmRlZmF1bHQiOiBmYWxzZSwKICAgICAgICAgICAgImRpc3BsYXkiOiB0cnVlLAogICAgICAgICAgICAicmVuZGVyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAic3dlZXAzIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA2LjYsCiAgICAgICAgICAgIC0xMy4xOQogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAibnVsbCIKICAgIH0sCiAgICAiX19jb29rYm9va01ldGEiOiB7CiAgICAgICAgImNvbnRleHQiOiAic29wIiwKICAgICAgICAidmVyc2lvbiI6ICIyMS4wLjQ0MCIKICAgIH0sCiAgICAiX19zdGlja3lub3RlMSI6IHsKICAgICAgICAiY29sb3IiOiBbCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgIDAuOTcsCiAgICAgICAgICAgIDAuNTIKICAgICAgICBdLAogICAgICAgICJwb3NpdGlvbiI6IFsKICAgICAgICAgICAgMTMuMjEsCiAgICAgICAgICAgIC0wLjg1CiAgICAgICAgXSwKICAgICAgICAic2l6ZSI6IFsKICAgICAgICAgICAgMi41LAogICAgICAgICAgICAyLjUKICAgICAgICBdLAogICAgICAgICJ0ZXh0IjogIlllbGxvdyBjb2RlZCBub2RlcyBhcmUgdGhlIGNvbnRyb2xsZXJzIG9mIHRoZSByaWciLAogICAgICAgICJ0ZXh0X2NvbG9yIjogWwogICAgICAgICAgICAwLAogICAgICAgICAgICAwLAogICAgICAgICAgICAwCiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJTdGlja3lOb3RlIgogICAgfSwKICAgICJhZGQxIjogewogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImF0dHJpYmRlbGV0ZTMiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJrZWVwIjogdHJ1ZSwKICAgICAgICAgICAgInN3aXRjaGVyIjogMQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA2LjYsCiAgICAgICAgICAgIC05LjczCiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJhZGQiCiAgICB9LAogICAgImF0dGFjaGpvaW50Z2VvMSI6IHsKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJjb2xvcl9lbmQiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJuYW1lMSIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAxCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgInNoYXBlcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAic2hhcGVuYW1lIyI6ICJjdHJsIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidXNlcmVzdHBvc2VhdHRyaWIiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA2LjYsCiAgICAgICAgICAgIDQuMjIKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImtpbmVmeDo6YXR0YWNoam9pbnRnZW8iLAogICAgICAgICJ1c2VyX2RhdGEiOiB7CiAgICAgICAgICAgICJkaXNwbGF5X29wdGlvbnMiOiAie1wic2hvd19qb2ludHNcIjogdHJ1ZSwgXCJzaG93X2xpbmtzXCI6IGZhbHNlLCBcInNvbGlkX2xpbmtzXCI6IHRydWUsIFwic2hvd19heGVzXCI6IGZhbHNlLCBcInNob3dfc2NlbmVfZ2VvXCI6IHRydWUsIFwic2hvd19qb2ludF9kYXRhXCI6IGZhbHNlfSIsCiAgICAgICAgICAgICJ3aXJlc3R5bGUiOiAicm91bmRlZCIKICAgICAgICB9CiAgICB9LAogICAgImF0dHJpYmRlbGV0ZTMiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAibWVyZ2UxIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAicHRkZWwiOiAiKiIKICAgICAgICB9LAogICAgICAgICJwb3NpdGlvbiI6IFsKICAgICAgICAgICAgNi42LAogICAgICAgICAgICAtOC4zMwogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAiYXR0cmliZGVsZXRlIgogICAgfSwKICAgICJiYWNrIjogewogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImRpciI6IFsKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICBdLAogICAgICAgICAgICAib3JpZ2luIjogWwogICAgICAgICAgICAgICAgMC4yNSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJwb2ludHMiOiAzCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDEwLjY5LAogICAgICAgICAgICAxOC43MwogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAibGluZSIKICAgIH0sCiAgICAiYmxhc3QxIjogewogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImF0dGFjaGpvaW50Z2VvMSIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImdyb3VwIjogIkBuYW1lPT1taWQqIiwKICAgICAgICAgICAgImdyb3VwdHlwZSI6ICJwb2ludHMiCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDUuMzYsCiAgICAgICAgICAgIDIuNjgKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImJsYXN0IgogICAgfSwKICAgICJibGFzdDMiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAicmlncG9zZTMiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJncm91cCI6ICJAbmFtZT1mcm9udF9wYXJlbnQgQG5hbWU9YmFja19wYXJlbnQiLAogICAgICAgICAgICAiZ3JvdXB0eXBlIjogInBvaW50cyIsCiAgICAgICAgICAgICJuZWdhdGUiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIDAKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImJsYXN0IgogICAgfSwKICAgICJibGFzdDQiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAiYXR0YWNoam9pbnRnZW8xIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiZ3JvdXAiOiAiQG5hbWU9PW1pZCoiLAogICAgICAgICAgICAiZ3JvdXB0eXBlIjogInBvaW50cyIsCiAgICAgICAgICAgICJuZWdhdGUiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDguMTgsCiAgICAgICAgICAgIDIuNjgKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImJsYXN0IgogICAgfSwKICAgICJibGFzdDUiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAicmlncG9zZTMiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJncm91cCI6ICJAbmFtZT1mcm9udF8qIiwKICAgICAgICAgICAgImdyb3VwdHlwZSI6ICJwb2ludHMiLAogICAgICAgICAgICAibmVnYXRlIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICAzLjcsCiAgICAgICAgICAgIC00Ljg1CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJibGFzdCIKICAgIH0sCiAgICAiYmxhc3Q2IjogewogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogIm9mZnNldF9odW1wIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiZ3JvdXAiOiAiQG5hbWU9bWlkXyoiLAogICAgICAgICAgICAiZ3JvdXB0eXBlIjogInBvaW50cyIsCiAgICAgICAgICAgICJuZWdhdGUiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDYuNzQsCiAgICAgICAgICAgIC00Ljg1CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJibGFzdCIKICAgIH0sCiAgICAiYmxhc3Q3IjogewogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogInJpZ3Bvc2UzIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiZ3JvdXAiOiAiQG5hbWU9YmFja18qIiwKICAgICAgICAgICAgImdyb3VwdHlwZSI6ICJwb2ludHMiLAogICAgICAgICAgICAibmVnYXRlIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICAxMC4wNiwKICAgICAgICAgICAgLTQuODUKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImJsYXN0IgogICAgfSwKICAgICJjbGVhbjEiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAiYmxhc3QzIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiZG9kZWxhdHRyaWJzIjogdHJ1ZSwKICAgICAgICAgICAgImRvZGVsZ3JvdXBzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICAwLAogICAgICAgICAgICAtMQogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAiY2xlYW4iCiAgICB9LAogICAgImNvbG9yX2VuZCI6IHsKICAgICAgICAiY29sb3IiOiBbCiAgICAgICAgICAgIDAuMjksCiAgICAgICAgICAgIDAuNTYsCiAgICAgICAgICAgIDAuODkKICAgICAgICBdLAogICAgICAgICJmbGFncyI6IHsKICAgICAgICAgICAgImNvbG9yZGVmYXVsdCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJjb2xvcl9taWQiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJjb2xvciI6IFsKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZ3JvdXAiOiAiQG5hbWU9KmVuZCIsCiAgICAgICAgICAgICJncm91cHR5cGUiOiAicG9pbnRzIgogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA4LjE4LAogICAgICAgICAgICA5LjEKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImNvbG9yIgogICAgfSwKICAgICJjb2xvcl9taWQiOiB7CiAgICAgICAgImNvbG9yIjogWwogICAgICAgICAgICAwLjI5LAogICAgICAgICAgICAwLjU2LAogICAgICAgICAgICAwLjg5CiAgICAgICAgXSwKICAgICAgICAiZmxhZ3MiOiB7CiAgICAgICAgICAgICJjb2xvcmRlZmF1bHQiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAiY29sb3JfcGFyZW50cyIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImNvbG9yIjogWwogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJncm91cCI6ICJAbmFtZT0qX21pZCBAbmFtZT1taWRfc2lkZV8qIiwKICAgICAgICAgICAgImdyb3VwdHlwZSI6ICJwb2ludHMiCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDguMTgsCiAgICAgICAgICAgIDEwLjEKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImNvbG9yIgogICAgfSwKICAgICJjb2xvcl9wYXJlbnRzIjogewogICAgICAgICJjb2xvciI6IFsKICAgICAgICAgICAgMC4yOSwKICAgICAgICAgICAgMC41NiwKICAgICAgICAgICAgMC44OQogICAgICAgIF0sCiAgICAgICAgImZsYWdzIjogewogICAgICAgICAgICAiY29sb3JkZWZhdWx0IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogIm5hbWUyIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiY29sb3IiOiBbCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImdyb3VwIjogIkBuYW1lPSpwYXJlbnQiLAogICAgICAgICAgICAiZ3JvdXB0eXBlIjogInBvaW50cyIKICAgICAgICB9LAogICAgICAgICJwb3NpdGlvbiI6IFsKICAgICAgICAgICAgOC4xOCwKICAgICAgICAgICAgMTEuMQogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAiY29sb3IiCiAgICB9LAogICAgImNvbnRyb2wxIjogewogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImNvbnRyb2x0eXBlIjogImNpcmNsZXMiLAogICAgICAgICAgICAib3JpZW50YXRpb24iOiAieCIsCiAgICAgICAgICAgICJzY2FsZSI6IDAuNDEKICAgICAgICB9LAogICAgICAgICJwb3NpdGlvbiI6IFsKICAgICAgICAgICAgOS44OSwKICAgICAgICAgICAgNy4zNwogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAiY29udHJvbCIKICAgIH0sCiAgICAiZnJvbnQiOiB7CiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiZGlyIjogWwogICAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICBdLAogICAgICAgICAgICAib3JpZ2luIjogWwogICAgICAgICAgICAgICAgLTAuMjUsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICBdLAogICAgICAgICAgICAicG9pbnRzIjogMwogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICAxLjI2LAogICAgICAgICAgICAxOC43MwogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAibGluZSIKICAgIH0sCiAgICAibWVyZ2UxIjogewogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImJsYXN0NSIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImJsYXN0NiIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAxCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImJsYXN0NyIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAyCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwb3NpdGlvbiI6IFsKICAgICAgICAgICAgNi42LAogICAgICAgICAgICAtNi44NAogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAibWVyZ2UiCiAgICB9LAogICAgIm1lcmdlNiI6IHsKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJmcm9udCIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogIm1pZCIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAxCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImJhY2siLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDUuODEsCiAgICAgICAgICAgIDE2LjcxCiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJtZXJnZSIKICAgIH0sCiAgICAibWlkIjogewogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImRpciI6IFsKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGlzdCI6IDAuMiwKICAgICAgICAgICAgIm9yaWdpbiI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiI6ICJjaChcImRpc3RcIikgKiAtMC41IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJwb2ludHMiOiAzCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDUuODEsCiAgICAgICAgICAgIDE5LjUyCiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJsaW5lIiwKICAgICAgICAidXNlcl9kYXRhIjogewogICAgICAgICAgICAiZGlzcGxheV9vcHRpb25zIjogIntcInNob3dfam9pbnRzXCI6IHRydWUsIFwic2hvd19saW5rc1wiOiB0cnVlLCBcInNvbGlkX2xpbmtzXCI6IGZhbHNlLCBcInNob3dfYXhlc1wiOiB0cnVlLCBcInNob3dfc2NlbmVfZ2VvXCI6IHRydWV9IgogICAgICAgIH0KICAgIH0sCiAgICAibmFtZTEiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAiY29udHJvbDEiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJudW1uYW1lcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSMiOiAiY3RybCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA5Ljg5LAogICAgICAgICAgICA2LjU4CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJuYW1lIgogICAgfSwKICAgICJuYW1lMiI6IHsKICAgICAgICAiY29sb3IiOiBbCiAgICAgICAgICAgIDAuNTgsCiAgICAgICAgICAgIDAuNzgsCiAgICAgICAgICAgIDEKICAgICAgICBdLAogICAgICAgICJmbGFncyI6IHsKICAgICAgICAgICAgImNvbG9yZGVmYXVsdCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJwYXJlbnRqb2ludHMxIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAiY2xhc3MiOiAicG9pbnQiLAogICAgICAgICAgICAibnVtbmFtZXMiOiAwLAogICAgICAgICAgICAibnVtcmVuYW1lcyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZnJvbSMiOiAicG9pbnRfMiIsCiAgICAgICAgICAgICAgICAgICAgInRvIyI6ICJmcm9udF9wYXJlbnQiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJmcm9tIyI6ICJwb2ludF8xIiwKICAgICAgICAgICAgICAgICAgICAidG8jIjogImZyb250X21pZCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImZyb20jIjogInBvaW50XzAiLAogICAgICAgICAgICAgICAgICAgICJ0byMiOiAiZnJvbnRfZW5kIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZnJvbSMiOiAicG9pbnRfNCIsCiAgICAgICAgICAgICAgICAgICAgInRvIyI6ICJtaWRfcGFyZW50IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZnJvbSMiOiAicG9pbnRfMyIsCiAgICAgICAgICAgICAgICAgICAgInRvIyI6ICJtaWRfc2lkZV9MIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZnJvbSMiOiAicG9pbnRfNSIsCiAgICAgICAgICAgICAgICAgICAgInRvIyI6ICJtaWRfc2lkZV9SIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZnJvbSMiOiAicG9pbnRfNiIsCiAgICAgICAgICAgICAgICAgICAgInRvIyI6ICJiYWNrX3BhcmVudCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImZyb20jIjogInBvaW50XzciLAogICAgICAgICAgICAgICAgICAgICJ0byMiOiAiYmFja19taWQiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJmcm9tIyI6ICJwb2ludF84IiwKICAgICAgICAgICAgICAgICAgICAidG8jIjogImJhY2tfZW5kIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDUuODEsCiAgICAgICAgICAgIDEyLjY4CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJuYW1lIgogICAgfSwKICAgICJvZmZzZXRfaHVtcCI6IHsKICAgICAgICAiY29sb3IiOiBbCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgIDAuOTMsCiAgICAgICAgICAgIDAKICAgICAgICBdLAogICAgICAgICJmbGFncyI6IHsKICAgICAgICAgICAgImNvbG9yZGVmYXVsdCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJyaWdwb3NlNiIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgInAiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iOiAiZGV0YWlsKFwiLi4vT1VUX2NlbnRlcl9vZmZzZXRcIiwgXCJjZW50ZXJcIiwgMCkiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIjogImRldGFpbChcIi4uL09VVF9jZW50ZXJfb2Zmc2V0XCIsIFwiaGVpZ2h0XCIsIDApIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA4LjE4LAogICAgICAgICAgICAwLjM2CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJ4Zm9ybSIKICAgIH0sCiAgICAicGFyZW50am9pbnRzMSI6IHsKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJyaWdkb2N0b3IyIiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAicmVwYXJlbnQiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImpvaW50IyI6ICJAbmFtZT1wb2ludF80IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiam9pbnQjIjogIkBuYW1lPXBvaW50XzMiLAogICAgICAgICAgICAgICAgICAgICJwYXJlbnQjIjogIkBuYW1lPXBvaW50XzQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJwb3NpdGlvbiI6IFsKICAgICAgICAgICAgNS44MSwKICAgICAgICAgICAgMTMuNjgKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImtpbmVmeDo6cGFyZW50am9pbnRzIiwKICAgICAgICAidXNlcl9kYXRhIjogewogICAgICAgICAgICAiZGlzcGxheV9vcHRpb25zIjogIntcInNob3dfam9pbnRzXCI6IDEsIFwic2hvd19saW5rc1wiOiAxLCBcInNvbGlkX2xpbmtzXCI6IDEsIFwic2hvd19heGVzXCI6IDAsIFwic2hvd19zY2VuZV9nZW9cIjogMH0iLAogICAgICAgICAgICAid2lyZXN0eWxlIjogInJvdW5kZWQiCiAgICAgICAgfQogICAgfSwKICAgICJyZXNhbXBsZTMiOiB7CiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAiYWRkMSIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImxlbmd0aCI6IDAuMDAxLAogICAgICAgICAgICAidHJlYXRwb2x5c2FzIjogInN1YmQiCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDYuNiwKICAgICAgICAgICAgLTEwLjkzCiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJyZXNhbXBsZSIKICAgIH0sCiAgICAicmlnZG9jdG9yMiI6IHsKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJzb3J0NCIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImluaXR0cmFuc2Zvcm1zIjogdHJ1ZSwKICAgICAgICAgICAgInNob3dkaXJlY3Rpb24iOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDUuODEsCiAgICAgICAgICAgIDE0LjY4CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJraW5lZng6OnJpZ2RvY3RvciIsCiAgICAgICAgInVzZXJfZGF0YSI6IHsKICAgICAgICAgICAgImRpc3BsYXlfb3B0aW9ucyI6ICJ7XCJzaG93X2pvaW50c1wiOiAxLCBcInNob3dfbGlua3NcIjogZmFsc2UsIFwic29saWRfbGlua3NcIjogMSwgXCJzaG93X2F4ZXNcIjogZmFsc2UsIFwic2hvd19zY2VuZV9nZW9cIjogMX0iCiAgICAgICAgfQogICAgfSwKICAgICJyaWdwb3NlMyI6IHsKICAgICAgICAiY29sb3IiOiBbCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgIDAuOTMsCiAgICAgICAgICAgIDAKICAgICAgICBdLAogICAgICAgICJmbGFncyI6IHsKICAgICAgICAgICAgImNvbG9yZGVmYXVsdCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJibGFzdDEiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJ0cmFuc2Zvcm1hdGlvbnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImdyb3VwIyI6ICJAbmFtZT1mcm9udF9lbmQiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJncm91cCMiOiAiQG5hbWU9ZnJvbnRfcGFyZW50IiwKICAgICAgICAgICAgICAgICAgICAidCMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIDAuNDAxODEwMzQ4MDMzOTA1MDMsCiAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJncm91cCMiOiAiQG5hbWU9ZnJvbnRfbWlkIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZ3JvdXAjIjogIkBuYW1lPWJhY2tfcGFyZW50IiwKICAgICAgICAgICAgICAgICAgICAiciMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDAuMTE3MzIxOTM3ODUyMzYwMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICJ0IyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgMC40NDcyOTA1Mzk3NDE1MTYxLAogICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAtMC4wMDE5Mzc4NTUzMjYxMDQ5MDkyCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZ3JvdXAjIjogIkBuYW1lPWJhY2tfbWlkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDUuMzcsCiAgICAgICAgICAgIDEuNTQKICAgICAgICBdLAogICAgICAgICJ0eXBlIjogImtpbmVmeDo6cmlncG9zZSIsCiAgICAgICAgInVzZXJfZGF0YSI6IHsKICAgICAgICAgICAgImRpc3BsYXlfb3B0aW9ucyI6ICJ7XCJzaG93X2pvaW50c1wiOiAxLCBcInNob3dfbGlua3NcIjogMCwgXCJzb2xpZF9saW5rc1wiOiAxLCBcInNob3dfYXhlc1wiOiAxLCBcInNob3dfc2NlbmVfZ2VvXCI6IDF9IgogICAgICAgIH0KICAgIH0sCiAgICAicmlncG9zZTYiOiB7CiAgICAgICAgImNvbG9yIjogWwogICAgICAgICAgICAxLAogICAgICAgICAgICAwLjkzLAogICAgICAgICAgICAwCiAgICAgICAgXSwKICAgICAgICAiZmxhZ3MiOiB7CiAgICAgICAgICAgICJjb2xvcmRlZmF1bHQiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgImlucHV0cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZyb20iOiAiYmxhc3Q0IiwKICAgICAgICAgICAgICAgICJmcm9tX2luZGV4IjogMCwKICAgICAgICAgICAgICAgICJ0b19pbmRleCI6IDAKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcm1zIjogewogICAgICAgICAgICAidHJhbnNmb3JtYXRpb25zIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJncm91cCMiOiAiQG5hbWU9bWlkX3BhcmVudCIsCiAgICAgICAgICAgICAgICAgICAgInQjIjogWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0cmFwb2xhdGlvbl9hZnRlciI6ICJleHRlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dHJhcG9sYXRpb25fYmVmb3JlIjogImV4dGVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5ZnJhbWVzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iOiAiZGV0YWlsKFwiLi4vT1VUX2NlbnRlcl9vZmZzZXRcIiwgXCJjZW50ZXJcIiwgMCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWUiOiAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIjogImRldGFpbChcIi4uL09VVF9jZW50ZXJfb2Zmc2V0XCIsIFwiY2VudGVyXCIsIDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lIjogMTY1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0cmFwb2xhdGlvbl9hZnRlciI6ICJleHRlbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dHJhcG9sYXRpb25fYmVmb3JlIjogImV4dGVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5ZnJhbWVzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24iOiAiZGV0YWlsKFwiLi4vT1VUX2NlbnRlcl9vZmZzZXRcIiwgXCJoZWlnaHRcIiwgMCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWUiOiAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHByZXNzaW9uIjogImRldGFpbChcIi4uL09VVF9jZW50ZXJfb2Zmc2V0XCIsIFwiaGVpZ2h0XCIsIDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lIjogMTY1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZ3JvdXAjIjogIkBuYW1lPW1pZF9zaWRlX1IiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJncm91cCMiOiAiQG5hbWU9bWlkX3NpZGVfTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA4LjE4LAogICAgICAgICAgICAxLjU0CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJraW5lZng6OnJpZ3Bvc2UiLAogICAgICAgICJ1c2VyX2RhdGEiOiB7CiAgICAgICAgICAgICJkaXNwbGF5X29wdGlvbnMiOiAie1wic2hvd19qb2ludHNcIjogMSwgXCJzaG93X2xpbmtzXCI6IDAsIFwic29saWRfbGlua3NcIjogMSwgXCJzaG93X2F4ZXNcIjogMSwgXCJzaG93X3NjZW5lX2dlb1wiOiAxfSIKICAgICAgICB9CiAgICB9LAogICAgInNldF9jZW50ZXJfb2Zmc2V0IjogewogICAgICAgICJjb2xvciI6IFsKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMC45MywKICAgICAgICAgICAgMAogICAgICAgIF0sCiAgICAgICAgImZsYWdzIjogewogICAgICAgICAgICAiY29sb3JkZWZhdWx0IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogImNsZWFuMSIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImRpc3RUaHJlc2hvbGQiOiAxLAogICAgICAgICAgICAiZmFsbG9mZlJhdGUiOiAxLAogICAgICAgICAgICAibWF4SGVpZ2h0IjogMSwKICAgICAgICAgICAgInNuaXBwZXQiOiAiLy8gR2V0IGluZGljZXMgb2Ygb3VyIHR3byBjb250cm9sIHBvaW50c1xuaW50IGggPSAwO1xuaW50IHQgPSAxO1xuXG4vLyBHZXQgcG9zaXRpb25zIG9mIGJvdGggcG9pbnRzXG52ZWN0b3IgUGggPSBwb2ludCgwLCBcIlBcIiwgaCk7XG52ZWN0b3IgUHQgPSBwb2ludCgwLCBcIlBcIiwgdCk7XG5cbi8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludHNcbmZsb2F0IGRpc3QgPSBkaXN0YW5jZShQaCwgUHQpO1xuXG4vLyBDYWxjdWxhdGUgY2VudGVyIHBvaW50IChtaWRkbGUgb2YgdGhlIHR3byBwb2ludHMpXG5mbG9hdCBjZW50ZXIgPSAoUGgueCArIFB0LngpICogMC41O1xuXG4vLyBVc2VyIHBhcmFtZXRlcnNcbmZsb2F0IG1heEhlaWdodCA9IGNoZihcIm1heEhlaWdodFwiKTtcbmZsb2F0IGZhbGxvZmZSYXRlID0gY2hmKFwiZmFsbG9mZlJhdGVcIik7XG5mbG9hdCBkaXN0VGhyZXNob2xkID0gY2hmKFwiZGlzdFRocmVzaG9sZFwiKTtcblxuLy8gQ2FsY3VsYXRlIGhlaWdodCB3aXRoIHRocmVzaG9sZCBhbmQgZmFsbG9mZiByYXRlXG4vLyBPbmx5IHN0YXJ0IGNhbGN1bGF0aW5nIGhlaWdodCB3aGVuIGRpc3RhbmNlIGlzIGxlc3MgdGhhbiB0aHJlc2hvbGRcbmZsb2F0IGhlaWdodDtcbmlmIChkaXN0IFx1MDAzZT0gZGlzdFRocmVzaG9sZCkge1xuICAgIGhlaWdodCA9IDA7XG59IGVsc2Uge1xuICAgIC8vIFJlbWFwIHRoZSBkaXN0YW5jZSB0byBjcmVhdGUgYSBzbW9vdGggdHJhbnNpdGlvblxuICAgIC8vIFdoZW4gZGlzdCA9IGRpc3RUaHJlc2hvbGQsIGhlaWdodCA9IDBcbiAgICAvLyBXaGVuIGRpc3QgPSAwLCBoZWlnaHQgYXBwcm9hY2hlcyBtYXhIZWlnaHRcbiAgICBmbG9hdCBhZGp1c3RlZERpc3QgPSBmaXQoZGlzdCwgMCwgZGlzdFRocmVzaG9sZCwgMCwgMSk7XG4gICAgLy8gVXNlIGZhbGxvZmZSYXRlIGFzIGFuIGV4cG9uZW50IHRvIGNvbnRyb2wgdGhlIGN1cnZlIHNoYXBlXG4gICAgaGVpZ2h0ID0gbWF4SGVpZ2h0ICogcG93KDEgLSBhZGp1c3RlZERpc3QsIGZhbGxvZmZSYXRlKTtcbn1cblxuLy8gRW5zdXJlIGhlaWdodCBuZXZlciBnb2VzIGJlbG93IHplcm9cbmhlaWdodCA9IG1heChoZWlnaHQsIDApO1xuXG4vLyBTdG9yZSB2YWx1ZXMgYXMgZGV0YWlsIGF0dHJpYnV0ZXNcbnNldGRldGFpbGF0dHJpYigwLCBcImNlbnRlclwiLCBjZW50ZXIsIFwic2V0XCIpO1xuc2V0ZGV0YWlsYXR0cmliKDAsIFwiaGVpZ2h0XCIsIGhlaWdodCwgXCJzZXRcIik7IgogICAgICAgIH0sCiAgICAgICAgInBhcm10ZW1wbGF0ZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpbnNlcnRfYWZ0ZXIiOiAidmV4X3RocmVhZGpvYnNpemUiLAogICAgICAgICAgICAgICAgInBhcm10ZW1wbGF0ZXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImZvbGRlcl9nZW5lcmF0ZWRwYXJtc19zbmlwcGV0IjogewogICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiAiR2VuZXJhdGVkIENoYW5uZWwgUGFyYW1ldGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJwYXJtdGVtcGxhdGVzIjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc3RUaHJlc2hvbGQiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogIkRpc3R0aHJlc2hvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfdmFsdWUiOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JpcHRfY2FsbGJhY2tfbGFuZ3VhZ2UiOiAiaHNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZmxvYXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhbGxvZmZSYXRlIjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6ICJGYWxsb2ZmcmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heF92YWx1ZSI6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjcmlwdF9jYWxsYmFja19sYW5ndWFnZSI6ICJoc2NyaXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJmbG9hdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4SGVpZ2h0IjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6ICJNYXhoZWlnaHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfdmFsdWUiOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JpcHRfY2FsbGJhY2tfbGFuZ3VhZ2UiOiAiaHNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZmxvYXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICJzY3JpcHRfY2FsbGJhY2tfbGFuZ3VhZ2UiOiAiaHNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0YWdzIjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgImdyb3VwX3R5cGUiOiAic2ltcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWRlZng6Omxvb2siOiAiYmxhbmsiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImZvbGRlcl9zaW1wbGUiCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicG9zaXRpb24iOiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIC0yLjA0CiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJhdHRyaWJ3cmFuZ2xlIgogICAgfSwKICAgICJzb3J0NCI6IHsKICAgICAgICAiaW5wdXRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZnJvbSI6ICJtZXJnZTYiLAogICAgICAgICAgICAgICAgImZyb21faW5kZXgiOiAwLAogICAgICAgICAgICAgICAgInRvX2luZGV4IjogMAogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGFybXMiOiB7CiAgICAgICAgICAgICJwdHNvcnQiOiAiYnl4IgogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA1LjgxLAogICAgICAgICAgICAxNS42OAogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAic29ydCIKICAgIH0sCiAgICAic3dlZXAzIjogewogICAgICAgICJpbnB1dHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmcm9tIjogInJlc2FtcGxlMyIsCiAgICAgICAgICAgICAgICAiZnJvbV9pbmRleCI6IDAsCiAgICAgICAgICAgICAgICAidG9faW5kZXgiOiAwCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwYXJtcyI6IHsKICAgICAgICAgICAgImNhcGRpdnMiOiA4LAogICAgICAgICAgICAiY29scyI6IDE2LAogICAgICAgICAgICAiZW5kY2FwdHlwZSI6ICJncmlkIiwKICAgICAgICAgICAgInN1cmZhY2VzaGFwZSI6ICJ0dWJlIgogICAgICAgIH0sCiAgICAgICAgInBvc2l0aW9uIjogWwogICAgICAgICAgICA2LjYsCiAgICAgICAgICAgIC0xMS45OQogICAgICAgIF0sCiAgICAgICAgInR5cGUiOiAic3dlZXA6OjIuMCIKICAgIH0KfQ==