1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/IngredientHighlight.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=9ce4103e"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import RefreshRuntime from "/@react-refresh"; 3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 4let prevRefreshReg; 5let prevRefreshSig; 6if (import.meta.hot && !inWebWorker) { 7 if (!window.__vite_plugin_react_preamble_installed__) { 8 throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201"); 9 } 10 prevRefreshReg = window.$RefreshReg$; 11 prevRefreshSig = window.$RefreshSig$; 12 window.$RefreshReg$ = (type, id) => { 13 RefreshRuntime.register(type, "/home/runner/workspace/client/src/components/IngredientHighlight.tsx " + id); 14 }; 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(); 18import __vite__cjsImport3_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=9ce4103e"; const useState = __vite__cjsImport3_react["useState"]; const useEffect = __vite__cjsImport3_react["useEffect"]; const useRef = __vite__cjsImport3_react["useRef"]; 19import { ChevronRight } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=9ce4103e"; 20import { useLanguage } from "/src/lib/LanguageContext.tsx"; 21import cocoaImage from "/@fs/home/runner/workspace/attached_assets/cocoa_husks_colorful.png?import"; 22import sheaImage from "/@fs/home/runner/workspace/attached_assets/shea_butter_kyn.jpg?import"; 23import arganImage from "/@fs/home/runner/workspace/attached_assets/argan_oil_kyn.jpg?import"; 24import niacinamideImage from "/@fs/home/runner/workspace/attached_assets/niacinamide_powder_kyn.png?import"; 25import hyaluronicImage from "/@fs/home/runner/workspace/attached_assets/hyaluronic_acid_kyn.png?import"; 26import kojicImage from "/@fs/home/runner/workspace/attached_assets/generated_images/premium_kojic_acid_crystals.png?import"; 27export default function IngredientHighlight() { 28 _s(); 29 const { language } = useLanguage(); 30 const scrollRef = useRef(null); 31 const sectionRef = useRef(null); 32 const [canScrollRight, setCanScrollRight] = useState(true); 33 const [currentDot, setCurrentDot] = useState(0); 34 const [isMobile, setIsMobile] = useState(false); 35 const [showColor, setShowColor] = useState(false); 36 useEffect(() => { 37 const checkMobile = () => setIsMobile(window.innerWidth < 768); 38 checkMobile(); 39 window.addEventListener("resize", checkMobile); 40 return () => window.removeEventListener("resize", checkMobile); 41 }, []); 42 useEffect(() => {
43 let colorTimeout = null; 44 const observer = new IntersectionObserver( 45 (entries) => { 46 entries.forEach((entry) => { 47 if (entry.isIntersecting) { 48 colorTimeout = setTimeout(() => { 49 setShowColor(true); 50 }, 1500); 51 } else { 52 if (colorTimeout) { 53 clearTimeout(colorTimeout); 54 } 55 setShowColor(false); 56 } 57 }); 58 }, 59 { threshold: 0.3 } 60 ); 61 if (sectionRef.current) { 62 observer.observe(sectionRef.current); 63 } 64 return () => { 65 if (colorTimeout) clearTimeout(colorTimeout); 66 observer.disconnect(); 67 }; 68 }, []); 69 const title = language === "fr" ? "NOS INGRÃDIENTS CLÃS" : "OUR KEY INGREDIENTS"; 70 const subtitle = language === "fr" ? "Chaque ingrédient est sélectionné avec rigueur pour sa performance, sa qualité et son sourcing responsable." : "Every ingredient in our formulations is chosen with care, high quality, and ethically sourced."; 71 const ingredients = language === "fr" ? [ 72 { 73 name: "COSSE DE CABOSSE", 74 description: "Riche en polyphénols antioxydants. Apaise, protège et unifie le teint. Upcyclée en Côte d'Ivoire.", 75 image: cocoaImage 76 }, 77 { 78 name: "BEURRE DE KARITÃ", 79 description: "Nourrit en profondeur avec 5 acides gras essentiels. Répare la barrière cutanée. Issu de filières durables.", 80 image: sheaImage 81 }, 82 { 83 name: "HUILE D'ARGAN", 84 description: "Concentrée en vitamine E et omégas. Renforce, protège et illumine la peau.", 85 image: arganImage 86 }, 87 { 88 name: "NIACINAMIDE", 89 description: "Resserre les pores, lisse le grain de peau et atténue les rougeurs. Actif polyvalent.", 90 image: niacinamideImage 91 }, 92 { 93 name: "ACIDE HYALURONIQUE", 94 description: "Retient 1000x son poids en eau. Hydratation intense et effet repulpant immédiat.", 95 image: hyaluronicImage 96 }, 97 { 98 name: "ACIDE KOJIQUE", 99 description: "Inhibe la production de mélanine. Estompe les taches et ravive l'éclat naturel.", 100 image: kojicImage 101 } 102 ] : [ 103 { 104 name: "COCOA POD HUSK", 105 description: "Rich in antioxidant polyphenols. Soothes, protects, and evens skin tone. Upcycled in Côte d'Ivoire.", 106 image: cocoaImage 107 }, 108 { 109 name: "SHEA BUTTER", 110 description: "Deep nourishment with 5 essential fatty acids. Repairs the skin barrier. Sustainably sourced.", 111 image: sheaImage 112 }, 113 { 114 name: "ARGAN OIL", 115 description: "Concentrated vitamin E and omegas. Strengthens, protects, and brightens skin.", 116 image: arganImage 117 }, 118 { 119 name: "NIACINAMIDE", 120 description: "Minimizes pores, smooths texture, and reduces redness. A multitasking powerhouse.", 121 image: niacinamideImage 122 }, 123 { 124 name: "HYALURONIC ACID", 125 description: "Holds 1000x its weight in water. Intense hydration with instant plumping effect.", 126 image: hyaluronicImage 127 }, 128 { 129 name: "KOJIC ACID", 130 description: "Inhibits melanin production. Fades dark spots and restores natural radiance.", 131 image: kojicImage 132 } 133 ]; 134 const handleScroll = () => { 135 if (scrollRef.current) { 136 const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current; 137 setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 10); 138 const cardWidth = scrollRef.current.scrollWidth / ingredients.length; 139 const itemsPerView = isMobile ? 2 : 3; 140 const totalDots2 = Math.ceil(ingredients.length / itemsPerView); 141 const newDot = Math.round(scrollLeft / (cardWidth * itemsPerView)); 142 setCurrentDot(Math.min(newDot, totalDots2 - 1)); 143 } 144 }; 145 const totalDots = Math.ceil(ingredients.length / (isMobile ? 2 : 3)); 146 const scrollToDot = (index) => { 147 if (scrollRef.current) { 148 const cardWidth = scrollRef.current.scrollWidth / ingredients.length; 149 const itemsPerView = isMobile ? 2 : 3; 150 scrollRef.current.scrollTo({ left: index * cardWidth * itemsPerView, behavior: "smooth" }); 151 } 152 }; 153 useEffect(() => { 154 handleScroll(); 155 }, []); 156 const scrollRight = () => { 157 if (scrollRef.current) { 158 const cardWidth = scrollRef.current.scrollWidth / ingredients.length; 159 scrollRef.current.scrollBy({ left: cardWidth, behavior: "smooth" }); 160 } 161 }; 162 return /* @__PURE__ */ jsxDEV( 163 "section", 164 { 165 ref: sectionRef, 166 className: "pt-12 pb-16 md:pt-16 md:pb-20", 167 style: { backgroundColor: "#F5F5F5" }, 168 "data-testid": "section-ingredients", 169 children: [
170 /* @__PURE__ */ jsxDEV("div", { className: "ingredients-container", children: [ 171 /* @__PURE__ */ jsxDEV("div", { className: "ingredients-header", children: [ 172 /* @__PURE__ */ jsxDEV( 173 "h2", 174 { 175 className: "ingredients-title", 176 style: { 177 color: "#1A1A1A", 178 fontFamily: "Helvetica, Arial, sans-serif", 179 fontWeight: 400, 180 letterSpacing: "2px", 181 fontSize: "20px", 182 textTransform: "uppercase" 183 }, 184 children: title 185 }, 186 void 0, 187 false, 188 { 189 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 190 lineNumber: 176, 191 columnNumber: 11 192 }, 193 this 194 ), 195 /* @__PURE__ */ jsxDEV( 196 "p", 197 { 198 className: "ingredients-desc", 199 style: { 200 fontFamily: "Helvetica, Arial, sans-serif", 201 fontWeight: 300, 202 color: "#666666", 203 lineHeight: 1.7, 204 letterSpacing: "0.2px", 205 fontSize: "15px" 206 }, 207 children: subtitle 208 }, 209 void 0, 210 false, 211 { 212 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 213 lineNumber: 189, 214 columnNumber: 11 215 }, 216 this 217 ) 218 ] }, void 0, true, { 219 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 220 lineNumber: 175, 221 columnNumber: 9 222 }, this),
223 /* @__PURE__ */ jsxDEV("div", { className: "ingredients-wrapper", children: [ 224 /* @__PURE__ */ jsxDEV( 225 "div", 226 { 227 ref: scrollRef, 228 className: "ingredients-carousel", 229 onScroll: handleScroll, 230 children: ingredients.map( 231 (ingredient, index) => /* @__PURE__ */ jsxDEV( 232 "div", 233 { 234 className: "ingredients-card group", 235 "data-testid": `ingredient-${index}`, 236 children: [ 237 /* @__PURE__ */ jsxDEV( 238 "div", 239 { 240 className: "aspect-square mb-4 overflow-hidden zoom-container", 241 style: { backgroundColor: "#EAEAE8" }, 242 children: /* @__PURE__ */ jsxDEV( 243 "img", 244 { 245 src: ingredient.image, 246 alt: `${ingredient.name} - KYN skincare ingredient`, 247 loading: "lazy", 248 decoding: "async", 249 className: `w-full h-full object-cover zoom-image transition-all duration-1000 ${showColor ? "grayscale-0" : "grayscale"}` 250 }, 251 void 0, 252 false, 253 { 254 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 255 lineNumber: 222, 256 columnNumber: 17 257 }, 258 this 259 ) 260 }, 261 void 0, 262 false, 263 { 264 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 265 lineNumber: 218, 266 columnNumber: 15 267 }, 268 this 269 ),
270 /* @__PURE__ */ jsxDEV( 271 "h3", 272 { 273 className: "text-[13px] md:text-[14px] lg:text-[15px] uppercase tracking-[1.5px] mb-2", 274 style: { 275 fontFamily: "Helvetica, Arial, sans-serif", 276 fontWeight: 500, 277 color: "#1A1A1A", 278 letterSpacing: "1.5px" 279 }, 280 children: ingredient.name 281 }, 282 void 0, 283 false, 284 { 285 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 286 lineNumber: 230, 287 columnNumber: 15 288 }, 289 this 290 ), 291 /* @__PURE__ */ jsxDEV( 292 "p", 293 { 294 className: "text-[12px] md:text-[13px]", 295 style: { 296 fontFamily: "Helvetica, Arial, sans-serif", 297 fontWeight: 300, 298 color: "#666666", 299 lineHeight: 1.5 300 }, 301 children: ingredient.description 302 }, 303 void 0, 304 false, 305 { 306 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 307 lineNumber: 241, 308 columnNumber: 15 309 }, 310 this 311 ) 312 ] 313 }, 314 index, 315 true, 316 { 317 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 318 lineNumber: 213, 319 columnNumber: 13 320 }, 321 this 322 ) 323 ) 324 }, 325 void 0, 326 false, 327 { 328 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 329 lineNumber: 207, 330 columnNumber: 9 331 }, 332 this 333 ), 334 canScrollRight && /* @__PURE__ */ jsxDEV( 335 "button", 336 { 337 onClick: scrollRight, 338 className: "carousel-next", 339 "aria-label": "Scroll right", 340 "data-testid": "button-ingredients-right", 341 children: /* @__PURE__ */ jsxDEV(ChevronRight, { size: 20, className: "text-gray-800" }, void 0, false, { 342 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 343 lineNumber: 264, 344 columnNumber: 15 345 }, this) 346 }, 347 void 0, 348 false, 349 { 350 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 351 lineNumber: 258, 352 columnNumber: 11 353 }, 354 this 355 ) 356 ] }, void 0, true, { 357 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 358 lineNumber: 205, 359 columnNumber: 9 360 }, this) 361 ] }, void 0, true, { 362 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 363 lineNumber: 173, 364 columnNumber: 7 365 }, this),
366 /* @__PURE__ */ jsxDEV("div", { className: "ingredient-dots-container flex md:hidden justify-center mt-4", style: { gap: "6px" }, children: Array.from({ length: totalDots }).map( 367 (_, index) => /* @__PURE__ */ jsxDEV( 368 "button", 369 { 370 onClick: () => scrollToDot(index), 371 className: "ingredient-dot", 372 style: { 373 width: currentDot === index ? "14px" : "6px", 374 height: "6px", 375 minWidth: currentDot === index ? "14px" : "6px", 376 minHeight: "6px", 377 maxWidth: currentDot === index ? "14px" : "6px", 378 maxHeight: "6px", 379 borderRadius: "3px", 380 backgroundColor: currentDot === index ? "#1A1A1A" : "#D1D5DB", 381 border: "none", 382 padding: 0, 383 margin: 0, 384 transition: "all 0.3s ease" 385 }, 386 "aria-label": `Go to slide ${index + 1}`, 387 "data-testid": `dot-indicator-${index}` 388 }, 389 index, 390 false, 391 { 392 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 393 lineNumber: 273, 394 columnNumber: 9 395 }, 396 this 397 ) 398 ) }, void 0, false, { 399 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 400 lineNumber: 271, 401 columnNumber: 7 402 }, this),
403 /* @__PURE__ */ jsxDEV("style", { children: ` 404 /* Force tiny dots on mobile */ 405 .ingredient-dot { 406 width: 6px !important; 407 height: 6px !important; 408 min-width: 6px !important; 409 min-height: 6px !important; 410 max-width: 6px !important; 411 max-height: 6px !important; 412 border-radius: 3px !important; 413 padding: 0 !important; 414 margin: 0 !important; 415 border: none !important; 416 } 417 .ingredient-dots-container { 418 gap: 6px !important; 419 } 420 421 /* Shared Parent Container */ 422 .ingredients-container { 423 max-width: 1100px; 424 margin: 0 auto; 425 padding: 0 32px; 426 box-sizing: border-box; 427 } 428 429 /* Header styles - no extra padding */ 430 .ingredients-header { 431 display: flex; 432 justify-content: space-between; 433 align-items: baseline; 434 width: 100%; 435 margin-bottom: 32px; 436 } 437 .ingredients-title { 438 margin: 0; 439 text-align: left; 440 } 441 .ingredients-desc { 442 margin: 0; 443 text-align: right; 444 max-width: 380px; 445 } 446 447 /* Carousel wrapper */ 448 .ingredients-wrapper { 449 position: relative; 450 } 451 452 /* Carousel styles - no extra padding, inherits from parent */ 453 .ingredients-carousel { 454 overflow-x: auto; 455 display: flex; 456 gap: 20px; 457 scroll-snap-type: x mandatory; 458 -webkit-overflow-scrolling: touch; 459 scrollbar-width: none; 460 -ms-overflow-style: none; 461 } 462 .ingredients-carousel::-webkit-scrollbar {
463 display: none; 464 } 465 466 /* Card styles - 3 full cards + partial 4th */ 467 .ingredients-card { 468 flex: 0 0 calc((100% - 40px) / 3); 469 scroll-snap-align: start; 470 } 471 472 /* Arrow button */ 473 .carousel-next { 474 position: absolute; 475 right: 12px; 476 top: 40%; 477 transform: translateY(-50%); 478 background: rgba(255, 255, 255, 0.9); 479 border: none; 480 padding: 8px; 481 border-radius: 50%; 482 box-shadow: 0 2px 8px rgba(0,0,0,0.1); 483 cursor: pointer; 484 display: flex; 485 align-items: center; 486 justify-content: center; 487 transition: all 0.2s; 488 z-index: 10; 489 } 490 .carousel-next:hover { 491 background: white; 492 } 493 494 /* Tablet: 2 cards + partial 3rd */ 495 @media (max-width: 1024px) { 496 .ingredients-card { 497 flex: 0 0 calc((100% - 20px) / 2); 498 } 499 } 500 501 /* Mobile styles - 2 cards + partial 3rd */ 502 @media (max-width: 768px) { 503 .ingredients-container { 504 padding: 0 16px; 505 } 506 .ingredients-header { 507 flex-direction: column; 508 gap: 12px; 509 align-items: flex-start; 510 } 511 .ingredients-desc { 512 text-align: left; 513 max-width: 100%; 514 } 515 .ingredients-carousel { 516 gap: 12px; 517 } 518 .ingredients-card { 519 flex: 0 0 calc((100% - 24px) / 2); 520 } 521 .carousel-next { 522 display: none; 523 } 524 } 525 ` }, void 0, false, { 526 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 527 lineNumber: 298, 528 columnNumber: 7 529 }, this) 530 ] 531 }, 532 void 0, 533 true, 534 { 535 fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx", 536 lineNumber: 166, 537 columnNumber: 5 538 }, 539 this 540 ); 541} 542_s(IngredientHighlight, "ThOikLbLjuMVlsot8ZCNtLsjTj8=", false, function() { 543 return [useLanguage]; 544}); 545_c = IngredientHighlight; 546var _c; 547$RefreshReg$(_c, "IngredientHighlight"); 548if (import.meta.hot && !inWebWorker) { 549 window.$RefreshReg$ = prevRefreshReg; 550 window.$RefreshSig$ = prevRefreshSig; 551} 552if (import.meta.hot && !inWebWorker) { 553 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 554 RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/components/IngredientHighlight.tsx", currentExports); 555 import.meta.hot.accept((nextExports) => { 556 if (!nextExports) return; 557 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/components/IngredientHighlight.tsx", currentExports, nextExports); 558 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 559 }); 560 }); 561} 562 563//# sourceMappingURL=data:application/json;base64,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BQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFSO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUEwSEU7QUFBQTtBQUFBO0FBQUEsSUE5UEo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBK1BBO0FBRUo7QUFBQ3BELEdBNVp1QkQscUJBQW1CO0FBQUEsVUFDcEJQLFdBQVc7QUFBQTtBQUFBMkYsS0FEVnBGO0FBQW1CLElBQUFvRjtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsidXNlRWZmZWN0IiwiQ2hldnJvblJpZ2h0IiwidXNlTGFuZ3VhZ2UiLCJjb2NvYUltYWdlIiwic2hlYUltYWdlIiwiYXJnYW5JbWFnZSIsIm5pYWNpbmFtaWRlSW1hZ2UiLCJoeWFsdXJvbmljSW1hZ2UiLCJrb2ppY0ltYWdlIiwiSW5ncmVkaWVudEhpZ2hsaWdodCIsIl9zIiwibGFuZ3VhZ2UiLCJzY3JvbGxSZWYiLCJ1c2VSZWYiLCJzZWN0aW9uUmVmIiwiY2FuU2Nyb2xsUmlnaHQiLCJzZXRDYW5TY3JvbGxSaWdodCIsInVzZVN0YXRlIiwiY3VycmVudERvdCIsInNldEN1cnJlbnREb3QiLCJpc01vYmlsZSIsInNldElzTW9iaWxlIiwic2hvd0NvbG9yIiwic2V0U2hvd0NvbG9yIiwiY2hlY2tNb2JpbGUiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb2xvclRpbWVvdXQiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImZvckVhY2giLCJlbnRyeSIsImlzSW50ZXJzZWN0aW5nIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInRocmVzaG9sZCIsImN1cnJlbnQiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsInRpdGxlIiwic3VidGl0bGUiLCJpbmdyZWRpZW50cyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImltYWdlIiwiaGFuZGxlU2Nyb2xsIiwic2Nyb2xsTGVmdCIsInNjcm9sbFdpZHR
563oIiwiY2xpZW50V2lkdGgiLCJjYXJkV2lkdGgiLCJsZW5ndGgiLCJpdGVtc1BlclZpZXciLCJ0b3RhbERvdHMiLCJNYXRoIiwiY2VpbCIsIm5ld0RvdCIsInJvdW5kIiwibWluIiwic2Nyb2xsVG9Eb3QiLCJpbmRleCIsInNjcm9sbFRvIiwibGVmdCIsImJlaGF2aW9yIiwic2Nyb2xsUmlnaHQiLCJzY3JvbGxCeSIsImJhY2tncm91bmRDb2xvciIsImNvbG9yIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFNpemUiLCJ0ZXh0VHJhbnNmb3JtIiwibGluZUhlaWdodCIsIm1hcCIsImluZ3JlZGllbnQiLCJnYXAiLCJBcnJheSIsImZyb20iLCJfIiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyIiwicGFkZGluZyIsIm1hcmdpbiIsInRyYW5zaXRpb24iLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJJbmdyZWRpZW50SGlnaGxpZ2h0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlTGFuZ3VhZ2UgfSBmcm9tICdAL2xpYi9MYW5ndWFnZUNvbnRleHQnO1xuaW1wb3J0IGNvY29hSW1hZ2UgZnJvbSAnQGFzc2V0cy9jb2NvYV9odXNrc19jb2xvcmZ1bC5wbmcnO1xuaW1wb3J0IHNoZWFJbWFnZSBmcm9tICdAYXNzZXRzL3NoZWFfYnV0dGVyX2t5bi5qcGcnO1xuaW1wb3J0IGFyZ2FuSW1hZ2UgZnJvbSAnQGFzc2V0cy9hcmdhbl9vaWxfa3luLmpwZyc7XG5pbXBvcnQgbmlhY2luYW1pZGVJbWFnZSBmcm9tICdAYXNzZXRzL25pYWNpbmFtaWRlX3Bvd2Rlcl9reW4ucG5nJztcbmltcG9ydCBoeWFsdXJvbmljSW1hZ2UgZnJvbSAnQGFzc2V0cy9oeWFsdXJvbmljX2FjaWRfa3luLnBuZyc7XG5pbXBvcnQga29qaWNJbWFnZSBmcm9tICdAYXNzZXRzL2dlbmVyYXRlZF9pbWFnZXMvcHJlbWl1bV9rb2ppY19hY2lkX2NyeXN0YWxzLnBuZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEluZ3JlZGllbnRIaWdobGlnaHQoKSB7XG4gIGNvbnN0IHsgbGFuZ3VhZ2UgfSA9IHVzZUxhbmd1YWdlKCk7XG4gIGNvbnN0IHNjcm9sbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlY3Rpb25SZWYgPSB1c2VSZWY8SFRNTEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbY2FuU2Nyb2xsUmlnaHQsIHNldENhblNjcm9sbFJpZ2h0XSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbY3VycmVudERvdCwgc2V0Q3VycmVudERvdF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2lzTW9iaWxlLCBzZXRJc01vYmlsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93Q29sb3IsIHNldFNob3dDb2xvcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjaGVja01vYmlsZSA9ICgpID0+IHNldElzTW9iaWxlKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4KTtcbiAgICBjaGVja01vYmlsZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja01vYmlsZSk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja01vYmlsZSk7XG4gIH0sIFtdKTtcblxuICAvLyBSZXZlYWwgY29sb3IgYWZ0ZXIgMS41IHNlY29uZHMgb2Ygc2VjdGlvbiBiZWluZyBpbiB2aWV3LCByZXNldCB3aGVuIGxlYXZpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY29sb3JUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgLy8gU2VjdGlvbiBpbiB2aWV3IC0gc3RhcnQgdGltZXIgdG8gc2hvdyBjb2xvclxuICAgICAgICAgICAgY29sb3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHNldFNob3dDb2xvcih0cnVlKTtcbiAgICAgICAgICAgIH0sIDE1MDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZWN0aW9uIGxlZnQgdmlldyAtIHJlc2V0IHRvIGdyYXlzY2FsZVxuICAgICAgICAgICAgaWYgKGNvbG9yVGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoY29sb3JUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFNob3dDb2xvcihmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4zIH1cbiAgICApO1xuXG4gICAgaWYgKHNlY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzZWN0aW9uUmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY29sb3JUaW1lb3V0KSBjbGVhclRpbWVvdXQoY29sb3JUaW1lb3V0KTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdGl0bGUgPSBsYW5ndWFnZSA9PT0gJ2ZyJyA/ICdOT1MgSU5HUsOJRElFTlRTIENMw4lTJyA6ICdPVVIgS0VZIElOR1JFRElFTlRTJztcbiAgY29uc3Qgc3VidGl0bGUgPSBsYW5ndWFnZSA9PT0gJ2ZyJyBcbiAgICA/ICdDaGFxdWUgaW5ncsOpZGllbnQgZXN0IHPDqWxlY3Rpb25uw6kgYXZlYyByaWd1ZXVyIHBvdXIgc2EgcGVyZm9ybWFuY2UsIHNhIHF1YWxpdMOpIGV0IHNvbiBzb3VyY2luZyByZXNwb25zYWJsZS4nXG4gICAgOiAnRXZlcnkgaW5ncmVkaWVudCBpbiBvdXIgZm9ybXVsYXRpb25zIGlzIGNob3NlbiB3aXRoIGNhcmUsIGhpZ2ggcXVhbGl0eSwgYW5kIGV0aGljYWxseSBzb3VyY2VkLic7XG5cbiAgY29uc3QgaW5ncmVkaWVudHMgPSBsYW5ndWFnZSA9PT0gJ2ZyJyA/IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ09TU0UgREUgQ0FCT1NTRScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1JpY2hlIGVuIHBvbHlwaMOpbm9scyBhbnRpb3h5ZGFudHMuIEFwYWlzZSwgcHJvdMOoZ2UgZXQgdW5pZmllIGxlIHRlaW50LiBVcGN5Y2zDqWUgZW4gQ8O0dGUgZFxcJ0l2b2lyZS4nLFxuICAgICAgaW1hZ2U6IGNvY29hSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdCRVVSUkUgREUgS0FSSVTDiScsXG4gICAgICBkZXNjcmlwdGlvbjogJ05vdXJyaXQgZW4gcHJvZm9uZGV1ciBhdmVjIDUgYWNpZGVzIGdyYXMgZXNzZW50aWVscy4gUsOpcGFyZSBsYSBiYXJyacOocmUgY3V0YW7DqWUuIElzc3UgZGUgZmlsacOocmVzIGR1cmFibGVzLicsXG4gICAgICBpbWFnZTogc2hlYUltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSFVJTEUgRFxcJ0FSR0FOJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ29uY2VudHLDqWUgZW4gdml0YW1pbmUgRSBldCBvbcOpZ2FzLiBSZW5mb3JjZSwgcHJvdMOoZ2UgZXQgaWxsdW1pbmUgbGEgcGVhdS4nLFxuICAgICAgaW1hZ2U6IGFyZ2FuSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdOSUFDSU5BTUlERScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1Jlc3NlcnJlIGxlcyBwb3JlcywgbGlzc2UgbGUgZ3JhaW4gZGUgcGVhdSBldCBhdHTDqW51ZSBsZXMgcm91Z2V1cnMuIEFjdGlmIHBvbHl2YWxlbnQuJyxcbiAgICAgIGltYWdlOiBuaWFjaW5hbWlkZUltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnQUNJREUgSFlBTFVST05JUVVFJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmV0aWVudCAxMDAweCBzb24gcG9pZHMgZW4gZWF1LiBIeWRyYXRhdGlvbiBpbnRlbnNlIGV0IGVmZmV0IHJlcHVscGFudCBpbW3DqWRpYXQuJyxcbiAgICAgIGltYWdlOiBoeWFsdXJvbmljSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdBQ0lERSBLT0pJUVVFJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW5oaWJlIGxhIHByb2R1Y3Rpb24gZGUgbcOpbGFuaW5lLiBFc3RvbXBlIGxlcyB0YWNoZXMgZXQgcmF2aXZlIGxcXCfDqWNsYXQgbmF0dXJlbC4nLFxuICAgICAgaW1hZ2U6IGtvamljSW1hZ2VcbiAgICB9XG4gIF0gOiBbXG4gICAge1xuICAgICAgbmFtZTogJ0NPQ09BIFBPRCBIVVNLJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmljaCBpbiBhbnRpb3hpZGFudCBwb2x5cGhlbm9scy4gU29vdGhlcywgcHJvdGVjdHMsIGFuZCBldmVucyBza2luIHRvbmUuIFVwY3ljbGVkIGluIEPDtHRlIGRcXCdJdm9pcmUuJyxcbiAgICAgIGltYWdlOiBjb2NvYUltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnU0hFQSBCVVRURVInLFxuICAgICAgZGVzY3JpcHRpb246ICdEZWVwIG5vdXJpc2htZW50IHdpdGggNSBlc3NlbnRpYWwgZmF0dHkgYWNpZHMuIFJlcGFpcnMgdGhlIHNraW4gYmFycmllci4gU3VzdGFpbmFibHkgc291cmNlZC4nLFxuICAgICAgaW1hZ2U6IHNoZWFJbWFnZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0FSR0FOIE9JTCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NvbmNlbnRyYXRlZCB2aXRhbWluIEUgYW5kIG9tZWdhcy4gU3RyZW5ndGhlbnMsIHByb3RlY3RzLCBhbmQgYnJpZ2h0ZW5zIHNraW4uJyxcbiAgICAgIGltYWdlOiBhcmdhbkltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTklBQ0lOQU1JREUnLFxuICAgICAgZGVzY3JpcHRpb246ICdNaW5pbWl6ZXMgcG9yZXMsIHNtb290aHMgdGV4dHVyZSwgYW5kIHJlZHVjZXMgcmVkbmVzcy4gQSBtdWx0aXRhc2tpbmcgcG93ZXJob3VzZS4nLFxuICAgICAgaW1hZ2U6IG5pYWNpbmFtaWRlSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdIWUFMVVJPTklDIEFDSUQnLFxuICAgICAgZGVzY3JpcHRpb246ICdIb2xkcyAxMDAweCBpdHMgd2VpZ2h0IGluIHdhdGVyLiBJbnRlbnNlIGh5ZHJhdGlvbiB3aXRoIGluc3RhbnQgcGx1bXBpbmcgZWZmZWN0LicsXG4gICAgICBpbWFnZTogaHlhbHVyb25pY0ltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnS09KSUMgQUNJRCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0luaGliaXRzIG1lbGFuaW4gcHJvZHVjdGlvbi4gRmFkZXMgZGFyayBzcG9
5630cyBhbmQgcmVzdG9yZXMgbmF0dXJhbCByYWRpYW5jZS4nLFxuICAgICAgaW1hZ2U6IGtvamljSW1hZ2VcbiAgICB9XG4gIF07XG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgIGlmIChzY3JvbGxSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggfSA9IHNjcm9sbFJlZi5jdXJyZW50O1xuICAgICAgc2V0Q2FuU2Nyb2xsUmlnaHQoc2Nyb2xsTGVmdCArIGNsaWVudFdpZHRoIDwgc2Nyb2xsV2lkdGggLSAxMCk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBkb3QgaW5kaWNhdG9yXG4gICAgICBjb25zdCBjYXJkV2lkdGggPSBzY3JvbGxSZWYuY3VycmVudC5zY3JvbGxXaWR0aCAvIGluZ3JlZGllbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGl0ZW1zUGVyVmlldyA9IGlzTW9iaWxlID8gMiA6IDM7XG4gICAgICBjb25zdCB0b3RhbERvdHMgPSBNYXRoLmNlaWwoaW5ncmVkaWVudHMubGVuZ3RoIC8gaXRlbXNQZXJWaWV3KTtcbiAgICAgIGNvbnN0IG5ld0RvdCA9IE1hdGgucm91bmQoc2Nyb2xsTGVmdCAvIChjYXJkV2lkdGggKiBpdGVtc1BlclZpZXcpKTtcbiAgICAgIHNldEN1cnJlbnREb3QoTWF0aC5taW4obmV3RG90LCB0b3RhbERvdHMgLSAxKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRvdGFsRG90cyA9IE1hdGguY2VpbChpbmdyZWRpZW50cy5sZW5ndGggLyAoaXNNb2JpbGUgPyAyIDogMykpO1xuXG4gIGNvbnN0IHNjcm9sbFRvRG90ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoc2Nyb2xsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGNhcmRXaWR0aCA9IHNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbFdpZHR
563oIC8gaW5ncmVkaWVudHMubGVuZ3RoO1xuICAgICAgY29uc3QgaXRlbXNQZXJWaWV3ID0gaXNNb2JpbGUgPyAyIDogMztcbiAgICAgIHNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbFRvKHsgbGVmdDogaW5kZXggKiBjYXJkV2lkdGggKiBpdGVtc1BlclZpZXcsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYW5kbGVTY3JvbGwoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHNjcm9sbFJpZ2h0ID0gKCkgPT4ge1xuICAgIGlmIChzY3JvbGxSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgY2FyZFdpZHRoID0gc2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggLyBpbmdyZWRpZW50cy5sZW5ndGg7XG4gICAgICBzY3JvbGxSZWYuY3VycmVudC5zY3JvbGxCeSh7IGxlZnQ6IGNhcmRXaWR0aCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIFxuICAgICAgcmVmPXtzZWN0aW9uUmVmfVxuICAgICAgY2xhc3NOYW1lPVwicHQtMTIgcGItMTYgbWQ6cHQtMTYgbWQ6cGItMjBcIiBcbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogJyNGNUY1RjUnIH19IFxuICAgICAgZGF0YS10ZXN0aWQ9XCJzZWN0aW9uLWluZ3JlZGllbnRzXCJcbiAgICA+XG4gICAgICB7LyogU2hhcmVkIFBhcmVudCBDb250YWluZXIgZm9yIEhlYWRlciBhbmQgQ2Fyb3VzZWwgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLWNvbnRhaW5lclwiPlxuICAgICAgICB7LyogSGVhZGVyIFJvdyAtIFR3byBDb2x1bW4gTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLXRpdGxlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICBjb2xvcjogJyMxQTFBMUEnLCBcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnMjBweCcsXG4gICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxwIFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5ncmVkaWVudHMtZGVzY1wiXG4gICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgY29sb3I6ICcjNjY2NjY2JyxcbiAgICAgICAgICAgICAgbGluZUhlaWdodDogMS43LFxuICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiAnMC4ycHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZTogJzE1cHgnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzdWJ0aXRsZX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBDYXJvdXNlbCBXcmFwcGVyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLXdyYXBwZXJcIj5cbiAgICAgICAgey8qIFNjcm9sbGFibGUgQ2Fyb3VzZWwgKi99XG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgcmVmPXtzY3JvbGxSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaW5ncmVkaWVudHMtY2Fyb3VzZWxcIlxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGx9XG4gICAgICAgID5cbiAgICAgICAgICB7aW5ncmVkaWVudHMubWFwKChpbmdyZWRpZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLWNhcmQgZ3JvdXBcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YGluZ3JlZGllbnQtJHtpbmRleH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFzcGVjdC1zcXVhcmUgbWItNCBvdmVyZmxvdy1oaWRkZW4gem9vbS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogJyNFQUVBRTgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nIFxuICAgICAgICAgICAgICAgICAgc3JjPXtpbmdyZWRpZW50LmltYWdlfVxuICAgICAgICAgICAgICAgICAgYWx0PXtgJHtpbmdyZWRpZW50Lm5hbWV9IC0gS1lOIHNraW5jYXJlIGluZ3JlZGllbnRgfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgZGVjb2Rpbmc9XCJhc3luY1wiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB6b29tLWltYWdlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTEwMDAgJHtzaG93Q29sb3IgPyAnZ3JheXNjYWxlLTAnIDogJ2dyYXlzY2FsZSd9YH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzEzcHhdIG1kOnRleHQtWzE0cHhdIGxnOnRleHQtWzE1cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMS41cHhdIG1iLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJyMxQTFBMUEnLFxuICAgICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzEuNXB4J1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7aW5ncmVkaWVudC5uYW1lfVxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICA8cCBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxMnB4XSBtZDp0ZXh0LVsxM3B4XVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NjY2NicsXG4gICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2luZ3JlZGllbnQuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgI
563HsvKiBSaWdodCBBcnJvdyBCdXR0b24gLSBPdXRzaWRlIGNhcm91c2VsIGZvciBwb3NpdGlvbmluZyAqL31cbiAgICAgICAgICB7Y2FuU2Nyb2xsUmlnaHQgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXtzY3JvbGxSaWdodH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2Fyb3VzZWwtbmV4dFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTY3JvbGwgcmlnaHRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1pbmdyZWRpZW50cy1yaWdodFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHQgc2l6ZT17MjB9IGNsYXNzTmFtZT1cInRleHQtZ3JheS04MDBcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERvdCBJbmRpY2F0b3JzIC0gTW9iaWxlIE9ubHkgLSBUaW55IGRvdHMgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnQtZG90cy1jb250YWluZXIgZmxleCBtZDpoaWRkZW4ganVzdGlmeS1jZW50ZXIgbXQtNFwiIHN0eWxlPXt7IGdhcDogJzZweCcgfX0+XG4gICAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbERvdHMgfSkubWFwKChfLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzY3JvbGxUb0RvdChpbmRleCl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJpbmdyZWRpZW50LWRvdFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogY3VycmVudERvdCA9PT0gaW5kZXggPyAnMTRweCcgOiAnNnB4JyxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnNnB4JyxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IGN1cnJlbnREb3QgPT09IGluZGV4ID8gJzE0cHgnIDogJzZweCcsXG4gICAgICAgICAgICAgIG1pbkhlaWdodDogJzZweCcsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBjdXJyZW50RG90ID09PSBpbmRleCA/ICcxNHB4JyA6ICc2cHgnLFxuICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICc2cHgnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICczcHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGN1cnJlbnREb3QgPT09IGluZGV4ID8gJyMxQTFBMUEnIDogJyNEMUQ1REInLFxuICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YEdvIHRvIHNsaWRlICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YGRvdC1pbmRpY2F0b3ItJHtpbmRleH1gfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBDb21wb25lbnQgU3R5bGVzICovfVxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIC8qIEZvcmNlIHRpbnkgZG90cyBvbiBtb2JpbGUgKi9cbiAgICAgICAgLmluZ3JlZGllbnQtZG90IHtcbiAgICAgICAgICB3aWR0aDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiA2cHggIWltcG9ydGFudDtcbiAgICAgICAgICBtaW4td2lkdGg6IDZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1heC13aWR0aDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgbWF4LWhlaWdodDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC5pbmdyZWRpZW50LWRvdHMtY29udGFpbmVyIHtcbiAgICAgICAgICBnYXA6IDZweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBTaGFyZWQgUGFyZW50IENvbnRhaW5lciAqL1xuICAgICAgICAuaW5ncmVkaWVudHMtY29udGFpbmVyIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDExMDBweDtcbiAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICBwYWRkaW5nOiAwIDMycHg7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEhlYWRlciBzdHlsZXMgLSBubyBleHRyYSBwYWRkaW5nICovXG4gICAgICAgIC5pbmdyZWRpZW50cy1oZWFkZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgICAgICB9XG4gICAgICAgIC5pbmdyZWRpZW50cy10aXRsZSB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmluZ3JlZGllbnRzLWRlc2Mge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICBtYXgtd2lkdGg6IDM4MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLyogQ2Fyb3VzZWwgd3JhcHBlciAqL1xuICAgICAgICAuaW5ncmVkaWVudHMtd3JhcHBlciB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogQ2Fyb3VzZWwgc3R5bGVzIC0gbm8gZXh0cmEgcGFkZGluZywgaW5oZXJpdHMgZnJvbSBwYXJlbnQgKi9cbiAgICAgICAgLmluZ3JlZGllbnRzLWNhcm91c2VsIHtcbiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZ2FwOiAyMHB4O1xuICAgICAgICAgI
563HNjcm9sbC1zbmFwLXR5cGU6IHggbWFuZGF0b3J5O1xuICAgICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuICAgICAgICB9XG4gICAgICAgIC5pbmdyZWRpZW50cy1jYXJvdXNlbDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBDYXJkIHN0eWxlcyAtIDMgZnVsbCBjYXJkcyArIHBhcnRpYWwgNHRoICovXG4gICAgICAgIC5pbmdyZWRpZW50cy1jYXJkIHtcbiAgICAgICAgICBmbGV4OiAwIDAgY2FsYygoMTAwJSAtIDQwcHgpIC8gMyk7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLyogQXJyb3cgYnV0dG9uICovXG4gICAgICAgIC5jYXJvdXNlbC1uZXh0IHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICAgICAgdG9wOiA0MCU7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIH1cbiAgICAgICAgLmNhcm91c2VsLW5leHQ6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogVGFibGV0OiAyIGNhcmRzICsgcGFydGlhbCAzcmQgKi9cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgICAgIC5pbmdyZWRpZW50cy1jYXJkIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMCBjYWxjKCgxMDAlIC0gMjBweCkgLyAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBNb2JpbGUgc3R5bGVzIC0gMiBjYXJkcyArIHBhcnRpYWwgM3JkICovXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgIC5pbmdyZWRpZW50cy1jb250YWluZXIge1xuICAgICAgICAgICAgcGFkZGluZzogMCAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAuaW5ncmVkaWVudHMtaGVhZGVyIHtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmluZ3JlZGllbnRzLWRlc2Mge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmluZ3JlZGllbnRzLWNhcm91c2VsIHtcbiAgICAgICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmluZ3JlZGllbnRzLWNhcmQge1xuICAgICAgICAgICAgZmxleDogMCAwIGNhbGMoKDEwMCUgLSAyNHB4KSAvIDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuY2Fyb3VzZWwtbmV4dCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cbiJdLCJmaWxlIjoiL2hvbWUvcnVubmVyL3dvcmtzcGFjZS9jbGllbnQvc3JjL2NvbXBvbmVudHMvSW5ncmVkaWVudEhpZ2hsaWdodC50c3gifQ==
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.