openbeautyfacts 0.6.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -6
  3. data/Rakefile +5 -3
  4. data/lib/openbeautyfacts/additive.rb +9 -39
  5. data/lib/openbeautyfacts/allergen.rb +14 -22
  6. data/lib/openbeautyfacts/brand.rb +14 -22
  7. data/lib/openbeautyfacts/category.rb +14 -22
  8. data/lib/openbeautyfacts/city.rb +14 -22
  9. data/lib/openbeautyfacts/contributor.rb +14 -22
  10. data/lib/openbeautyfacts/country.rb +14 -22
  11. data/lib/openbeautyfacts/entry_date.rb +15 -23
  12. data/lib/openbeautyfacts/faq.rb +16 -41
  13. data/lib/openbeautyfacts/ingredient.rb +14 -22
  14. data/lib/openbeautyfacts/ingredient_that_may_be_from_palm_oil.rb +14 -22
  15. data/lib/openbeautyfacts/label.rb +14 -22
  16. data/lib/openbeautyfacts/last_edit_date.rb +15 -23
  17. data/lib/openbeautyfacts/locale.rb +8 -31
  18. data/lib/openbeautyfacts/manufacturing_place.rb +14 -22
  19. data/lib/openbeautyfacts/mission.rb +16 -63
  20. data/lib/openbeautyfacts/number_of_ingredients.rb +15 -23
  21. data/lib/openbeautyfacts/origin.rb +14 -22
  22. data/lib/openbeautyfacts/packager_code.rb +14 -22
  23. data/lib/openbeautyfacts/packaging.rb +14 -22
  24. data/lib/openbeautyfacts/period_after_opening.rb +14 -22
  25. data/lib/openbeautyfacts/press.rb +16 -47
  26. data/lib/openbeautyfacts/product.rb +18 -164
  27. data/lib/openbeautyfacts/product_state.rb +14 -22
  28. data/lib/openbeautyfacts/purchase_place.rb +14 -22
  29. data/lib/openbeautyfacts/store.rb +14 -22
  30. data/lib/openbeautyfacts/trace.rb +14 -22
  31. data/lib/openbeautyfacts/user.rb +15 -30
  32. data/lib/openbeautyfacts/version.rb +3 -1
  33. data/lib/openbeautyfacts.rb +6 -9
  34. data/test/fixtures/additives.yml +48 -0
  35. data/test/fixtures/brands.yml +48 -0
  36. data/test/fixtures/entry_dates.yml +48 -0
  37. data/test/fixtures/entry_dates_locale.yml +48 -0
  38. data/test/fixtures/faq.yml +48 -0
  39. data/test/fixtures/fetch_product_3600550362626.yml +54 -0
  40. data/test/fixtures/index.yml +48 -0
  41. data/test/fixtures/ingredients.yml +99 -0
  42. data/test/fixtures/ingredients_locale.yml +99 -0
  43. data/test/fixtures/last_edit_dates.yml +48 -0
  44. data/test/fixtures/last_edit_dates_locale.yml +48 -0
  45. data/test/fixtures/login_user.yml +363 -0
  46. data/test/fixtures/mission.yml +48 -0
  47. data/test/fixtures/missions.yml +48 -0
  48. data/test/fixtures/number_of_ingredients_locale.yml +48 -0
  49. data/test/fixtures/numbers_of_ingredients.yml +48 -0
  50. data/test/fixtures/press.yml +48 -0
  51. data/test/fixtures/product_3600550362626.yml +54 -0
  52. data/test/fixtures/product_states.yml +48 -0
  53. data/test/fixtures/product_states_locale.yml +48 -0
  54. data/test/fixtures/products_for_brand.yml +99 -0
  55. data/test/fixtures/products_for_entry_date.yml +99 -0
  56. data/test/fixtures/products_for_ingredient.yml +99 -0
  57. data/test/fixtures/products_for_last_edit_date.yml +99 -0
  58. data/test/fixtures/products_for_number_of_ingredients.yml +99 -0
  59. data/test/fixtures/products_for_period_after_opening.yml +99 -0
  60. data/test/fixtures/products_for_state.yml +99 -0
  61. data/test/fixtures/products_with_additive.yml +99 -0
  62. data/test/fixtures/search_doux.yml +105 -0
  63. data/test/fixtures/search_doux_1_000_000.yml +54 -0
  64. data/test/minitest_helper.rb +5 -3
  65. data/test/test_openbeautyfacts.rb +129 -97
  66. metadata +63 -21
@@ -0,0 +1,363 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://world.openfoodfacts.org/cgi/session.pl
6
+ body:
7
+ encoding: US-ASCII
8
+ string: jqm=1&user_id=wrong&password=absolutely
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - world.openfoodfacts.org
18
+ Content-Type:
19
+ - application/x-www-form-urlencoded
20
+ response:
21
+ status:
22
+ code: 403
23
+ message: Forbidden
24
+ headers:
25
+ Connection:
26
+ - close
27
+ Content-Type:
28
+ - text/html; charset=UTF-8
29
+ Date:
30
+ - Mon, 29 Sep 2025 14:07:18 GMT
31
+ Expires:
32
+ - Sun, 28 Sep 2025 14:07:18 GMT
33
+ Server:
34
+ - nginx/1.18.0
35
+ Transfer-Encoding:
36
+ - chunked
37
+ X-Content-Type-Options:
38
+ - nosniff
39
+ X-Download-Options:
40
+ - noopen
41
+ X-Request-Id:
42
+ - TPXpwOiymm6v0Pp1
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ body:
46
+ encoding: UTF-8
47
+ string: "<!-- start templates/web/common/site_layout.tt.html -->\n\n<!doctype
48
+ html>\n<html class=\"no-js\" lang=\"en\" data-serverdomain=\"openfoodfacts.org\"
49
+ dir=\"ltr\">\n<head>\n <meta charset=\"utf-8\">\n <title>Error</title>\n
50
+ \ \n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t<meta
51
+ property=\"fb:app_id\" content=\"219331381518041\">\n <meta property=\"og:type\"
52
+ content=\"food\">\n <meta property=\"og:title\" content=\"Error\">\n <meta
53
+ property=\"og:url\" content=\"https://be-fr.openfoodfacts.org\">\n \n <meta
54
+ property=\"og:image\" content=\"https://static.openfoodfacts.org/images/logos/off-logo-vertical-white-social-media-preview.png\">\n
55
+ \ <meta property=\"og:description\" content=\"A collaborative, free and
56
+ open database of ingredients, nutrition facts and information on food products
57
+ from around the world\">\n <link rel=\"apple-touch-icon\" sizes=\"180x180\"
58
+ href=\"/images/favicon/off/apple-touch-icon.png\">\n<link rel=\"icon\" type=\"image/png\"
59
+ sizes=\"32x32\" href=\"/images/favicon/off/favicon-32x32.png\">\n<link rel=\"icon\"
60
+ type=\"image/png\" sizes=\"16x16\" href=\"/images/favicon/off/favicon-16x16.png\">\n<link
61
+ rel=\"manifest\" href=\"/images/favicon/off/site.webmanifest\">\n<link rel=\"mask-icon\"
62
+ href=\"/images/favicon/off/safari-pinned-tab.svg\" color=\"#5bbad5\">\n<link
63
+ rel=\"shortcut icon\" href=\"/images/favicon/off/favicon.ico\">\n<meta name=\"msapplication-TileColor\"
64
+ content=\"#00aba9\">\n<meta name=\"msapplication-config\" content=\"/images/favicon/off/browserconfig.xml\">\n<meta
65
+ name=\"theme-color\" content=\"#ffffff\">\n\n\t<meta name=\"apple-itunes-app\"
66
+ content=\"app-id=588797948\">\n <link rel=\"canonical\" href=\"https://be-fr.openfoodfacts.org\">\n
67
+ \ <link rel=\"stylesheet\" href=\"https://static.openfoodfacts.org/css/dist/app-ltr.css?v=1758540229\"
68
+ data-base-layout=\"true\">\n <link rel=\"stylesheet\" href=\"https://static.openfoodfacts.org/css/dist/jqueryui/themes/base/jquery-ui.css\"
69
+ data-base-layout=\"true\">\n <link rel=\"stylesheet\" href=\"https://static.openfoodfacts.org/css/dist/select2.min.css\">\n
70
+ \ <link rel=\"search\" href=\"https://be-fr.openfoodfacts.org/cgi/opensearch.pl\"
71
+ type=\"application/opensearchdescription+xml\" title=\"Open Food Facts\">\n
72
+ \ <script type=\"module\" src=\"https://static.openfoodfacts.org/js/dist/off-webcomponents.bundled.js\"></script>\n\t\n
73
+ \ <style media=\"all\">\n \n\t\t\n\t\t.badge-container{\n\t\t\tmargin:
74
+ 0 auto;\n\t\t}\n\n\t\t.badge-container img{\n\t\t\tmargin: 5px;\n\t\t}\n\t\t@media
75
+ only screen and (max-width: 537px ) and (min-width: 280px) {\n\t\t\t.badge-container{\n\t\t\t\twidth:
76
+ 280px;\n\t\t\t}\n\t\t}\n\t\t@media only screen and (max-width: 279px ){\n\t\t\t.badge-container{\n\t\t\t\twidth:
77
+ 130px;\n\t\t\t}\n\t\t}\n </style>\n</head>\n<body class=\"error_page\">\n\n\t<!--
78
+ Matomo -->\n<script>\n var _paq = window._paq = window._paq || [];\n /*
79
+ tracker methods like \"setCustomDimension\" should be called before \"trackPageView\"
80
+ */\n _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]);\n
81
+ \ _paq.push([\"setCookieDomain\", \"*.openfoodfacts.org\"]);\n _paq.push([\"setDomains\",
82
+ [\"*.openfoodfacts.org\"]]);\n _paq.push([\"setDoNotTrack\", true]);\n _paq.push([\"disableCookies\"]);\n
83
+ \ _paq.push(['trackPageView']);\n _paq.push(['enableLinkTracking']);\n (function()
84
+ {\n var u=\"//analytics.openfoodfacts.org/\";\n _paq.push(['setTrackerUrl',
85
+ u+'matomo.php']);\n _paq.push(['setSiteId', '5']);\n var d=document,
86
+ g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n g.async=true;
87
+ g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);\n })();\n</script>\n<noscript><p><img
88
+ src=\"//analytics.openfoodfacts.org/matomo.php?idsite=5&amp;rec=1\" style=\"border:0;\"
89
+ alt=\"\" /></p></noscript>\n<!-- End Matomo Code -->\n\n\n\n\t<off-webcomponents-configuration\n
90
+ \ language-code=\"en\"\n country-code=\"world\"\n robotoff-configuration='{\n
91
+ \ \"apiUrl\": \"https://robotoff.openfoodfacts.org/api/v1\",\n \"imgUrl\":
92
+ \"https://images.openfoodfacts.org/images/products\"\n }'\n \n openfoodfacts-api-url=\"https://be-fr.openfoodfacts.org\"\n
93
+ \ assets-images-path=\"https://static.openfoodfacts.org/css/dist/images\"\n
94
+ \ ></off-webcomponents-configuration>\n\t\n\t\n\t<div class=\"skip\"><a href=\"#content\"
95
+ tabindex=\"0\">Skip to Content</a></div>\n\t\n\n\t<div id=\"barcode-scanner-modal\"
96
+ class=\"modal is_hidden\">\n <div class=\"modal-backdrop\"></div>\n <div
97
+ class=\"modal-content\">\n <div class=\"modal-header\">\n <span><h2>Scan
98
+ a product<h2></span>\n <button class=\"modal-close-button\">&times;</button>\n
99
+ \ </div>\n <div>\n <barcode-scanner id=\"barcode-scanner\"></barcode-scanner>\n
100
+ \ </div>\n <div>\n </div>\n <div >\n <label for=\"barcode-modal-input\">Or
101
+ enter barcode manually</label>\n <div class=\"barcode-modal-group\">\n
102
+ \ <input type=\"text\" id=\"barcode-modal-input\" class=\"barcode-modal-input\"
103
+ inputmode=\"numeric\" pattern=\"\\d*\" />\n <button class=\"barcode-modal-button
104
+ button\" id=\"barcode-modal-button\" disabled>Scan</button>\n </div>\n
105
+ \ </div>\n </div>\n</div>\n\n<script src=\"https://static.openfoodfacts.org/js/dist/barcode-scanner.js\"></script>\n\n\n\t<div
106
+ id=\"page\">\n\t\t\n\t\t<div class=\"upper-nav contain-to-grid\" id=\"upNav\">\n\t\t\t<nav
107
+ class=\"top-bar \" data-topbar role=\"navigation\">\n\t\t\t\t\n\t\t\t\t<section
108
+ class=\"top-bar-section\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Left Nav Section -->\n\t\t\t\t\t<ul
109
+ class=\"left\">\n\n\t\t\t\t\t\t<li class=\"has-dropdown\">\n\t\t\t\t\t\t\t<a
110
+ id=\"menu_link\">\n\t\t\t\t\t\t\t\t<span class=\"material-icons\">\n\t\t\t\t\t\t\t\t\tmenu\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<ul
111
+ class=\"dropdown\">\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<li><a href=\"/discover\">Discover</a></li>\n\t\t\t\t\t\t\t\t\t<li><a
112
+ href=\"/contribute\">Contribute</a></li>\n\t\t\t\t\t\t\t\t\t<li class=\"divider\"></li>\n\t\t\t\t\t\t\t\t\t<li><label>Add
113
+ products</label></li>\n <!-- For reference: get_the_app_link_off\"
114
+ = /open-food-facts-mobile-app\" -->\n\t\t\t\t\t\t\t\t\t<li><a href=\"/open-food-facts-mobile-app?utm_source=off&utf_medium=web&utm_campaign=pro_platform_install_the_app_to_add_products_en\">Install
115
+ the app to add products</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"/cgi/product.pl?type=search_or_add&action=display\">Add
116
+ a product</a></li>\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t<li class=\"divider\"></li>\n\t\t\t\t\t\t\t\t<li><label>Search
117
+ and analyze products</label></li>\n\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<a
118
+ href=\"/cgi/search.pl\">Advanced search</a>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<a
119
+ href=\"/cgi/search.pl?graph=1\">Graphs and maps</a>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<ul
120
+ class=\"country_language_selection\">\n\t\t\t\t\t\t\t\t<li class=\"has-form
121
+ has-dropdown\" id=\"select_country_li\">\n\t\t\t\t\t\t\t\t\t<select id=\"select_country\"
122
+ style=\"width:100%\" data-placeholder=\"Country\">\n\t\t\t\t\t\t\t\t\t\t<option></option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li
123
+ class=\"has-dropdown\">\n\t\t\t\t\t\t\t\t\t<a href=\"https://world.openfoodfacts.org/\">English</a>\n\n\t\t\t\t\t\t\t\t\t<ul
124
+ class=\"dropdown\">\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\n\n\t\t\t\t\t<!--
125
+ Right Nav Section -->\n\t\t\t\t\t\n\t\t\t\t\t<ul class=\"right\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<li
126
+ class=\"h-space-tiny has-form\">\n\t\t\t\t\t\t\t\t<a href=\"/cgi/session.pl\"
127
+ class=\"round button secondary\">\n\t\t\t\t\t\t\t\t\t<span class=\"material-icons
128
+ material-symbols-button\">account_circle</span>\n\t\t\t\t\t\t\t\t\tSign in\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\n\t\t\t\t\t</ul>\n\t\t\t\t</section>\n\t\t\t</nav>\n\t\t</div>\n\t\t\n\n\t\t<div
129
+ id=\"main_container\" style=\"position:relative\" class=\"block_latte\">\n\t\t\n\t\t\n\t\t<div
130
+ class=\"topbarsticky\">\n\t\t\t<div class=\"contain-to-grid \" id=\"offNav\"
131
+ >\n\t\t\t\t<nav class=\"top-bar\" data-topbar role=\"navigation\" >\n\n\t\t\t\t\t<ul
132
+ class=\"title-area\">\n\t\t\t\t\t\t<li class=\"name\">\n\t\t\t\t\t\t\t<div
133
+ style=\"position:relative;max-width:292px;\">\n\t\t\t\t\t\t\t\t<a href=\"/\">\n\t\t\t\t\t\t\t\t<img
134
+ id=\"logo\" src=\"https://static.openfoodfacts.org/images/logos/off-logo-horizontal-light.svg\"
135
+ alt=\"Open Food Facts\" style=\"margin:8px;height:48px;width:auto;\">\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<section
136
+ class=\"top-bar-section\">\n\t\t\t\t\t\n\t\t\t\t\t\t<ul class=\"left small-4\">\n\t\t\t\t\t\t\t<li
137
+ class=\"search-li\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<form action=\"/cgi/search.pl\">\n\t\t\t\t\t\t\t\t<div
138
+ class=\"row\"><div class=\"small-12\">\n\t\t\t\t\t\t\t\t<div class=\"row collapse
139
+ postfix-round\">\n\t\t\t\t\t\t\t\t\t<div class=\"columns\">\n\t\t\t\t\t\t\t\t\t<input
140
+ type=\"text\" placeholder=\"Search for a product\" name=\"search_terms\" value=\"\"
141
+ style=\"background-color:white\">\n\t\t\t\t\t\t\t\t\t<input name=\"search_simple\"
142
+ value=\"1\" type=\"hidden\">\n\t\t\t\t\t\t\t\t\t<input name=\"action\" value=\"process\"
143
+ type=\"hidden\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"columns
144
+ postfix-button-wrapper\">\n\t\t\t\t\t\t\t\t\t<button type=\"submit\" title=\"Search\"
145
+ class=\"button postfix\" style=\"line-height:normal\"><svg xmlns=\"http://www.w3.org/2000/svg\"
146
+ viewBox=\"0 0 24 24\" class=\"icon\" aria-hidden=\"true\" focusable=\"false\"><path
147
+ d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5
148
+ 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49
149
+ 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14
150
+ 9.5 14z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg></button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div
151
+ class=\"columns postfix-button-wrapper is_hidden\">\n <button\n type=\"button\"\n
152
+ \ title=\"Scan a product\"\n class=\"button barcode-scanner-button\"\n
153
+ \ id=\"barcode-scanner-button\"\n >\n <svg style=\"width:24px;height:24px\"
154
+ viewBox=\"0 0 24 24\" class=\"icon\" aria-hidden=\"true\" focusable=\"false\"><path
155
+ d=\"M2,6H4V18H2V6M5,6H6V18H5V6M7,6H10V18H7V6M11,6H12V18H11V6M14,6H16V18H14V6M17,6H20V18H17V6M21,6H22V18H21V6Z\"/></svg>\n
156
+ \ </button>\n\n <script src=\"https://static.openfoodfacts.org/js/dist/barcode-scanner-button.js\"></script>\n</div>\n\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div></div>\n\t\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t<ul
157
+ class=\"search_and_links\">\n\t\t\t\t\t\t<li><a href=\"/discover\" class=\"top-bar-links\">Discover</a></li>\n\t\t\t\t\t\t<li><a
158
+ href=\"/contribute\" class=\"top-bar-links\">Contribute</a></li>\n\t\t\t\t\t\t<li
159
+ class=\"show-for-xlarge-up\"><a href=\"https://world.pro.openfoodfacts.org/\"
160
+ class=\"top-bar-links\">Producers</a></li>\n\t\t\t\t\t\t<li class=\"flex-grid
161
+ getapp\"><a href=\"/open-food-facts-mobile-app?utm_source=off&utf_medium=web&utm_campaign=search_and_links_promo_en\"
162
+ class=\"buttonbar button\" style=\"top:0;\"><svg xmlns=\"http://www.w3.org/2000/svg\"
163
+ viewBox=\"0 0 24 24\" class=\"icon\" aria-hidden=\"true\" focusable=\"false\"><path
164
+ d=\"M16 1H8C6.34 1 5 2.34 5 4v16c0 1.66 1.34 3 3 3h8c1.66 0 3-1.34 3-3V4c0-1.66-1.34-3-3-3zm-2
165
+ 20h-4v-1h4v1zm3.25-3H6.75V4h10.5v14z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>
166
+ <span class=\"bt-text\">Get the app</span></a></li>\n\t\t\t\t<!-- For reference:
167
+ get_the_app_link_off\" = /open-food-facts-mobile-app\" -->\n </ul>\n\t\t\t\t\t</section>\n\t\t\t\t\t\n\t\t\t\t</nav>\n\t\t\t</div>\n\t\t</div>\n\n\t\n\t\n\t\t<nav
168
+ class=\"tab-bar hide\">\n\t\t\t<div class=\"left-small\">\n\t\t\t\t<a href=\"#idOfLeftMenu\"
169
+ role=\"button\" aria-controls=\"idOfLeftMenu\" aria-expanded=\"false\" class=\"left-off-canvas-toggle
170
+ button postfix anonymous\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\"
171
+ viewBox=\"0 0 24 24\" class=\"icon\" aria-hidden=\"true\" focusable=\"false\"><path
172
+ d=\"M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2H5c-1.11 0-2
173
+ .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2
174
+ 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<div
175
+ class=\"middle tab-bar-section\">\n\t\t\t\t<form action=\"/cgi/search.pl\">\n\t\t\t\t\t<div
176
+ class=\"row collapse\">\n\t\t\t\t\t\t<div class=\"small-8 columns\">\n\t\t\t\t\t\t\t<input
177
+ type=\"text\" placeholder=\"Search for a product\" name=\"search_terms\">\n\t\t\t\t\t\t\t<input
178
+ name=\"search_simple\" value=\"1\" type=\"hidden\">\n\t\t\t\t\t\t\t<input
179
+ name=\"action\" value=\"process\" type=\"hidden\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div
180
+ class=\"small-2 columns\">\n\t\t\t\t\t\t\t<button type=\"submit\" class=\"button
181
+ postfix\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"
182
+ class=\"icon\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15.5 14h-.79l-.28-.27C15.41
183
+ 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61
184
+ 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99
185
+ 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/><path d=\"M0 0h24v24H0z\"
186
+ fill=\"none\"/></svg></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"small-2
187
+ columns\">\n\t\t\t\t\t\t\t<a href=\"/cgi/search.pl\" title=\"Advanced search\"><svg
188
+ xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" class=\"icon\"
189
+ aria-hidden=\"true\" focusable=\"false\"><path d=\"M15.5 14h-.79l-.28-.27C15.41
190
+ 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61
191
+ 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99
192
+ 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/><path d=\"M0 0h24v24H0z\"
193
+ fill=\"none\"/></svg> <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0
194
+ 0 24 24\" class=\"icon\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19
195
+ 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</nav>\n\t\t\n\n\t\t<div
196
+ id=\"content\" class=\"off-canvas-wrap block_latte\" data-offcanvas>\n\t\t\t<div
197
+ class=\"inner-wrap\">\n\t\t\t\n\t\t\t\t<a class=\"exit-off-canvas\"></a>\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<!--
198
+ full width banner on mobile -->\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t<div
199
+ class=\"main block_light\">\n\t\t\t\t\t<div id=\"main_column\">\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<!--
200
+ start templates/web/common/includes/donate_banner.tt.html -->\n\n\n\n<!--
201
+ Donation banner @ footer -->\n\n\n<!-- end templates/web/common/includes/donate_banner.tt.html
202
+ -->\n\n\t\t\t\t\t\t\t\t\n\n\n\n<section id=\"donation-banner-top\" class=\"donation-banner
203
+ row\">\n\n <div class=\"donation-banner__left-aside\">\n <div class=\"donation-banner__hook-section\">\n
204
+ \ <p>Help us inform millions of consumers around the world about what
205
+ they eat</p>\n </div>\n <img src=\"/images/misc/donation-banners/donation-banner-group-photo.png\"
206
+ alt=\"group photo donation 2024\" />\n </div>\n <div>\n <div class=\"donation-banner__aside\">\n
207
+ \ <div class=\"donation-banner__main-section\">\n <img\n width=\"50\"\n
208
+ \ height=\"50\"\n src=\"https://world.openfoodfacts.org/images/logos/logo-variants/CMJN-ICON_WHITE_BG_OFF.svg\"\n
209
+ \ alt=\"open food facts logo\"\n />\n <h3 class=\"donation-banner__main-title\">Please
210
+ give to our 2025 Fundraiser</h3>\n </div>\n <div style=\"padding:1rem;\">\n
211
+ \ <p>Your donations fund the day-to-day operations of our non-profit
212
+ association:</p>\n <ul>\n <li>\n keeping our database
213
+ open & available to all,\n <ul>\n <li>technical infrastructure
214
+ (website/mobile app) & a small permanent team</li>\n </ul>\n </li>\n
215
+ \ <li>\n <p>remain independent of the food industry,</p>\n
216
+ \ </li>\n <li>\n <p>engage a community of committed
217
+ citizens,</p>\n </li>\n <li>\n <p>support the
218
+ advancement of public health research.</p>\n </li>\n </ul>\n
219
+ \ </div>\n </div>\n <div class=\"donation-banner__actions-section\">\n
220
+ \ <div class=\"donation-banner__actions-section__financial\">\n <p>\n
221
+ \ \n Each donation counts! We appreciate your support in
222
+ bringing further food transparency in the world.\n \n </p>\n
223
+ \ </div>\n <div class=\"donation-banner__actions-section__donate-button\">\n
224
+ \ <a href=\"https://world.openfoodfacts.org/donate-to-open-food-facts?utm_source=off&utf_medium=web&utm_campaign=donate-2024-a&utm_term=en-text-button\">\n
225
+ \ <button>I SUPPORT</button>\n </a>\n </div>\n </div>\n
226
+ \ </div>\n\n\n <div class=\"donation-banner__close\">\n <button id=\"hide-donate-banner\"
227
+ class=\"material-icons modest\" onclick=\"DonationButton();\" onkeypress=\"DonationButton();\">close</button>\n
228
+ \ </div>\n</section>\n\n<script>\n let d = new Date();\n let bannerID =
229
+ document.getElementById('donation-banner-top');\n let getDomain = window.location.origin.split('.');\n\n
230
+ \ function setBannerCookie(bcname, bcval, bcexdays) {\n d.setTime(d.getTime()
231
+ + (bcexdays*60*60*24*1000));\n let expires = 'expires=' + d.toUTCString();\n
232
+ \ // Apply cookie for every domain contains open...facts\n let domain
233
+ = 'domain=.' + getDomain.slice(1).join('.');\n document.cookie = bcname
234
+ + '=' + bcval + ';' + expires + ';' + domain + ';SameSite=None;Secure;path=/';\n
235
+ \ }\n\n function getBannerCookie(bcname) {\n const name = bcname + '=';\n
236
+ \ const decodedCookies = decodeURIComponent(document.cookie);\n const
237
+ cookies = decodedCookies.split(';');\n for (const cookie of cookies) {\n
238
+ \ let c = cookie;\n while (c.charAt(0) == ' ') { c = c.substring(1);
239
+ }\n if (c.indexOf(name) == 0) { return c.substring(name.length, c.length);
240
+ }\n }\n\n return '';\n }\n\n function DonationButton() {\n setBannerCookie('off_days_2025',
241
+ 1, 180);\n bannerID.style.display = 'none';\n }\n\n if (getBannerCookie('off_days_2025')
242
+ !== '') {\n bannerID.style.display = 'none';\n } else {\n bannerID.style.display
243
+ = 'flex';\n }\n</script>\n\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n
244
+ \ \t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t<div
245
+ class=\"small-12 column\">\n\t\t\t\t\t\t\t\t\t<h1 class=\"if-empty-dnone\">Error</h1>\n\t\t\t\t\t\t\t\t\t<p>Incorrect
246
+ user name or password. <a href=\"/cgi/reset_password.pl\">Forgotten password?</a></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t</div>\n\n\t\t\n\t\t<footer>\n\t\t\t<div
247
+ class=\"block_light bg-white\" id=\"install_the_app_block\">\n\t\t\t\t<div
248
+ class=\"row\">\n\t\t\t\t\t<div class=\"small-12 flex-grid v-space-short v-align-center
249
+ direction-row h-space-tiny\">\n\t\t\t\t\t\t<div class=\"cell small-100 medium-100
250
+ large-50 flex-grid v-align-center direction-row\">\n\t\t\t\t\t\t\t<img class=\"cell
251
+ small-50 v-align-center\" src=\"/images/illustrations/app-icon-in-the-clouds.svg\"
252
+ alt=\"The Open Food Facts logo in the cloud\" style=\"height:120px\">\n\t\t\t\t\t\t\t<div
253
+ class=\"cell small-50 v-align-center\" id=\"footer_scan\" style=\"display:block\">\n\t\t\t\t\t\t\t\t<div
254
+ id=\"footer_install_the_app\">\n\t\t\t\t\t\t\t\t\tInstall the app!\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\tScan
255
+ your <span id=\"everyday\">everyday</span> <span id=\"foods\">foods</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div
256
+ class=\"row\">\n\t\t\t\t\t\t\t<div class=\"small-12 medium-12 large-12 v-space-normal
257
+ column badge-container\">\n\t\t\t\t\t\t\t\t<!-- android_app_link - https://play.google.com/store/apps/details?id=org.openbeautyfacts.scanner&hl=en
258
+ -->\n\t\t\t\t\t\t\t\t<a href=\"https://play.google.com/store/apps/details?id=org.openfoodfacts.scanner&utm_source=off&utf_medium=web&utm_campaign=install_the_app_android_footer_en\"><img
259
+ src=\"/images/misc/playstore/img/latest/GetItOnGooglePlay_Badge_Web_color_English.svg\"
260
+ alt=\"Get It On Google Play\" loading=\"lazy\" height=\"40\" width=\"120\"></a>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<a
261
+ href=\"https://f-droid.org/packages/openfoodfacts.github.scrachx.openfood\"><img
262
+ src=\"/images/misc/f-droid/svg/get-it-on-en.svg\" alt=\"Available on F-Droid\"
263
+ loading=\"lazy\" height=\"40\" width=\"120\"></a>\n\n\t\t\t\t\t\t\t\t<!--
264
+ android_apk_app_link - https://world.openfoodfacts.org/images/apps/off.apk
265
+ -->\n\t\t\t\t\t\t\t\t<a href=\"https://github.com/openfoodfacts/smooth-app/releases/latest?utm_source=off&utf_medium=web&utm_campaign=install_the_app_apk_footer_en\"><img
266
+ src=\"/images/misc/app-landing-page/download-apk/download-apk_en.svg\" alt=\"Android
267
+ APK\" loading=\"lazy\" height=\"40\" width=\"120\"></a>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<!--
268
+ msgid \"https://apps.apple.com/app/open-beauty-facts/id1122926380\" -->\n\t\t\t\t\t\t\t\t<a
269
+ href=\"https://apps.apple.com/app/open-food-facts/id588797948?utm_source=off&utf_medium=web&utm_campaign=install_the_app_ios_footer_en\"><img
270
+ src=\"/images/misc/appstore/black/appstore_US.svg\" alt=\"Download on the
271
+ App Store\" loading=\"lazy\" height=\"40\" width=\"120\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t\n
272
+ \ \t\t\t<!-- start templates/web/common/includes/donate_banner.tt.html
273
+ -->\n\n\n\n<!-- Donation banner @ footer -->\n\n\n<!-- end templates/web/common/includes/donate_banner.tt.html
274
+ -->\n\n\t\t\t\t\n\n<section class=\"donation-banner-footer row\">\n <div
275
+ class=\"donation-banner-footer__left-aside\">\n <div class=\"donation-banner-footer__hook-section\">\n
276
+ \ <p>Help us inform millions of consumers around the world about what
277
+ they eat</p>\n </div>\n <img src=\"/images/misc/donation-banners/donation-banner-group-photo.png\"
278
+ alt=\"group photo donation 2024\" />\n </div>\n <div>\n <div>\n <div
279
+ class=\"donation-banner-footer__main-section\">\n <img\n width=\"50\"\n
280
+ \ height=\"50\"\n src=\"https://world.openfoodfacts.org/images/logos/logo-variants/CMJN-ICON_WHITE_BG_OFF.svg\"\n
281
+ \ alt=\"open food facts logo\"\n />\n <h3 class=\"donation-banner-footer__main-title\">Please
282
+ give to our 2025 Fundraiser</h3>\n </div>\n <p>Your donations fund
283
+ the day-to-day operations of our non-profit association:</p>\n <ul>\n
284
+ \ <li>\n keeping our database open & available to all,\n <ul>\n
285
+ \ <li>technical infrastructure (website/mobile app) & a small permanent
286
+ team</li>\n </ul>\n </li>\n <li>\n <p>remain
287
+ independent of the food industry,</p>\n </li>\n <li>\n <p>engage
288
+ a community of committed citizens,</p>\n </li>\n <li>\n <p>support
289
+ the advancement of public health research.</p>\n </li>\n </ul>\n
290
+ \ </div>\n <div class=\"donation-banner-footer__actions-section\">\n
291
+ \ <div class=\"donation-banner-footer__actions-section__financial\">\n
292
+ \ <p>\n Each donation counts! We appreciate your support in
293
+ bringing further food transparency in the world.\n </p>\n </div>\n
294
+ \ <div class=\"donation-banner-footer__actions-section__donate-button\">\n
295
+ \ <a href=\"https://world.openfoodfacts.org/donate-to-open-food-facts?utm_source=off&utf_medium=web&utm_campaign=donate-2024-a&utm_term=en-text-button\">\n
296
+ \ <button>I SUPPORT</button>\n </a>\n </div>\n </div>\n
297
+ \ </div>\n</section>\n\n\n\t\t\t\n \t\t\n\t\t\t<div class=\"block_light
298
+ block_cappucino\" id=\"contribute_and_discover_links_block\">\n\t\t\t\t<div
299
+ class=\"row\">\n\t\t\t\t\t<div class=\"small-12 large-6 columns v-space-normal
300
+ block_off\">\n\t\t\t\t\t\t<h3 class=\"title-5 text-medium\">Join the community</h3>\n\t\t\t\t\t\t<p>Discover
301
+ our <a href=\"/code-of-conduct\">Code of conduct</a></p>\n\t\t\t\t\t\t<p>Join
302
+ us on <a href=\"https://slack.openfoodfacts.org\">Slack</a></p>\n\t\t\t\t\t\t<p><a
303
+ href=\"https://forum.openfoodfacts.org/\">Forum</a></p>\n\t\t\t\t\t\t<p id=\"footer_social_icons\">Follow
304
+ us: \n\t\t\t\t\t\t\t<a href=\"https://x.com/OpenFoodFacts\"><img src=\"/images/icons/dist/x.svg\"
305
+ class=\"footer_social_icon\" alt=\"x\"></a>\n\t\t\t\t\t\t\t<a href=\"https://www.facebook.com/OpenFoodFacts?utm_source=off&utf_medium=web\"><img
306
+ src=\"/images/icons/dist/facebook.svg\" class=\"footer_social_icon\" alt=\"Facebook\"></a>\n\t\t\t\t\t\t\t<a
307
+ href=\"https://www.instagram.com/open.food.facts/\"><img src=\"/images/icons/dist/instagram.svg\"
308
+ class=\"footer_social_icon\" alt=\"Instagram\"></a>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p><a
309
+ href=\"https://link.openfoodfacts.org/newsletter-en\">Subscribe to our newsletter</a></p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div
310
+ class=\"small-12 large-6 columns project v-space-normal\">\n\t\t\t\t\t\t<h3
311
+ class=\"title-5 text-medium\">Discover the project</h3>\n\t\t\t\t\t\t<ul class=\"inline-list
312
+ tags_links v-space-tiny h-space-tiny\" >\n\t\t\t\t\t\t\t<li><a class=\"button
313
+ small white-button radius\" href=\"/who-we-are\">Who we are</a></li>\n\t\t\t\t\t\t\t<li><a
314
+ class=\"button small white-button radius\" href=\"https://world.openfoodfacts.org/open-food-facts-vision-mission-values-and-programs\">Vision,
315
+ Mission, Values and Programs</a></li>\n\t\t\t\t\t\t\t<li><a class=\"button
316
+ small white-button radius\" href=\"https://support.openfoodfacts.org/help/en-gb\">Frequently
317
+ asked questions</a></li>\n\t\t\t\t\t\t\t<li><a class=\"button small white-button
318
+ radius\" href=\"https://blog.openfoodfacts.org/en/\">Open Food Facts blog</a></li>\n\t\t\t\t\t\t\t<li><a
319
+ class=\"button small white-button radius\" href=\"/press\">Press</a></li>\n\t\t\t\t\t\t\t<li><a
320
+ class=\"button small white-button radius\" href=\"https://wiki.openfoodfacts.org\">Open
321
+ Food Facts wiki (en)</a></li>\n\t\t\t\t\t\t\t<li><a class=\"button small white-button
322
+ radius\" href=\"/cgi/top_translators.pl\">Translators</a></li>\n\t\t\t\t\t\t\t<li><a
323
+ class=\"button small white-button radius\" href=\"/partners\">Partners</a></li>\n\t\t\t\t\t\t\t<li><a
324
+ class=\"button small white-button radius\" href=\"https://world.openbeautyfacts.org\">Open
325
+ Beauty Facts - Cosmetics</a></li>\n\t\t\t\t\t\t\t<li><a class=\"button small
326
+ white-button radius\" href=\"https://be-fr.pro.openfoodfacts.org/\">Open Food
327
+ Facts for Producers</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div
328
+ class=\"block_off block_dark block_ristreto\" id=\"footer_block\">\n\n\t\t\t\t<div
329
+ id=\"footer_block_image_banner_outside\">\n\t\t\t\t\t<div id=\"footer_block_image_banner_outside2\">\n\n\t\t\t\t\t\t<div
330
+ class=\"row\">\n\n\t\t\t\t\t\t\t<div class=\"small-12 text-center v-space-short
331
+ h-space-large\">\n\t\t\t\t\t\t\t\t<a href=\"/\" style=\"font-size:1rem;\"><img
332
+ id=\"logo\" src=\"https://static.openfoodfacts.org/images/logos/off-logo-horizontal-mono-white.svg\"
333
+ alt=\"Open Food Facts\" style=\"margin:8px;height:48px;width:auto;\"></a>\n\n\t\t\t\t\t\t\t\t<p>A
334
+ collaborative, free and open database of food products from around the world.</p>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<ul
335
+ class=\"inline-list text-center text-small\">\n\t\t\t\t\t\t\t\t\t<li><a href=\"/legal\">Legal</a></li>\n\t\t\t\t\t\t\t\t\t<li><a
336
+ href=\"/privacy\">Privacy</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"/terms-of-use\">Terms
337
+ of use</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"/data\">Data, API and SDKs</a></li>\n\t\t\t\t\t\t\t\t\t<li><a
338
+ href=\"https://world.openfoodfacts.org/donate-to-open-food-facts\">Donate
339
+ to Open Food Facts</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https://world.pro.openfoodfacts.org/\">Producers</a></li>\n\t\t\t\t\t\t\t\t\t<li><a
340
+ href=\"https://link.openfoodfacts.org/newsletter-en\">Subscribe to our newsletter</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</footer>\n\t\t\n\n\t</div>\n\n<script
341
+ src=\"https://static.openfoodfacts.org/js/dist/modernizr.js\" data-base-layout=\"true\"></script>\n<script
342
+ src=\"https://static.openfoodfacts.org/js/dist/jquery.js\" data-base-layout=\"true\"></script>\n<script
343
+ src=\"https://static.openfoodfacts.org/js/dist/jquery-ui.js\" data-base-layout=\"true\"></script>\n<script
344
+ src=\"https://static.openfoodfacts.org/js/dist/hc-sticky.js\"></script>\n<script
345
+ src=\"https://static.openfoodfacts.org/js/dist/display.js\"></script>\n<script
346
+ src=\"https://static.openfoodfacts.org/js/dist/stikelem.js\"></script>\n<script
347
+ src=\"https://static.openfoodfacts.org/js/dist/scrollNav.js\"></script>\n
348
+ \ \n\n<script>\n$(function() {\n\n\n});\n</script>\n\n\n\n<script src=\"https://static.openfoodfacts.org/js/dist/foundation.js\"
349
+ data-base-layout=\"true\"></script>\n<script src=\"https://static.openfoodfacts.org/js/dist/jquery.cookie.js\"></script>\n<script
350
+ src=\"https://static.openfoodfacts.org/js/dist/select2.min.js\"></script>\n\n<script>\n$(document).foundation({\n\tequalizer
351
+ : {\n\t\tequalize_on_stack: true\n\t},\n\taccordion: {\n\t\tcallback : function
352
+ (accordion) {\n\t\t\t$(document).foundation('equalizer', 'reflow');\n\t\t}\n\t}\n});\n\n</script>\n<script
353
+ type=\"application/ld+json\">\n{\n\t\"@context\" : \"https://schema.org\",\n\t\"@type\"
354
+ : \"WebSite\",\n\t\"name\" : \"Open Food Facts\",\n\t\"url\" : \"https://be-fr.openfoodfacts.org\",\n\t\"potentialAction\":
355
+ {\n\t\t\"@type\": \"SearchAction\",\n\t\t\"target\": \"https://be-fr.openfoodfacts.org/cgi/search.pl?search_terms=?{search_term_string}\",\n\t\t\"query-input\":
356
+ \"required name=search_term_string\"\n\t}\n}\n</script>\n<script type=\"application/ld+json\">\n{\n\t\"@context\":
357
+ \"https://schema.org/\",\n\t\"@type\": \"Organization\",\n\t\"url\": \"https://be-fr.openfoodfacts.org\",\n\t\"logo\":
358
+ \"https://static.openfoodfacts.org/images/logos/off-logo-vertical-light.svg\",\n\t\"name\":
359
+ \"Open Food Facts\",\n\t\"sameAs\" : [\"https://www.facebook.com/OpenFoodFacts?utm_source=off&utf_medium=web\",
360
+ \"https://x.com/OpenFoodFacts\"]\n}\n</script>\n\n\n\n\n\n</body>\n</html>\n\n\n\n<!--
361
+ end templates/web/common/site_layout.tt.html -->\n"
362
+ recorded_at: Mon, 29 Sep 2025 14:07:18 GMT
363
+ recorded_with: VCR 6.3.1
@@ -0,0 +1,48 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://fr.openbeautyfacts.org/mission/25-produits
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Connection:
22
+ - close
23
+ Content-Type:
24
+ - text/html; charset=UTF-8
25
+ Date:
26
+ - Mon, 29 Sep 2025 14:07:22 GMT
27
+ Expires:
28
+ - Sun, 28 Sep 2025 14:07:22 GMT
29
+ Server:
30
+ - nginx/1.18.0
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Vary:
34
+ - Accept-Encoding
35
+ X-Content-Type-Options:
36
+ - nosniff
37
+ X-Download-Options:
38
+ - noopen
39
+ X-Request-Id:
40
+ - JjhBZKUEyRNswM9P
41
+ X-Xss-Protection:
42
+ - 1; mode=block
43
+ body:
44
+ encoding: ASCII-8BIT
45
+ string: !binary |-
46
+ PCEtLSBzdGFydCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9zaXRlX2xheW91dC50dC5odG1sIC0tPgoKPCFkb2N0eXBlIGh0bWw+CjxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZnIiIGRhdGEtc2VydmVyZG9tYWluPSJvcGVuYmVhdXR5ZmFjdHMub3JnIiBkaXI9Imx0ciI+CjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHRpdGxlPjwvdGl0bGU+CiAgICAKICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KCTxtZXRhIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjIxOTMzMTM4MTUxODA0MSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0iZm9vZCI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IiI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL2ZyLm9wZW5iZWF1dHlmYWN0cy5vcmcvZmFjZXRzL21pc3Npb25zLzI1LXByb2R1aXRzIj4KICAgIAogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL3N0YXRpYy5vcGVuZm9vZGZhY3RzLm9yZy9pbWFnZXMvbG9nb3Mvb2JmLWxvZ28tdmVydGljYWwtd2hpdGUtc29jaWFsLW1lZGlhLXByZXZpZXcucG5nIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iVW5lIGJhc2UgZGUgZG9ubsOpZXMgY29sbGFib3JhdGl2ZSwgZ3JhdHVpdGUgZXQgb3V2ZXJ0ZSBzdXIgbGVzIGluZ3LDqWRpZW50cywgZXQgZGVzIGluZm9ybWF0aW9ucyBzdXIgbGVzIHByb2R1aXRzIGNvc23DqXRpcXVlcyBkdSBtb25kZSBlbnRpZXIiPgogICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTgweDE4MCIgaHJlZj0iL2ltYWdlcy9mYXZpY29uL29iZi9hcHBsZS10b3VjaC1pY29uLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMzJ4MzIiIGhyZWY9Ii9pbWFnZXMvZmF2aWNvbi9vYmYvZmF2aWNvbi0zMngzMi5wbmciPgo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjE2eDE2IiBocmVmPSIvaW1hZ2VzL2Zhdmljb24vb2JmL2Zhdmljb24tMTZ4MTYucG5nIj4KPGxpbmsgcmVsPSJtYW5pZmVzdCIgaHJlZj0iL2ltYWdlcy9mYXZpY29uL29iZi9zaXRlLndlYm1hbmlmZXN0Ij4KPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Ii9pbWFnZXMvZmF2aWNvbi9vYmYvc2FmYXJpLXBpbm5lZC10YWIuc3ZnIiBjb2xvcj0iIzViYmFkNSI+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iL2ltYWdlcy9mYXZpY29uL29iZi9mYXZpY29uLmljbyI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tVGlsZUNvbG9yIiBjb250ZW50PSIjMmI1Nzk3Ij4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1jb25maWciIGNvbnRlbnQ9Ii9pbWFnZXMvZmF2aWNvbi9vYmYvYnJvd3NlcmNvbmZpZy54bWwiPgo8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iI2ZmZmZmZiI+CgoJPG1ldGEgbmFtZT0iYXBwbGUtaXR1bmVzLWFwcCIgY29udGVudD0iYXBwLWlkPTU4ODc5Nzk0OCI+CiAgICA8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cHM6Ly9mci5vcGVuYmVhdXR5ZmFjdHMub3JnL2ZhY2V0cy9taXNzaW9ucy8yNS1wcm9kdWl0cyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvY3NzL2Rpc3QvYXBwLWx0ci5jc3M/dj0xNzU3NjU4MTAyIiBkYXRhLWJhc2UtbGF5b3V0PSJ0cnVlIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9jc3MvZGlzdC9qcXVlcnl1aS90aGVtZXMvYmFzZS9qcXVlcnktdWkuY3NzIiBkYXRhLWJhc2UtbGF5b3V0PSJ0cnVlIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9jc3MvZGlzdC9zZWxlY3QyLm1pbi5jc3MiPgogICAgPGxpbmsgcmVsPSJzZWFyY2giIGhyZWY9Imh0dHBzOi8vZnIub3BlbmJlYXV0eWZhY3RzLm9yZy9jZ2kvb3BlbnNlYXJjaC5wbCIgdHlwZT0iYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCIgdGl0bGU9Ik9wZW4gQmVhdXR5IEZhY3RzIj4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9vZmYtd2ViY29tcG9uZW50cy5idW5kbGVkLmpzIj48L3NjcmlwdD4KCQogICAgPHN0eWxlIG1lZGlhPSJhbGwiPgogICAgICAgIC5zaG93LXdoZW4tbm8tYWNjZXNzLXRvLXByb2R1Y2Vycy1wbGF0Zm9ybSB7ZGlzcGxheTpub25lfQouc2hvdy13aGVuLWxvZ2dlZC1pbiB7ZGlzcGxheTpub25lfQoKCQkKCQkuYmFkZ2UtY29udGFpbmVyewoJCQltYXJnaW46IDAgYXV0bzsKCQl9CgoJCS5iYWRnZS1jb250YWluZXIgaW1newoJCQltYXJnaW46IDVweDsKCQl9CgkJQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1MzdweCApIGFuZCAobWluLXdpZHRoOiAyODBweCkgewoJCQkuYmFkZ2UtY29udGFpbmVyewoJCQkJd2lkdGg6IDI4MHB4OwoJCQl9CgkJfQoJCUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMjc5cHggKXsKCQkJLmJhZGdlLWNvbnRhaW5lcnsKCQkJCXdpZHRoOiAxMzBweDsKCQkJfQoJCX0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHkgY2xhc3M9Im90aGVyX3BhZ2UiPgoKCTwhLS0gTWF0b21vIC0tPgo8c2NyaXB0PgogIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTsKICAvKiB0cmFja2VyIG1ldGhvZHMgbGlrZSAic2V0Q3VzdG9tRGltZW5zaW9uIiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSAidHJhY2tQYWdlVmlldyIgKi8KICBfcGFxLnB1c2goWyJzZXREb2N1bWVudFRpdGxlIiwgZG9jdW1lbnQuZG9tYWluICsgIi8iICsgZG9jdW1lbnQudGl0bGVdKTsKICBfcGFxLnB1c2goWyJzZXRDb29raWVEb21haW4iLCAiKi5vcGVuYmVhdXR5ZmFjdHMub3JnIl0pOwogIF9wYXEucHVzaChbInNldERvbWFpbnMiLCBbIioub3BlbmJlYXV0eWZhY3RzLm9yZyJdXSk7CiAgX3BhcS5wdXNoKFsic2V0RG9Ob3RUcmFjayIsIHRydWVdKTsKICBfcGFxLnB1c2goWyJkaXNhYmxlQ29va2llcyJdKTsKICBfcGFxLnB1c2goWyd0cmFja1BhZ2VWaWV3J10pOwogIF9wYXEucHVzaChbJ2VuYWJsZUxpbmtUcmFja2luZyddKTsKICAoZnVuY3Rpb24oKSB7CiAgICB2YXIgdT0iLy9hbmFseXRpY3Mub3BlbmZvb2RmYWN0cy5vcmcvIjsKICAgIF9wYXEucHVzaChbJ3NldFRyYWNrZXJVcmwnLCB1KydtYXRvbW8ucGhwJ10pOwogICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgJzEwJ10pOwogICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpOwogIH0pKCk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PHA+PGltZyBzcmM9Ii8vYW5hbHl0aWNzLm9wZW5mb29kZmFjdHMub3JnL21hdG9tby5waHA/aWRzaXRlPTEwJmFtcDtyZWM9MSIgc3R5bGU9ImJvcmRlcjowOyIgYWx0PSIiIC8+PC9wPjwvbm9zY3JpcHQ+CgoKCTxvZmYtd2ViY29tcG9uZW50cy1jb25maWd1cmF0aW9uCiAgbGFuZ3VhZ2UtY29kZT0iZnIiCiAgY291bnRyeS1jb2RlPSJmciIKICByb2JvdG9mZi1jb25maWd1cmF0aW9uPSd7CiAgICAiYXBpVXJsIjogImh0dHBzOi8vcm9ib3RvZmYub3BlbmZvb2RmYWN0cy5vcmcvYXBpL3YxIiwKICAgICJpbWdVcmwiOiAiaHR0cHM6Ly9pbWFnZXMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMiCiAgfScKICAKICBvcGVuZm9vZGZhY3RzLWFwaS11cmw9Imh0dHBzOi8vZnIub3BlbmJlYXV0eWZhY3RzLm9yZyIKICBhc3NldHMtaW1hZ2VzLXBhdGg9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvY3NzL2Rpc3QvaW1hZ2VzIgogID48L29mZi13ZWJjb21wb25lbnRzLWNvbmZpZ3VyYXRpb24+CgkKCQoJPGRpdiBjbGFzcz0ic2tpcCI+PGEgaHJlZj0iI2NvbnRlbnQiIHRhYmluZGV4PSIwIj5BbGxlciBhdSBjb250ZW51PC9hPjwvZGl2PgoJCgoJPGRpdiBpZD0iYmFyY29kZS1zY2FubmVyLW1vZGFsIiBjbGFzcz0ibW9kYWwgaXNfaGlkZGVuIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCI+PC9kaXY+CiAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICA8c3Bhbj48aDI+U2Nhbm5leiB1biBwcm9kdWl0PGgyPjwvc3Bhbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibW9kYWwtY2xvc2UtYnV0dG9uIj4mdGltZXM7PC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXY+CiAgICAgIDxiYXJjb2RlLXNjYW5uZXIgaWQ9ImJhcmNvZGUtc2Nhbm5lciI+PC9iYXJjb2RlLXNjYW5uZXI+CiAgICA8L2Rpdj4KICAgIDxkaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgPgogICAgICA8bGFiZWwgZm9yPSJiYXJjb2RlLW1vZGFsLWlucHV0Ij5PdSBlbnRyZXogbGUgY29kZS1iYXJyZXMgbWFudWVsbGVtZW50PC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0iYmFyY29kZS1tb2RhbC1ncm91cCI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJiYXJjb2RlLW1vZGFsLWlucHV0IiBjbGFzcz0iYmFyY29kZS1tb2RhbC1pbnB1dCIgaW5wdXRtb2RlPSJudW1lcmljIiBwYXR0ZXJuPSJcZCoiIC8+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFyY29kZS1tb2RhbC1idXR0b24gYnV0dG9uIiBpZD0iYmFyY29kZS1tb2RhbC1idXR0b24iIGRpc2FibGVkPlNjYW5uZXI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L2JhcmNvZGUtc2Nhbm5lci5qcyI+PC9zY3JpcHQ+CgoKCTxkaXYgaWQ9InBhZ2UiPgoJCQoJCTxkaXYgY2xhc3M9InVwcGVyLW5hdiBjb250YWluLXRvLWdyaWQiICBpZD0idXBOYXYiPgoJCQk8bmF2IGNsYXNzPSJ0b3AtYmFyICIgZGF0YS10b3BiYXIgcm9sZT0ibmF2aWdhdGlvbiI+CgkJCQkKCQkJCTxzZWN0aW9uIGNsYXNzPSJ0b3AtYmFyLXNlY3Rpb24iPgoJCQkJCQoJCQkJCTwhLS0gTGVmdCBOYXYgU2VjdGlvbiAtLT4KCQkJCQk8dWwgY2xhc3M9ImxlZnQiPgoKCQkJCQkJPGxpIGNsYXNzPSJoYXMtZHJvcGRvd24iPgoJCQkJCQkJPGEgaWQ9Im1lbnVfbGluayI+CgkJCQkJCQkJPHNwYW4gY2xhc3M9Im1hdGVyaWFsLWljb25zIj4KCQkJCQkJCQkJbWVudQoJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCTwvYT4KCQkJCQkJCTx1bCBjbGFzcz0iZHJvcGRvd24iPgkJCQkKCQkJCQkJCQkKCQkJCQkJCQkJPGxpPjxhIGhyZWY9Ii9kZWNvdXZyaXIiPkTDqWNvdXZyaXI8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Ii9jb250cmlidWVyIj5Db250cmlidWVyPC9hPjwvbGk+CgkJCQkJCQkJCTxsaSBjbGFzcz0iZGl2aWRlciI+PC9saT4KCQkJCQkJCQkJPGxpPjxsYWJlbD5Bam91dGVyIGRlcyBwcm9kdWl0czwvbGFiZWw+PC9saT4KICAgICAgICAgICAgICAgIDwhLS0gRm9yIHJlZmVyZW5jZTogZ2V0X3RoZV9hcHBfbGlua19vZmYiID0gL29wZW4tZm9vZC1mYWN0cy1tb2JpbGUtYXBwIiAtLT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Ii9hcHBsaWNhdGlvbi1tb2JpbGUtb3Blbi1iZWF1dHktZmFjdHM/dXRtX3NvdXJjZT1vZmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPXByb19wbGF0Zm9ybV9pbnN0YWxsX3RoZV9hcHBfdG9fYWRkX3Byb2R1Y3RzX2ZyIj5JbnN0YWxsZXogbCdhcHBsaWNhdGlvbiBwb3VyIGFqb3V0ZXIgZGVzIHByb2R1aXRzPC9hPjwvbGk+CgkJCQkJCQkJCTxsaT48YSBocmVmPSIvY2dpL3Byb2R1Y3QucGw/dHlwZT1zZWFyY2hfb3JfYWRkJmFjdGlvbj1kaXNwbGF5Ij5Bam91dGVyIHVuIHByb2R1aXQ8L2E+PC9saT4KCQkJCQkJCQkKCgkJCQkJCQkJPGxpIGNsYXNzPSJkaXZpZGVyIj48L2xpPgoJCQkJCQkJCTxsaT48bGFiZWw+UmVjaGVyY2hlciBldCBhbmFseXNlciBkZXMgcHJvZHVpdHM8L2xhYmVsPjwvbGk+CgoJCQkJCQkJCTxsaT4KCQkJCQkJCQkJPGEgaHJlZj0iL2NnaS9zZWFyY2gucGwiPlJlY2hlcmNoZSBhdmFuY8OpZTwvYT4KCQkJCQkJCQk8L2xpPgoJCQkJCQkJCTxsaT4KCQkJCQkJCQkJPGEgaHJlZj0iL2NnaS9zZWFyY2gucGw/Z3JhcGg9MSI+R3JhcGhpcXVlcyBldCBjYXJ0ZXM8L2E+CgkJCQkJCQkJPC9saT4KCQkJCQkJCQkKCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGk+CgkJCQkJCQk8dWwgY2xhc3M9ImNvdW50cnlfbGFuZ3VhZ2Vfc2VsZWN0aW9uIj4KCQkJCQkJCQk8bGkgY2xhc3M9Imhhcy1mb3JtIGhhcy1kcm9wZG93biIgaWQ9InNlbGVjdF9jb3VudHJ5X2xpIj4KCQkJCQkJCQkJPHNlbGVjdCBpZD0ic2VsZWN0X2NvdW50cnkiIHN0eWxlPSJ3aWR0aDoxMDAlIiBkYXRhLXBsYWNlaG9sZGVyPSJQYXlzIj4KCQkJCQkJCQkJCTxvcHRpb24+PC9vcHRpb24+CgkJCQkJCQkJCTwvc2VsZWN0PgoJCQkJCQkJCTwvbGk+CgkJCQkJCQkJPGxpIGNsYXNzPSJoYXMtZHJvcGRvd24iPgoJCQkJCQkJCQk8YSBocmVmPSJodHRwczovL2ZyLm9wZW5iZWF1dHlmYWN0cy5vcmcvIj5GcmFuw6dhaXM8L2E+CgoJCQkJCQkJCQk8dWwgY2xhc3M9ImRyb3Bkb3duIj4KCQkJCQkJCQkJCTxsaT48YSBocmVmPSJodHRwczovL2ZyLWVuLm9wZW5iZWF1dHlmYWN0cy5vcmcvIj5FbmdsaXNoPC9hPjwvbGk+CgkJCQkJCQkJCTwvdWw+CgkJCQkJCQkJPC9saT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJPC91bD4KCgoJCQkJCTwhLS0gUmlnaHQgTmF2IFNlY3Rpb24gLS0+CgkJCQkJCgkJCQkJPHVsIGNsYXNzPSJyaWdodCI+CgkJCQkJCQoJCQkJCQkJPGxpIGNsYXNzPSJoLXNwYWNlLXRpbnkgaGFzLWZvcm0iPgoJCQkJCQkJCTxhIGhyZWY9Ii9jZ2kvc2Vzc2lvbi5wbCIgY2xhc3M9InJvdW5kIGJ1dHRvbiBzZWNvbmRhcnkiPgoJCQkJCQkJCQk8c3BhbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMgbWF0ZXJpYWwtc3ltYm9scy1idXR0b24iPmFjY291bnRfY2lyY2xlPC9zcGFuPgoJCQkJCQkJCQlTZSBjb25uZWN0ZXIKCQkJCQkJCQk8L2E+CgkJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQk8L3VsPgoJCQkJPC9zZWN0aW9uPgoJCQk8L25hdj4KCQk8L2Rpdj4KCQkKCgkJPGRpdiBpZD0ibWFpbl9jb250YWluZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZSIgY2xhc3M9ImJsb2NrX2xhdHRlIj4KCQkKCQkKCQk8ZGl2IGNsYXNzPSJ0b3BiYXJzdGlja3kiPgoJCQk8ZGl2IGNsYXNzPSJjb250YWluLXRvLWdyaWQgIiBpZD0ib2ZmTmF2IiA+CgkJCQk8bmF2IGNsYXNzPSJ0b3AtYmFyIiBkYXRhLXRvcGJhciByb2xlPSJuYXZpZ2F0aW9uIiA+CgoJCQkJCTx1bCBjbGFzcz0idGl0bGUtYXJlYSI+CgkJCQkJCTxsaSBjbGFzcz0ibmFtZSI+CgkJCQkJCQk8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MjkycHg7Ij4KCQkJCQkJCQk8YSBocmVmPSIvIj4KCQkJCQkJCQk8aW1nIGlkPSJsb2dvIiBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL2xvZ29zL29iZi1sb2dvLWhvcml6b250YWwtbGlnaHQuc3ZnIiBhbHQ9Ik9wZW4gQmVhdXR5IEZhY3RzIiBzdHlsZT0ibWFyZ2luOjhweDtoZWlnaHQ6NDhweDt3aWR0aDphdXRvOyI+CgkJCQkJCQkJCgkJCQkJCQk8L2E+CgkJCQkJCQk8L2Rpdj4KCQkJCQkJPC9saT4KCQkJCQk8L3VsPgoKCQkJCQkKCQkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0idG9wLWJhci1zZWN0aW9uIj4KCQkJCQkKCQkJCQkJPHVsIGNsYXNzPSJsZWZ0IHNtYWxsLTQiPgoJCQkJCQkJPGxpIGNsYXNzPSJzZWFyY2gtbGkiPgoJCQkJCQkJCgkJCQkJCQkJPGZvcm0gYWN0aW9uPSIvY2dpL3NlYXJjaC5wbCI+CgkJCQkJCQkJPGRpdiBjbGFzcz0icm93Ij48ZGl2IGNsYXNzPSJzbWFsbC0xMiI+CgkJCQkJCQkJPGRpdiBjbGFzcz0icm93IGNvbGxhcHNlIHBvc3RmaXgtcm91bmQiPgoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2x1bW5zIj4KCQkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJDaGVyY2hlciB1biBwcm9kdWl0IiBuYW1lPSJzZWFyY2hfdGVybXMiIHZhbHVlPSIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOndoaXRlIj4KCQkJCQkJCQkJPGlucHV0IG5hbWU9InNlYXJjaF9zaW1wbGUiIHZhbHVlPSIxIiB0eXBlPSJoaWRkZW4iPgoJCQkJCQkJCQk8aW5wdXQgbmFtZT0iYWN0aW9uIiB2YWx1ZT0icHJvY2VzcyIgdHlwZT0iaGlkZGVuIj4KCQkJCQkJCQkJPC9kaXY+CgkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbHVtbnMgcG9zdGZpeC1idXR0b24td3JhcHBlciI+CgkJCQkJCQkJCTxidXR0b24gdHlwZT0ic3VibWl0IiB0aXRsZT0iUmVjaGVyY2hlciIgY2xhc3M9ImJ1dHRvbiBwb3N0Zml4IiBzdHlsZT0ibGluZS1oZWlnaHQ6bm9ybWFsIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0iaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz48L2J1dHRvbj4KCQkJCQkJCQkJPC9kaXY+CgkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbHVtbnMgcG9zdGZpeC1idXR0b24td3JhcHBlciBpc19oaWRkZW4iPgogIDxidXR0b24KICAgIHR5cGU9ImJ1dHRvbiIKICAgIHRpdGxlPSJTY2FubmV6IHVuIHByb2R1aXQiCiAgICBjbGFzcz0iYnV0dG9uIGJhcmNvZGUtc2Nhbm5lci1idXR0b24iCiAgICBpZD0iYmFyY29kZS1zY2FubmVyLWJ1dHRvbiIKICA+CiAgICA8c3ZnIHN0eWxlPSJ3aWR0aDoyNHB4O2hlaWdodDoyNHB4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGNsYXNzPSJpY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSI+PHBhdGggZD0iTTIsNkg0VjE4SDJWNk01LDZINlYxOEg1VjZNNyw2SDEwVjE4SDdWNk0xMSw2SDEyVjE4SDExVjZNMTQsNkgxNlYxOEgxNFY2TTE3LDZIMjBWMThIMTdWNk0yMSw2SDIyVjE4SDIxVjZaIi8+PC9zdmc+CiAgPC9idXR0b24+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3QvYmFyY29kZS1zY2FubmVyLWJ1dHRvbi5qcyI+PC9zY3JpcHQ+CjwvZGl2PgoKCQkJCQkJCQk8L2Rpdj4KCQkJCQkJCQk8L2Rpdj48L2Rpdj4KCQkJCQkJCQk8L2Zvcm0+CgkJCQkJCQk8L2xpPgoJCQkJCQk8L3VsPgoJCQkJCTx1bCBjbGFzcz0ic2VhcmNoX2FuZF9saW5rcyI+CgkJCQkJCTxsaT48YSBocmVmPSIvZGVjb3V2cmlyIiBjbGFzcz0idG9wLWJhci1saW5rcyI+RMOpY291dnJpcjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2NvbnRyaWJ1ZXIiIGNsYXNzPSJ0b3AtYmFyLWxpbmtzIj5Db250cmlidWVyPC9hPjwvbGk+CgkJCQkJCTxsaSBjbGFzcz0ic2hvdy1mb3IteGxhcmdlLXVwIj48YSBocmVmPSJodHRwczovL2ZyLnByby5vcGVuZm9vZGZhY3RzLm9yZy8iIGNsYXNzPSJ0b3AtYmFyLWxpbmtzIj5Qcm9kdWN0ZXVyczwvYT48L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZsZXgtZ3JpZCBnZXRhcHAiPjxhIGhyZWY9Ii9hcHBsaWNhdGlvbi1tb2JpbGUtb3Blbi1iZWF1dHktZmFjdHM/dXRtX3NvdXJjZT1vZmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPXNlYXJjaF9hbmRfbGlua3NfcHJvbW9fZnIiIGNsYXNzPSJidXR0b25iYXIgYnV0dG9uIiBzdHlsZT0idG9wOjA7Ij48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0iaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPjxwYXRoIGQ9Ik0xNiAxSDhDNi4zNCAxIDUgMi4zNCA1IDR2MTZjMCAxLjY2IDEuMzQgMyAzIDNoOGMxLjY2IDAgMy0xLjM0IDMtM1Y0YzAtMS42Ni0xLjM0LTMtMy0zem0tMiAyMGgtNHYtMWg0djF6bTMuMjUtM0g2Ljc1VjRoMTAuNXYxNHoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+IDxzcGFuIGNsYXNzPSJidC10ZXh0Ij5JbnN0YWxsZXIgbCdhcHA8L3NwYW4+PC9hPjwvbGk+CgkJCQk8IS0tIEZvciByZWZlcmVuY2U6IGdldF90aGVfYXBwX2xpbmtfb2ZmIiA9IC9vcGVuLWZvb2QtZmFjdHMtbW9iaWxlLWFwcCIgLS0+CiAgICAgICAgICA8L3VsPgoJCQkJCTwvc2VjdGlvbj4KCQkJCQkKCQkJCTwvbmF2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCgkKCQoJCTxuYXYgY2xhc3M9InRhYi1iYXIgaGlkZSI+CgkJCTxkaXYgY2xhc3M9ImxlZnQtc21hbGwiPgoJCQkJPGEgaHJlZj0iI2lkT2ZMZWZ0TWVudSIgcm9sZT0iYnV0dG9uIiBhcmlhLWNvbnRyb2xzPSJpZE9mTGVmdE1lbnUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBjbGFzcz0ibGVmdC1vZmYtY2FudmFzLXRvZ2dsZSBidXR0b24gcG9zdGZpeCBhbm9ueW1vdXMiPgoJCQkJPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Imljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4KCQkJCTwvYT4KCQkJPC9kaXY+CgkJCTxkaXYgY2xhc3M9Im1pZGRsZSB0YWItYmFyLXNlY3Rpb24iPgoJCQkJPGZvcm0gYWN0aW9uPSIvY2dpL3NlYXJjaC5wbCI+CgkJCQkJPGRpdiBjbGFzcz0icm93IGNvbGxhcHNlIj4KCQkJCQkJPGRpdiBjbGFzcz0ic21hbGwtOCBjb2x1bW5zIj4KCQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iQ2hlcmNoZXIgdW4gcHJvZHVpdCIgbmFtZT0ic2VhcmNoX3Rlcm1zIj4KCQkJCQkJCTxpbnB1dCBuYW1lPSJzZWFyY2hfc2ltcGxlIiB2YWx1ZT0iMSIgdHlwZT0iaGlkZGVuIj4KCQkJCQkJCTxpbnB1dCBuYW1lPSJhY3Rpb24iIHZhbHVlPSJwcm9jZXNzIiB0eXBlPSJoaWRkZW4iPgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ic21hbGwtMiBjb2x1bW5zIj4KCQkJCQkJCTxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIHBvc3RmaXgiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGNsYXNzPSJpY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ii8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPjwvYnV0dG9uPgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ic21hbGwtMiBjb2x1bW5zIj4KCQkJCQkJCTxhIGhyZWY9Ii9jZ2kvc2VhcmNoLnBsIiB0aXRsZT0iUmVjaGVyY2hlIGF2YW5jw6llIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0iaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4gPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Imljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9mb3JtPgoJCQk8L2Rpdj4KCQk8L25hdj4KCQkKCgkJPGRpdiBpZD0iY29udGVudCIgY2xhc3M9Im9mZi1jYW52YXMtd3JhcCBibG9ja19sYXR0ZSIgZGF0YS1vZmZjYW52YXM+CgkJCTxkaXYgY2xhc3M9ImlubmVyLXdyYXAiPgoJCQkKCQkJCTxhIGNsYXNzPSJleGl0LW9mZi1jYW52YXMiPjwvYT4KCgkJCQkKCQkJCQoJCQkJPCEtLSBmdWxsIHdpZHRoIGJhbm5lciBvbiBtb2JpbGUgLS0+CgkJCQkKCQkJCQoKCQkJCQoKCQkJCTxkaXYgY2xhc3M9Im1haW4gYmxvY2tfbGlnaHQiPgoJCQkJCTxkaXYgaWQ9Im1haW5fY29sdW1uIj4KCgkJCQkJCQoJCQkJCQkKCQkJCQkJCQoJCQkJCQkJCgkJCQkJCQkJPCEtLSBzdGFydCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9pbmNsdWRlcy9kb25hdGVfYmFubmVyLnR0Lmh0bWwgLS0+CgoKCjwhLS0gRG9uYXRpb24gYmFubmVyIEAgZm9vdGVyIC0tPgoKCjwhLS0gZW5kIHRlbXBsYXRlcy93ZWIvY29tbW9uL2luY2x1ZGVzL2RvbmF0ZV9iYW5uZXIudHQuaHRtbCAtLT4KCgkJCQkJCQkJCgoKPHNlY3Rpb24gaWQ9ImRvbmF0aW9uLWJhbm5lci10b3AiIGNsYXNzPSJyb3ciIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZSI+CiAgCiAgPGEgaHJlZj0iaHR0cHM6Ly9jb25uZWN0Lm9wZW5mb29kZmFjdHMub3JnL2ZyL2V2ZW50L29wZW4tZm9vZC1mYWN0cy1kYXlzLTIwMjUtMzAvcmVnaXN0ZXIiPgogICAgPGltZyBzcmM9Ii9pbWFnZXMvbWlzYy9kb25hdGlvbi1iYW5uZXJzL29mZi1kYXlzLTIwMjUtZnIuMTI4MHgxOTEucG5nIgogICAgICAgYWx0PSJKb3VybsOpZXMgT3BlbiBGb29kIEZhY3RzIDIwMjUiCiAgICAgICB3aWR0aD0iMTI4MCIKICAgICAgIGhlaWdodD0iMTkxIiBjbGFzcz0ic2hvdy1mb3ItbWVkaXVtLXVwIi8+CiAgICAgICA8aW1nIHNyYz0iL2ltYWdlcy9taXNjL2RvbmF0aW9uLWJhbm5lcnMvb2ZmLWRheXMtMjAyNS1mci5tb2JpbGUucG5nIgogICAgICAgYWx0PSJKb3VybsOpZXMgT3BlbiBGb29kIEZhY3RzIDIwMjUiCiAgICAgICB3aWR0aD0iMTI4MCIKICAgICAgIGhlaWdodD0iNDc3IiBjbGFzcz0ic2hvdy1mb3Itc21hbGwtb25seSIvPiAgICAgICAKICA8L2E+ICAKICAKCgogIDxkaXYgY2xhc3M9ImRvbmF0aW9uLWJhbm5lcl9fY2xvc2UiPgogICAgPGJ1dHRvbiBpZD0iaGlkZS1kb25hdGUtYmFubmVyIiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMgbW9kZXN0IiBvbmNsaWNrPSJEb25hdGlvbkJ1dHRvbigpOyIgb25rZXlwcmVzcz0iRG9uYXRpb25CdXR0b24oKTsiPmNsb3NlPC9idXR0b24+CiAgPC9kaXY+Cjwvc2VjdGlvbj4KCjxzY3JpcHQ+CiAgbGV0IGQgPSBuZXcgRGF0ZSgpOwogIGxldCBiYW5uZXJJRCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb25hdGlvbi1iYW5uZXItdG9wJyk7CiAgbGV0IGdldERvbWFpbiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uc3BsaXQoJy4nKTsKCiAgZnVuY3Rpb24gc2V0QmFubmVyQ29va2llKGJjbmFtZSwgYmN2YWwsIGJjZXhkYXlzKSB7CiAgICBkLnNldFRpbWUoZC5nZXRUaW1lKCkgKyAoYmNleGRheXMqNjAqNjAqMjQqMTAwMCkpOwogICAgbGV0IGV4cGlyZXMgPSAnZXhwaXJlcz0nICsgZC50b1VUQ1N0cmluZygpOwogICAgLy8gQXBwbHkgY29va2llIGZvciBldmVyeSBkb21haW4gY29udGFpbnMgb3Blbi4uLmZhY3RzCiAgICBsZXQgZG9tYWluID0gJ2RvbWFpbj0uJyArIGdldERvbWFpbi5zbGljZSgxKS5qb2luKCcuJyk7CiAgICBkb2N1bWVudC5jb29raWUgPSBiY25hbWUgKyAnPScgKyBiY3ZhbCArICc7JyArIGV4cGlyZXMgKyAnOycgKyBkb21haW4gKyAnO1NhbWVTaXRlPU5vbmU7U2VjdXJlO3BhdGg9Lyc7CiAgfQoKICBmdW5jdGlvbiBnZXRCYW5uZXJDb29raWUoYmNuYW1lKSB7CiAgICBjb25zdCBuYW1lID0gYmNuYW1lICsgJz0nOwogICAgY29uc3QgZGVjb2RlZENvb2tpZXMgPSBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llKTsKICAgIGNvbnN0IGNvb2tpZXMgPSBkZWNvZGVkQ29va2llcy5zcGxpdCgnOycpOwogICAgZm9yIChjb25zdCBjb29raWUgb2YgY29va2llcykgewogICAgICBsZXQgYyA9IGNvb2tpZTsKICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09ICcgJykgeyBjID0gYy5zdWJzdHJpbmcoMSk7IH0KICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKSB7IHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpOyB9CiAgICB9CgogICAgcmV0dXJuICcnOwogIH0KCiAgZnVuY3Rpb24gRG9uYXRpb25CdXR0b24oKSB7CiAgICBzZXRCYW5uZXJDb29raWUoJ29mZl9kYXlzXzIwMjUnLCAxLCAxODApOwogICAgYmFubmVySUQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICB9CgogIGlmIChnZXRCYW5uZXJDb29raWUoJ29mZl9kYXlzXzIwMjUnKSAhPT0gJycpIHsKICAgIGJhbm5lcklELnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgfSBlbHNlIHsKICAgIGJhbm5lcklELnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgfQo8L3NjcmlwdD4KCgoJCQkJCQkJCgkJCQkJCQoJCQkJCQkKICAgICAgICAgICAgCQkJCgkJCQkJCQoJCQkJCQkJPGRpdiBjbGFzcz0icm93Ij4KCQkJCQkJCQk8ZGl2IGNsYXNzPSJzbWFsbC0xMiBjb2x1bW4iPgoJCQkJCQkJCQk8aDEgY2xhc3M9ImlmLWVtcHR5LWRub25lIj48L2gxPgoJCQkJCQkJCQkKCQkJCQkJCQk8L2Rpdj4KCQkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8L2Rpdj4KCgkJCgkJPGZvb3Rlcj4KCQkJPGRpdiBjbGFzcz0iYmxvY2tfbGlnaHQgYmctd2hpdGUiIGlkPSJpbnN0YWxsX3RoZV9hcHBfYmxvY2siPgoJCQkJPGRpdiBjbGFzcz0icm93Ij4KCQkJCQk8ZGl2IGNsYXNzPSJzbWFsbC0xMiBmbGV4LWdyaWQgdi1zcGFjZS1zaG9ydCB2LWFsaWduLWNlbnRlciBkaXJlY3Rpb24tcm93IGgtc3BhY2UtdGlueSI+CgkJCQkJCTxkaXYgY2xhc3M9ImNlbGwgc21hbGwtMTAwIG1lZGl1bS0xMDAgbGFyZ2UtNTAgZmxleC1ncmlkIHYtYWxpZ24tY2VudGVyIGRpcmVjdGlvbi1yb3ciPgoJCQkJCQkJPGltZyBjbGFzcz0iY2VsbCBzbWFsbC01MCB2LWFsaWduLWNlbnRlciIgc3JjPSIvaW1hZ2VzL2lsbHVzdHJhdGlvbnMvYXBwLWljb24taW4tdGhlLWNsb3Vkcy5zdmciIGFsdD0iVGhlIE9wZW4gRm9vZCBGYWN0cyBsb2dvIGluIHRoZSBjbG91ZCIgc3R5bGU9ImhlaWdodDoxMjBweCI+CgkJCQkJCQk8ZGl2IGNsYXNzPSJjZWxsIHNtYWxsLTUwIHYtYWxpZ24tY2VudGVyIiBpZD0iZm9vdGVyX3NjYW4iIHN0eWxlPSJkaXNwbGF5OmJsb2NrIj4KCQkJCQkJCQk8ZGl2IGlkPSJmb290ZXJfaW5zdGFsbF90aGVfYXBwIj4KCQkJCQkJCQkJSW5zdGFsbGVyIGwnYXBwIQoJCQkJCQkJCTwvZGl2PgoJCQkJCQkJCVNjYW5uZXogbGVzIDxzcGFuIGlkPSJmb29kcyI+YWxpbWVudHM8L3NwYW4+IGRlIHZvdHJlIDxzcGFuIGlkPSJldmVyeWRheSI+cXVvdGlkaWVuPC9zcGFuPgoJCQkJCQkJPC9kaXY+CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJyb3ciPgoJCQkJCQkJPGRpdiBjbGFzcz0ic21hbGwtMTIgbWVkaXVtLTEyIGxhcmdlLTEyIHYtc3BhY2Utbm9ybWFsIGNvbHVtbiBiYWRnZS1jb250YWluZXIiPgoJCQkJCQkJCTwhLS0gYW5kcm9pZF9hcHBfbGluayAtIGh0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1vcmcub3BlbmJlYXV0eWZhY3RzLnNjYW5uZXImaGw9ZW4gLS0+CgkJCQkJCQkJPGEgIGhyZWY9Imh0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1vcmcub3BlbmZvb2RmYWN0cy5zY2FubmVyJnV0bV9zb3VyY2U9b2JmJnV0Zl9tZWRpdW09d2ViJnV0bV9jYW1wYWlnbj1pbnN0YWxsX3RoZV9hcHBfYW5kcm9pZF9mb290ZXJfZnIiPjxpbWcgc3JjPSIvaW1hZ2VzL21pc2MvcGxheXN0b3JlL2ltZy9sYXRlc3QvR2V0SXRPbkdvb2dsZVBsYXlfQmFkZ2VfV2ViX2NvbG9yX0VuZ2xpc2guc3ZnIiBhbHQ9IkRpc3BvbmlibGUgc3VyIEdvb2dsZSBQbGF5IiBsb2FkaW5nPSJsYXp5IiBoZWlnaHQ9IjQwIiB3aWR0aD0iMTIwIj48L2E+CgkJCQkJCQkJCgkJCQkJCQkJPGEgaHJlZj0iIj48aW1nIHNyYz0iL2ltYWdlcy9taXNjL2YtZHJvaWQvc3ZnL2dldC1pdC1vbi1lbi5zdmciIGFsdD0iRGlzcG9uaWJsZSBzdXIgRi1Ecm9pZCIgbG9hZGluZz0ibGF6eSIgaGVpZ2h0PSI0MCIgd2lkdGg9IjEyMCI+PC9hPgoKCQkJCQkJCQk8IS0tIGFuZHJvaWRfYXBrX2FwcF9saW5rIC0gaHR0cHM6Ly93b3JsZC5vcGVuZm9vZGZhY3RzLm9yZy9pbWFnZXMvYXBwcy9vZmYuYXBrIC0tPgoJCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8vd29ybGQub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvYXBwcy9vYmYuYXBrP3V0bV9zb3VyY2U9b2JmJnV0Zl9tZWRpdW09d2ViP3V0bV9zb3VyY2U9b2ZmJnV0Zl9tZWRpdW09d2ViJnV0bV9jYW1wYWlnbj1pbnN0YWxsX3RoZV9hcHBfYXBrX2Zvb3Rlcl9mciI+PGltZyBzcmM9Ii9pbWFnZXMvbWlzYy9hcHAtbGFuZGluZy1wYWdlL2Rvd25sb2FkLWFway9kb3dubG9hZC1hcGtfZW4uc3ZnIiBhbHQ9IkFQSyBBbmRyb2lkIiBsb2FkaW5nPSJsYXp5IiBoZWlnaHQ9IjQwIiB3aWR0aD0iMTIwIj48L2E+CgkJCQkJCQkJCgkJCQkJCQkJPCEtLSBtc2dpZCAiaHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS9hcHAvb3Blbi1iZWF1dHktZmFjdHMvaWQxMTIyOTI2MzgwIiAtLT4KCQkJCQkJCQk8YSBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL2FwcC9vcGVuLWJlYXV0eS1mYWN0cy9pZDExMjI5MjYzODA/dXRtX3NvdXJjZT1vYmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPWluc3RhbGxfdGhlX2FwcF9pb3NfZm9vdGVyX2ZyIj48aW1nIHNyYz0iL2ltYWdlcy9taXNjL2FwcHN0b3JlL2JsYWNrL2FwcHN0b3JlX0ZSLnN2ZyIgYWx0PSJEaXNwb25pYmxlIHN1ciBsJ0FwcCBTdG9yZSIgIGxvYWRpbmc9ImxhenkiIGhlaWdodD0iNDAiIHdpZHRoPSIxMjAiPjwvYT4KCQkJCQkJCTwvZGl2PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCgkJCQogICAgICAJCQk8IS0tIHN0YXJ0IHRlbXBsYXRlcy93ZWIvY29tbW9uL2luY2x1ZGVzL2RvbmF0ZV9iYW5uZXIudHQuaHRtbCAtLT4KCgoKPCEtLSBEb25hdGlvbiBiYW5uZXIgQCBmb290ZXIgLS0+CgoKPCEtLSBlbmQgdGVtcGxhdGVzL3dlYi9jb21tb24vaW5jbHVkZXMvZG9uYXRlX2Jhbm5lci50dC5odG1sIC0tPgoKCQkJCQoKPHNlY3Rpb24gY2xhc3M9ImRvbmF0aW9uLWJhbm5lci1mb290ZXIgcm93Ij4KICA8ZGl2IGNsYXNzPSJkb25hdGlvbi1iYW5uZXItZm9vdGVyX19sZWZ0LWFzaWRlIj4KICAgIDxkaXYgY2xhc3M9ImRvbmF0aW9uLWJhbm5lci1mb290ZXJfX2hvb2stc2VjdGlvbiI+CiAgICAgIDxwPkFpZGV6LW5vdXMgw6AgaW5mb3JtZXIgZGVzIG1pbGxpb25zIGRlIGNvbnNvbW1hdGV1cnMgw6AgdHJhdmVycyBsZSBtb25kZSBzdXIgY2UgcXUnaWxzIG1hbmdlbnQ8L3A+CiAgICA8L2Rpdj4KICAgIDxpbWcgc3JjPSIvaW1hZ2VzL21pc2MvZG9uYXRpb24tYmFubmVycy9kb25hdGlvbi1iYW5uZXItZ3JvdXAtcGhvdG8ucG5nIiBhbHQ9Imdyb3VwIHBob3RvIGRvbmF0aW9uIDIwMjQiIC8+CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRvbmF0aW9uLWJhbm5lci1mb290ZXJfX21haW4tc2VjdGlvbiI+CiAgICAgICAgPGltZwogICAgICAgICAgd2lkdGg9IjUwIgogICAgICAgICAgaGVpZ2h0PSI1MCIKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93b3JsZC5vcGVuZm9vZGZhY3RzLm9yZy9pbWFnZXMvbG9nb3MvbG9nby12YXJpYW50cy9DTUpOLUlDT05fV0hJVEVfQkdfT0ZGLnN2ZyIKICAgICAgICAgIGFsdD0ib3BlbiBmb29kIGZhY3RzIGxvZ28iCiAgICAgICAgLz4KICAgICAgICA8aDMgY2xhc3M9ImRvbmF0aW9uLWJhbm5lci1mb290ZXJfX21haW4tdGl0bGUiPk1lcmNpIGRlIGNvbnRyaWJ1ZXIgw6Agbm90cmUgY29sbGVjdGUgZGUgZm9uZHMgMjAyNTwvaDM+CiAgICAgIDwvZGl2PgogICAgICA8cD5Wb3MgZG9ucyBmaW5hbmNlbnQgbGUgZm9uY3Rpb25uZW1lbnQgcXVvdGlkaWVuIGRlIG5vdHJlIGFzc29jaWF0aW9uIMOgIGJ1dCBub24gbHVjcmF0aWYgOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4KICAgICAgICAgIGdhcmRlciBub3RyZSBiYXNlIGRlIGRvbm7DqWVzIG91dmVydGUgZXQgYWNjZXNzaWJsZSDDoCB0b3VzLAogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+aW5mcmFzdHJ1Y3R1cmUgdGVjaG5pcXVlIChzaXRlIHdlYi9hcHBsaWNhdGlvbiBtb2JpbGUpIGV0IHVuZSBwZXRpdGUgw6lxdWlwZSBwZXJtYW5lbnRlPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+CiAgICAgICAgICA8cD5yZXN0ZXIgaW5kw6lwZW5kYW50IGRlIGwnaW5kdXN0cmllIGFsaW1lbnRhaXJlLDwvcD4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgIDxwPm1vYmlsaXNlciB1bmUgY29tbXVuYXV0w6kgZGUgY2l0b3llbnMgZW5nYWfDqXMsPC9wPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHA+c291dGVuaXIgbOKAmWF2YW5jZW1lbnQgZGUgbGEgcmVjaGVyY2hlIGVuIHNhbnTDqSBwdWJsaXF1ZS48L3A+CiAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9fYWN0aW9ucy1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9fYWN0aW9ucy1zZWN0aW9uX19maW5hbmNpYWwiPgogICAgICAgIDxwPgogICAgICAgICAgQ2hhcXVlIGRvbiBjb21wdGUgISBOb3VzIGFwcHLDqWNpb25zIHZvdHJlIHNvdXRpZW4gcG91ciB1bmUgcGx1cyBncmFuZGUgdHJhbnNwYXJlbmNlIGFsaW1lbnRhaXJlIGRhbnMgbGUgbW9uZGUuCiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9fYWN0aW9ucy1zZWN0aW9uX19kb25hdGUtYnV0dG9uIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL29wZW4tZm9vZC1mYWN0cy5hc3NvY29ubmVjdC5jb20vY29sbGVjdC9kZXNjcmlwdGlvbi80NzY3NTAtYy1mYWlyZS11bi1kb24tYS1vcGVuLWZvb2QtZmFjdHM/dXRtX3NvdXJjZT1vZmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPWRvbmF0ZS0yMDI0LWEmdXRtX3Rlcm09ZW4tdGV4dC1idXR0b24iPgogICAgICAgICAgPGJ1dHRvbj5KRSBTT1VUSUVOUzwvYnV0dG9uPgogICAgICAgIDwvYT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9zZWN0aW9uPgoKCgkJCQogICAgICAJCQoJCQk8ZGl2IGNsYXNzPSJibG9ja19saWdodCBibG9ja19jYXBwdWNpbm8iIGlkPSJjb250cmlidXRlX2FuZF9kaXNjb3Zlcl9saW5rc19ibG9jayI+CgkJCQk8ZGl2IGNsYXNzPSJyb3ciPgoJCQkJCTxkaXYgY2xhc3M9InNtYWxsLTEyIGxhcmdlLTYgY29sdW1ucyB2LXNwYWNlLW5vcm1hbCBibG9ja19vZmYiPgoJCQkJCQk8aDMgY2xhc3M9InRpdGxlLTUgdGV4dC1tZWRpdW0iPlJlam9pZ25leiBsYSBjb21tdW5hdXTDqTwvaDM+CgkJCQkJCTxwPkTDqWNvdXZyZXogbm90cmUgPGEgaHJlZj0iL2NvZGUtZGUtY29uZHVpdGUiPkNvZGUgZGUgY29uZHVpdGU8L2E+PC9wPgoJCQkJCQk8cD5SZWpvaWduZXotbm91cyBzdXIgPGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5vcGVuZm9vZGZhY3RzLm9yZyI+U2xhY2s8L2E+PC9wPgoJCQkJCQk8cD48YSBocmVmPSJodHRwczovL2ZvcnVtLm9wZW5mb29kZmFjdHMub3JnLyI+Rm9ydW08L2E+PC9wPgoJCQkJCQk8cCBpZD0iZm9vdGVyX3NvY2lhbF9pY29ucyI+U3VpdmV6LW5vdXMgOiAKCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8veC5jb20vT3BlbkZvb2RGYWN0cyI+PGltZyBzcmM9Ii9pbWFnZXMvaWNvbnMvZGlzdC94LnN2ZyIgY2xhc3M9ImZvb3Rlcl9zb2NpYWxfaWNvbiIgYWx0PSJ4Ij48L2E+CgkJCQkJCQk8YSBocmVmPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vb3BlbmZvb2RmYWN0cz91dG1fc291cmNlPW9iZiZ1dGZfbWVkaXVtPXdlYiI+PGltZyBzcmM9Ii9pbWFnZXMvaWNvbnMvZGlzdC9mYWNlYm9vay5zdmciIGNsYXNzPSJmb290ZXJfc29jaWFsX2ljb24iIGFsdD0iRmFjZWJvb2siPjwvYT4KCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vb3Blbi5mb29kLmZhY3RzLyI+PGltZyBzcmM9Ii9pbWFnZXMvaWNvbnMvZGlzdC9pbnN0YWdyYW0uc3ZnIiBjbGFzcz0iZm9vdGVyX3NvY2lhbF9pY29uIiBhbHQ9Ikluc3RhZ3JhbSI+PC9hPgoJCQkJCQkJCgkJCQkJCTwvcD4KCQkJCQkJPHA+PGEgaHJlZj0iaHR0cHM6Ly9saW5rLm9wZW5mb29kZmFjdHMub3JnL25ld3NsZXR0ZXItZnIiPlMnYWJvbm5lciDDoCBub3RyZSBuZXdzbGV0dGVyPC9hPjwvcD4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJzbWFsbC0xMiBsYXJnZS02IGNvbHVtbnMgcHJvamVjdCB2LXNwYWNlLW5vcm1hbCI+CgkJCQkJCTxoMyBjbGFzcz0idGl0bGUtNSB0ZXh0LW1lZGl1bSI+RMOpY291dnJleiBsZSBwcm9qZXQ8L2gzPgoJCQkJCQk8dWwgY2xhc3M9ImlubGluZS1saXN0IHRhZ3NfbGlua3Mgdi1zcGFjZS10aW55IGgtc3BhY2UtdGlueSIgPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iL3F1aS1zb21tZXMtbm91cyI+UXVpIHNvbW1lcy1ub3VzID88L2E+PC9saT4KCQkJCQkJCTxsaT48YSBjbGFzcz0iYnV0dG9uIHNtYWxsIHdoaXRlLWJ1dHRvbiByYWRpdXMiIGhyZWY9Imh0dHBzOi8vd29ybGQub3BlbmZvb2RmYWN0cy5vcmcvb3Blbi1mb29kLWZhY3RzLXZpc2lvbi1taXNzaW9uLXZhbHVlcy1hbmQtcHJvZ3JhbXMiPlZpc2lvbiwgbWlzc2lvbiwgdmFsZXVycyBldCBwcm9ncmFtbWVzPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSJodHRwczovL3N1cHBvcnQub3BlbmZvb2RmYWN0cy5vcmcvaGVscC9mci1mciI+UXVlc3Rpb25zIGZyw6lxdWVudGVzPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSJodHRwczovL2Jsb2cub3BlbmZvb2RmYWN0cy5vcmcvZnIvIj5MZSBibG9nIGQnT3BlbiBCZWF1dHkgRmFjdHM8L2E+PC9saT4KCQkJCQkJCTxsaT48YSBjbGFzcz0iYnV0dG9uIHNtYWxsIHdoaXRlLWJ1dHRvbiByYWRpdXMiIGhyZWY9Ii9wcmVzc2UiPlByZXNzZTwvYT48L2xpPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iaHR0cHM6Ly9mci53aWtpLm9wZW5mb29kZmFjdHMub3JnIj5PcGVuIEJlYXV0eSBGYWN0cyB3aWtpIChmcik8L2E+PC9saT4KCQkJCQkJCTxsaT48YSBjbGFzcz0iYnV0dG9uIHNtYWxsIHdoaXRlLWJ1dHRvbiByYWRpdXMiIGhyZWY9Ii9jZ2kvdG9wX3RyYW5zbGF0b3JzLnBsIj5UcmFkdWN0ZXVyczwvYT48L2xpPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iL3BhcnRlbmFpcmVzIj5QYXJ0ZW5haXJlczwvYT48L2xpPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iaHR0cHM6Ly93b3JsZC1mci5vcGVuYmVhdXR5ZmFjdHMub3JnIj5PcGVuIEJlYXV0eSBGYWN0cyAtIENvc23DqXRpcXVlczwvYT48L2xpPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iaHR0cHM6Ly9mci5wcm8ub3BlbmJlYXV0eWZhY3RzLm9yZy8iPk9wZW4gRm9vZCBGYWN0cyBwb3VyIGxlcyBwcm9kdWN0ZXVyczwvYT48L2xpPgoJCQkJCQk8L3VsPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoKCQkJPGRpdiBjbGFzcz0iYmxvY2tfb2ZmIGJsb2NrX2RhcmsgYmxvY2tfcmlzdHJldG8iIGlkPSJmb290ZXJfYmxvY2siPgoKCQkJCTxkaXYgaWQ9ImZvb3Rlcl9ibG9ja19pbWFnZV9iYW5uZXJfb3V0c2lkZSI+CgkJCQkJPGRpdiBpZD0iZm9vdGVyX2Jsb2NrX2ltYWdlX2Jhbm5lcl9vdXRzaWRlMiI+CgoJCQkJCQk8ZGl2IGNsYXNzPSJyb3ciPgoKCQkJCQkJCTxkaXYgY2xhc3M9InNtYWxsLTEyIHRleHQtY2VudGVyIHYtc3BhY2Utc2hvcnQgaC1zcGFjZS1sYXJnZSI+CgkJCQkJCQkJPGEgaHJlZj0iLyIgc3R5bGU9ImZvbnQtc2l6ZToxcmVtOyI+PGltZyBpZD0ibG9nbyIgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9sb2dvcy9vYmYtbG9nby1ob3Jpem9udGFsLW1vbm8td2hpdGUuc3ZnIiBhbHQ9Ik9wZW4gQmVhdXR5IEZhY3RzIiBzdHlsZT0ibWFyZ2luOjhweDtoZWlnaHQ6NDhweDt3aWR0aDphdXRvOyI+PC9hPgoKCQkJCQkJCQk8cD5VbmUgYmFzZSBkZSBkb25uw6llcyBjb2xsYWJvcmF0aXZlLCBsaWJyZSBldCBvdXZlcnRlIGRlcyBwcm9kdWl0cyBjb3Ntw6l0aXF1ZXMgZHUgbW9uZGUgZW50aWVyLjwvcD4KCQkJCQkJCQkKCQkJCQkJCQk8dWwgY2xhc3M9ImlubGluZS1saXN0IHRleHQtY2VudGVyIHRleHQtc21hbGwiPgoJCQkJCQkJCQk8bGk+PGEgaHJlZj0iL21lbnRpb25zLWxlZ2FsZXMiPk1lbnRpb25zIGzDqWdhbGVzPC9hPjwvbGk+CgkJCQkJCQkJCTxsaT48YSBocmVmPSIvcHJpdmFjeSI+Q29uZmlkZW50aWFsaXTDqTwvYT48L2xpPgoJCQkJCQkJCQk8bGk+PGEgaHJlZj0iL2NvbmRpdGlvbnMtZC11dGlsaXNhdGlvbiI+Q29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uPC9hPjwvbGk+CgkJCQkJCQkJCTxsaT48YSBocmVmPSIvZGF0YSI+RG9ubsOpZXMsIEFQSSBldCBTREs8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vZnIub3BlbmZvb2RmYWN0cy5vcmcvZmFpcmUtdW4tZG9uLWEtb3Blbi1mb29kLWZhY3RzIj5GYWlyZSB1biBkb24gw6AgbCdhc3NvY2lhdGlvbiBPcGVuIEZvb2QgRmFjdHM8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vZnIucHJvLm9wZW5mb29kZmFjdHMub3JnLyI+UHJvZHVjdGV1cnM8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGluay5vcGVuZm9vZGZhY3RzLm9yZy9uZXdzbGV0dGVyLWZyIj5TJ2Fib25uZXIgw6Agbm90cmUgbmV3c2xldHRlcjwvYT48L2xpPgoJCQkJCQkJCTwvdWw+CgkJCQkJCQk8L2Rpdj4KCgkJCQkJCTwvZGl2PgoKCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2Zvb3Rlcj4KCQkKCgk8L2Rpdj4KCjxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3QvbW9kZXJuaXpyLmpzIiBkYXRhLWJhc2UtbGF5b3V0PSJ0cnVlIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9qcXVlcnkuanMiIGRhdGEtYmFzZS1sYXlvdXQ9InRydWUiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L2pxdWVyeS11aS5qcyIgZGF0YS1iYXNlLWxheW91dD0idHJ1ZSI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3QvaGMtc3RpY2t5LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9kaXNwbGF5LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9zdGlrZWxlbS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3Qvc2Nyb2xsTmF2LmpzIj48L3NjcmlwdD4KICAKCjxzY3JpcHQ+CiQoZnVuY3Rpb24oKSB7CgoKfSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L2ZvdW5kYXRpb24uanMiIGRhdGEtYmFzZS1sYXlvdXQ9InRydWUiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L2pxdWVyeS5jb29raWUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L3NlbGVjdDIubWluLmpzIj48L3NjcmlwdD4KCjxzY3JpcHQ+CiQoZG9jdW1lbnQpLmZvdW5kYXRpb24oewoJZXF1YWxpemVyIDogewoJCWVxdWFsaXplX29uX3N0YWNrOiB0cnVlCgl9LAoJYWNjb3JkaW9uOiB7CgkJY2FsbGJhY2sgOiBmdW5jdGlvbiAoYWNjb3JkaW9uKSB7CgkJCSQoZG9jdW1lbnQpLmZvdW5kYXRpb24oJ2VxdWFsaXplcicsICdyZWZsb3cnKTsKCQl9Cgl9Cn0pOwoKPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CnsKCSJAY29udGV4dCIgOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKCSJAdHlwZSIgOiAiV2ViU2l0ZSIsCgkibmFtZSIgOiAiT3BlbiBCZWF1dHkgRmFjdHMiLAoJInVybCIgOiAiaHR0cHM6Ly9mci5vcGVuYmVhdXR5ZmFjdHMub3JnIiwKCSJwb3RlbnRpYWxBY3Rpb24iOiB7CgkJIkB0eXBlIjogIlNlYXJjaEFjdGlvbiIsCgkJInRhcmdldCI6ICJodHRwczovL2ZyLm9wZW5iZWF1dHlmYWN0cy5vcmcvY2dpL3NlYXJjaC5wbD9zZWFyY2hfdGVybXM9P3tzZWFyY2hfdGVybV9zdHJpbmd9IiwKCQkicXVlcnktaW5wdXQiOiAicmVxdWlyZWQgbmFtZT1zZWFyY2hfdGVybV9zdHJpbmciCgl9Cn0KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CnsKCSJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmcvIiwKCSJAdHlwZSI6ICJPcmdhbml6YXRpb24iLAoJInVybCI6ICJodHRwczovL2ZyLm9wZW5iZWF1dHlmYWN0cy5vcmciLAoJImxvZ28iOiAiaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvbG9nb3Mvb2JmLWxvZ28tdmVydGljYWwtbGlnaHQuc3ZnIiwKCSJuYW1lIjogIk9wZW4gQmVhdXR5IEZhY3RzIiwKCSJzYW1lQXMiIDogWyJodHRwczovL3d3dy5mYWNlYm9vay5jb20vb3BlbmZvb2RmYWN0cz91dG1fc291cmNlPW9iZiZ1dGZfbWVkaXVtPXdlYiIsICJodHRwczovL3guY29tL09wZW5Gb29kRmFjdHMiXQp9Cjwvc2NyaXB0PgoKCgoKCjwvYm9keT4KPC9odG1sPgoKCgo8IS0tIGVuZCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9zaXRlX2xheW91dC50dC5odG1sIC0tPgo=
47
+ recorded_at: Mon, 29 Sep 2025 14:07:22 GMT
48
+ recorded_with: VCR 6.3.1