Help
RSS
API
Feed
Maltego
Contact
Domain > www.kesofice.ru
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2017-04-18
195.208.0.113
(
ClassC
)
2024-09-11
80.87.202.131
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: nginx/1.20.1Date: Wed, 11 Sep 2024 07:39:35 GMTContent-Type: text/html; charsetUTF-8Content-Length: 231089Connection: keep-aliveLast-Modified: Sat, 20 Jul 2024 00:15:42 GMTETag: 386b1-61da2b66a4d9cAccept-Ranges: bytes !DOCTYPE html>html dirltr langen classoffline> head> meta charsetutf-8 /> meta namecolor-scheme contentlight dark /> meta nametheme-color content#fff /> meta nameviewport contentwidthdevice-width,initial-scale1,maximum-scale1,user-scalableno /> title>Домен продаётся/title> style> a { color: var(--link-color); } body { --background-color: #fff; --error-code-color: var(--google-gray-700); --google-blue-100: #d2e3fc; --google-blue-300: #8ab4f8; --google-blue-600: #1a73e8; --google-blue-700: #1967d2; --google-gray-100: #f1f3f4; --google-gray-300: #dadce0; --google-gray-500: #9aa0a6; --google-gray-50: #f8f9fa; --google-gray-600: #80868b; --google-gray-700: #5f6368; --google-gray-800: #3c4043; --google-gray-900: #202124; --heading-color: var(--google-gray-900); --link-color: #585858; --popup-container-background-color: rgba(0, 0, 0, 0.65); --primary-button-fill-color-active: var(--google-blue-700); --primary-button-fill-color: var(--google-blue-600); --primary-button-text-color: #fff; --quiet-background-color: #f7f7f7; --secondary-button-border-color: var(--google-gray-500); --secondary-button-fill-color: #fff; --secondary-button-hover-border-color: var(--google-gray-600); --secondary-button-hover-fill-color: var(--google-gray-50); --secondary-button-text-color: var(--google-gray-700); --small-link-color: var(--google-gray-700); --text-color: var(--google-gray-700); background: var(--background-color); color: var(--text-color); word-wrap: break-word; } .nav-wrapper .secondary-button { background: var(--secondary-button-fill-color); border: 1px solid var(--secondary-button-border-color); color: var(--secondary-button-text-color); float: none; margin: 0; padding: 8px 16px; } .hidden { display: none; } html { -webkit-text-size-adjust: 100%; font-size: 125%; } .icon { background-repeat: no-repeat; background-size: 100%; } @media (prefers-color-scheme: dark) { body { --background-color: var(--google-gray-900); --error-code-color: var(--google-gray-500); --heading-color: var(--google-gray-500); --link-color: var(--google-blue-300); --primary-button-fill-color-active: #81a2d0; --primary-button-fill-color: var(--google-blue-300); --primary-button-text-color: var(--google-gray-900); --quiet-background-color: var(--background-color); --secondary-button-border-color: var(--google-gray-700); --secondary-button-fill-color: var(--google-gray-900); --secondary-button-hover-fill-color: #303339; --secondary-button-text-color: var(--google-blue-300); --small-link-color: var(--google-blue-300); --text-color: var(--google-gray-500); } } dirrtl button { float: left; } .bad-clock button, .captive-portal button, .https-only button, .insecure-form button, .lookalike-url button, .main-frame-blocked button, .neterror button, .pdf button, .safe-browsing-billing button, .ssl button { background: var(--primary-button-fill-color); } button:active { background: var(--primary-button-fill-color-active); outline: 0; } #debugging { display: inline; overflow: auto; } .debugging-content { line-height: 1em; margin-bottom: 0; margin-top: 1em; } .debugging-content-fixed-width { display: block; font-family: monospace; font-size: 1.2em; margin-top: 0.5em; } .debugging-title { font-weight: 700; } #details { margin: 0 0 50px; } #details p:not(:first-of-type) { margin-top: 20px; } .secondary-button:active { border-color: #fff; box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.3), 0 2px 6px 2px rgba(60, 64, 67, 0.15); } .secondary-button:hover { background: var(--secondary-button-hover-fill-color); border-color: var(--secondary-button-hover-border-color); text-decoration: none; } .error-code { color: var(--error-code-color); font-size: 0.8em; margin-top: 12px; text-transform: uppercase; } #error-debugging-info { font-size: 0.8em; } h1 { color: var(--heading-color); font-size: 1.6em; font-weight: 400; line-height: 1.25em; margin-bottom: 16px; } h2 { font-size: 1.2em; font-weight: 400; } .icon { height: 72px; margin: 0 0 40px; width: 72px; } inputtypecheckbox { opacity: 0; } inputtypecheckbox:focus ~ .checkbox::after { outline: -webkit-focus-ring-color auto 5px; } .interstitial-wrapper { box-sizing: border-box; font-size: 1em; line-height: 1.6em; margin: 14vh auto 0; max-width: 600px; width: 100%; } #main-message > p { display: inline; } #extended-reporting-opt-in { font-size: 0.875em; margin-top: 32px; } #extended-reporting-opt-in label { display: grid; grid-template-columns: 1.8em 1fr; position: relative; } #enhanced-protection-message { border-radius: 4px; font-size: 1em; margin-top: 32px; padding: 10px 5px; } #enhanced-protection-message label { display: grid; grid-template-columns: 2.5em 1fr; position: relative; } #enhanced-protection-message div { margin: 0.5em; } #enhanced-protection-message .icon { height: 1.5em; vertical-align: middle; width: 1.5em; } .nav-wrapper { margin-top: 51px; } .nav-wrapper::after { clear: both; content: ; display: table; width: 100%; } .small-link { color: var(--small-link-color); font-size: 0.875em; } .checkboxes { flex: 0 0 24px; } .checkbox { --padding: 0.9em; background: 0 0; display: block; height: 1em; left: -1em; padding-inline-start: var(--padding); position: absolute; right: 0; top: -0.5em; width: 1em; } .checkbox::after { border: 1px solid #fff; border-radius: 2px; content: ; height: 1em; left: var(--padding); position: absolute; top: var(--padding); width: 1em; } .checkbox::before { background: 0 0; border: 2px solid #fff; border-inline-end-width: 0; border-top-width: 0; content: ; height: 0.2em; left: calc(0.3em + var(--padding)); opacity: 0; position: absolute; top: calc(0.3em + var(--padding)); transform: rotate(-45deg); width: 0.5em; } inputtypecheckbox:checked ~ .checkbox::before { opacity: 1; } #recurrent-error-message { background: #ededed; border-radius: 4px; margin-bottom: 16px; margin-top: 12px; padding: 12px 16px; } .showing-recurrent-error-message #extended-reporting-opt-in { margin-top: 16px; } .showing-recurrent-error-message #enhanced-protection-message { margin-top: 16px; } @media (max-width: 700px) { .interstitial-wrapper { padding: 0 10%; } #error-debugging-info { overflow: auto; } } @media (max-width: 420px) { .small-link, dirrtl button, button { float: none; font-size: 0.825em; font-weight: 500; margin: 0; width: 100%; } button { padding: 16px 24px; } #details { margin: 20px 0 20px 0; } #details p:not(:first-of-type) { margin-top: 10px; } .secondary-button:not(.hidden) { display: block; margin-top: 20px; text-align: center; width: 100%; } .interstitial-wrapper { padding: 0 5%; } #extended-reporting-opt-in { margin-top: 24px; } #enhanced-protection-message { margin-top: 24px; } .nav-wrapper { margin-top: 30px; } } @media (max-width: 420px) { .nav-wrapper .secondary-button { border: 0; margin: 16px 0 0; margin-inline-end: 0; padding-bottom: 16px; padding-top: 16px; } } @media (min-width: 240px) and (max-width: 420px) and (min-height: 401px), (min-width: 421px) and (min-height: 240px) and (max-height: 560px) { body .nav-wrapper { background: var(--background-color); bottom: 0; box-shadow: 0 -12px 24px var(--background-color); left: 0; margin: 0 auto; max-width: 736px; padding-inline-end: 24px; padding-inline-start: 24px; position: fixed; right: 0; width: 100%; z-index: 2; } .interstitial-wrapper { max-width: 736px; } #details, #main-content { padding-bottom: 40px; } #details { padding-top: 5.5vh; } button.small-link { color: var(--google-blue-600); } } @media (max-width: 420px) and (orientation: portrait), (max-height: 560px) { body { margin: 0 auto; } .nav-wrapper .secondary-button, dirrtl button, button, button.small-link { font-family: Roboto-Regular, Helvetica; font-size: 0.933em; margin: 6px 0; transform: translatez(0); } .nav-wrapper { box-sizing: border-box; padding-bottom: 8px; width: 100%; } #details { box-sizing: border-box; height: auto; margin: 0; opacity: 1; transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1); } #details.hidden, #main-content.hidden { height: 0; opacity: 0; overflow: hidden; padding-bottom: 0; transition: none; } h1 { font-size: 1.5em; margin-bottom: 8px; } .icon { margin-bottom: 5.69vh; } .interstitial-wrapper { box-sizing: border-box; margin: 7vh auto 12px; padding: 0 24px; position: relative; } .interstitial-wrapper p { font-size: 0.95em; line-height: 1.61em; margin-top: 8px; } #main-content { margin: 0; transition: opacity 0.1s cubic-bezier(0.4, 0, 0.2, 1); } .small-link { border: 0; } .suggested-left > #control-buttons, .suggested-right > #control-buttons { float: none; margin: 0; } } @media (min-width: 421px) and (min-height: 500px) and (max-height: 560px) { .interstitial-wrapper { margin-top: 10vh; } } @media (min-height: 400px) and (orientation: portrait) { .interstitial-wrapper { margin-bottom: 145px; } } @media (min-height: 299px) { .nav-wrapper { padding-bottom: 16px; } } @media (max-height: 560px) and (min-height: 240px) and (orientation: landscape) { .extended-reporting-has-checkbox #details { padding-bottom: 80px; } } @media (min-height: 500px) and (max-height: 650px) and (max-width: 414px) and (orientation: portrait) { .interstitial-wrapper { margin-top: 7vh; } } @media (min-height: 650px) and (max-width: 414px) and (orientation: portrait) { .interstitial-wrapper { margin-top: 10vh; } } @media (max-height: 400px) and (orientation: portrait), (max-height: 239px) and (orientation: landscape), (max-width: 419px) and (max-height: 399px) { .interstitial-wrapper { display: flex; flex-direction: column; margin-bottom: 0; } #details { flex: 1 1 auto; order: 0; } #main-content { flex: 1 1 auto; order: 0; } .nav-wrapper { flex: 0 1 auto; margin-top: 8px; order: 1; padding-inline-end: 0; padding-inline-start: 0; position: relative; width: 100%; } .nav-wrapper .secondary-button, button { padding: 16px 24px; } button.small-link { color: var(--google-blue-600); } } @media (max-width: 239px) and (orientation: portrait) { .nav-wrapper { padding-inline-end: 0; padding-inline-start: 0; } } html:not(subframe) #sub-frame-error { display: none; } h1 { margin-top: 0; word-wrap: break-word; } h1 span { font-weight: 500; } a { text-decoration: none; } .icon { -webkit-user-select: none; display: inline-block; } .icon-generic { content: -webkit-image-set( url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAENJREFUeF7tzbEJACEQRNGBLeAasBCza2lLEGx0CxFGG9hBMDDxRy/72O9FMnIFapGylsu1fgoBdkXfUHLrQgdfrlJN1BdYBjQQm3UAAAAASUVORK5CYII) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQAQMAAADdiHD7AAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAFJJREFUeF7t0cENgDAMQ9FwYgxG6WjpaIzCCAxQxVggFuDiCvlLOeRdHR9yzjncHVoq3npu+wQUrUuJHylSTmBaespJyJQoObUeyxDQb3bEm5Au81c0pSCD8HYAAAAASUVORK5CYII) 2x ); } .icon-offline { content: -webkit-image-set( url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAGxJREFUeF7tyMEJwkAQRuFf5ipMKxYQiJ3Z2nSwrWwBA0+DQZcdxEOueaePp9+dQZFB7GpUcURSVU66yVNFj6LFICatThZB6r/ko/pbRpUgilY0Cbw5sNmb9txGXUKyuH7eV25x39DtJXUNPQGJtWFV+BT/QAAAAABJRU5ErkJggg) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQBAMAAAAVaP+LAAAAGFBMVEUAAABTU1NNTU1TU1NPT09SUlJSUlJTU1O8B7DEAAAAB3RSTlMAoArVKvVgBuEdKgAAAJ1JREFUeF7t1TEOwyAMQNG0Q6/UE+RMXD9d/tC6womIFSL9P+MnAYOXeTIzMzMzMzMzaz8J9Ri6HoITmuHXhISE8nEh9yxDh55aCEUoTGbbQwjqHwIkRAEiIaG0+0AA9VBMaE89Rogeoww936MQrWdBr4GN/z0IAdQ6nQ/FIpRXDwHcA+JIJcQowQAlFUA0MfQpXLlVQfkzR4igS6ENjknm/wiaGhsAAAAASUVORK5CYII) 2x ); position: relative; } .icon-disabled { content: -webkit-image-set( url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABICAMAAAAZF4G5AAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAASZJREFUeAHd11Fq7jAMRGGf/W/6PoWB67YMqv5DybwG/CFjRuR8JBw3+ByiRjgV9W/TJ31P0tBfC6+cj1haUFXKHmVJo5wP98WwQ0ZCbfUc6LQ6VuUBz31ikADkLMkDrfUC4rR6QGW+gF6rx7NaHWCj1Y/W6lf4L7utvgBSt3rBFSS/XBMPUILcJINHCBWYUfpWn4NBi1ZfudIc3rf6/NGEvEA+AsYTJozmXemjXeLZAov+mnkN2HfzXpMSVQDnGw++57qNJ4D1xitA2sJ+VAWMygSEaYf2mYPTjZfk2K8wmP7HLIH5Mg4/pP+PEcDzUvDMvYbs/2NWwPO5vBdMZE4EE5UTQLiBFDaUlTDPBRoJ9HdAYIkIo06og3BNXtCzy7zA1aXk5x+tJARq63eAygAAAABJRU5ErkJggg) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAACQAQMAAAArwfVjAAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAAYdJREFUeF7F1EFqwzAUBNARAmVj0FZe5QoBH6BX+dn4GlY2PYNzGx/A0CvkCIJuvIraKJKbgBvzf2g62weDGD7CYggpfFReis4J0ey9EGFIiEQQojFSlA9kSIiqd0KkFjKsewgRbStEN19mxUPTtmW9HQ/h6tyqNQ8NlSMZdzyE6qkoE0trVYGFm0n1WYeBhduzwbwBC7voS+vIxfeMjeaiLxsMMtQNwMPtuew+DjzcTHk8YMfDknEcIUOtf2lVfgVH3K4Xv5PRYAXRVMtItIJ3rfaCIVn9DsTH2NxisAVRex2Hh3hX+/mRUR08bAwPEYsI51ZxWH4Q0SpicQRXeyEaIug48FEdegARfMz/tADVsRciwTAxW308ehmC2gLraC+YCbV3QoTZexa+zegAEW5PhhgYfmbvJgcRqngGByOSXdFJcLk2JeDPEN0kxe1JhIt5FiFA+w+ItMELsUyPF2IaJ4aILqb4FbxPwhImwj6JauKgDUCYaxmYIsd4KXdMjIC9ItB5Bn4BNRwsG0XM2nwAAAAASUVORK5CYII) 2x ); width: 112px; } .hidden { display: none; } #suggestions-list a { color: var(--google-blue-600); } #suggestions-list p { margin-block-end: 0; } #suggestions-list ul { margin-top: 0; } .single-suggestion { list-style-type: none; padding-inline-start: 0; } #error-information-button { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSJub25lIiBkPSJNMCAwaDI0djI0SDB6Ii8+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ii8+PC9zdmc+); height: 24px; vertical-align: -0.15em; width: 24px; } .use-popup-container#error-information-popup-container #error-information-popup { align-items: center; background-color: var(--popup-container-background-color); display: flex; height: 100%; left: 0; position: fixed; top: 0; width: 100%; z-index: 100; } .use-popup-container#error-information-popup-container #error-information-popup-content > p { margin-bottom: 11px; margin-inline-start: 20px; } .use-popup-container#error-information-popup-container #suggestions-list ul { margin-inline-start: 15px; } .use-popup-container#error-information-popup-container #error-information-popup-box { background-color: var(--background-color); left: 5%; padding-bottom: 15px; padding-top: 15px; position: fixed; width: 90%; z-index: 101; } .use-popup-container#error-information-popup-container div.error-code { margin-inline-start: 20px; } .use-popup-container#error-information-popup-container #suggestions-list p { margin-inline-start: 20px; } :not(.use-popup-container)#error-information-popup-container #error-information-popup-close { display: none; } #error-information-popup-close { margin-bottom: 0; margin-inline-end: 35px; margin-top: 15px; text-align: end; } .link-button { color: #4285f4; display: inline-block; font-weight: 700; text-transform: uppercase; } #sub-frame-error-details { color: #8f8f8f; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3); } jscontentfailedUrl, jscontenthostName { overflow-wrap: break-word; } .secondary-button { background: #d9d9d9; color: #696969; margin-inline-end: 16px; } .snackbar { background: #323232; border-radius: 2px; bottom: 24px; box-sizing: border-box; color: #fff; font-size: 0.87em; left: 24px; max-width: 568px; min-width: 288px; opacity: 0; padding: 16px 24px 12px; position: fixed; transform: translateY(90px); will-change: opacity, transform; z-index: 999; } .snackbar-show { -webkit-animation: show-snackbar 250ms cubic-bezier(0, 0, 0.2, 1) forwards, hide-snackbar 250ms cubic-bezier(0.4, 0, 1, 1) forwards 5s; } @-webkit-keyframes show-snackbar { 100% { opacity: 1; transform: translateY(0); } } @-webkit-keyframes hide-snackbar { 0% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; transform: translateY(90px); } } .suggestions { margin-top: 18px; } .suggestion-header { font-weight: 700; margin-bottom: 4px; } .suggestion-body { color: #777; } @media (max-width: 640px), (max-height: 640px) { h1 { margin: 0 0 15px; } .suggestions { margin-top: 10px; } .suggestion-header { margin-bottom: 0; } } #download-link, #download-link-clicked { margin-bottom: 30px; margin-top: 30px; } #download-link-clicked { color: #bbb; } #download-link-clicked::before, #download-link::before { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjJlbSIgaGVpZ2h0PSIxLjJlbSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNSAyMGgxNHYtMkg1bTE0LTloLTRWM0g5djZINWw3IDcgNy03eiIgZmlsbD0iIzQyODVGNCIvPjwvc3ZnPg); display: inline-block; margin-inline-end: 4px; vertical-align: -webkit-baseline-middle; } #download-link-clicked::before { opacity: 0; width: 0; } #offline-content-list-visibility-card { border: 1px solid #fff; border-radius: 8px; display: flex; font-size: 0.8em; justify-content: space-between; line-height: 1; } #offline-content-list.list-hidden #offline-content-list-visibility-card { border-color: #dadce0; } #offline-content-list-visibility-card > div { padding: 1em; } #offline-content-list-title { color: var(--google-gray-700); } #offline-content-list-hide-text, #offline-content-list-show-text { color: #4285f4; } #offline-content-list.list-hidden #offline-content-list-hide-text, #offline-content-list:not(.list-hidden) #offline-content-list-show-text { display: none; } #offline-content-suggestions { max-height: 27em; transition: max-height 0.2s ease-in, visibility 0s 0.2s, opacity 0.2s 0.2s linear; } #offline-content-list.list-hidden #offline-content-suggestions { max-height: 0; opacity: 0; transition: opacity 0.2s linear, visibility 0s 0.2s, max-height 0.2s 0.2s ease-out; visibility: hidden; } #offline-content-list { margin-inline-start: -5%; width: 110%; } @media (max-width: 420px) { #offline-content-list { margin-inline-start: -2.5%; width: 105%; } } @media (max-width: 420px) and (orientation: portrait), (max-height: 560px) { #offline-content-list { margin-inline-start: -12px; width: calc(100% + 24px); } } .suggestion-with-image .offline-content-suggestion-thumbnail { flex-basis: 8.2em; flex-shrink: 0; } .suggestion-with-image .offline-content-suggestion-thumbnail > img { height: 100%; width: 100%; } .suggestion-with-image #offline-content-list:not(.is-rtl) .offline-content-suggestion-thumbnail > img { border-bottom-right-radius: 7px; border-top-right-radius: 7px; } .suggestion-with-image #offline-content-list.is-rtl .offline-content-suggestion-thumbnail > img { border-bottom-left-radius: 7px; border-top-left-radius: 7px; } .suggestion-with-icon .offline-content-suggestion-thumbnail { align-items: center; display: flex; justify-content: center; min-height: 4.2em; min-width: 4.2em; } .suggestion-with-icon .offline-content-suggestion-thumbnail > div { align-items: center; background-color: #f1f3f4; border-radius: 50%; display: flex; height: 2.3em; justify-content: center; width: 2.3em; } .suggestion-with-icon .offline-content-suggestion-thumbnail > div > img { height: 1.45em; width: 1.45em; } .offline-content-suggestion-favicon { height: 1em; margin-inline-end: 0.4em; width: 1.4em; } .offline-content-suggestion-favicon > img { height: 1.4em; width: 1.4em; } .no-favicon .offline-content-suggestion-favicon { display: none; } .image-video { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTcgMTAuNVY3YTEgMSAwIDAgMC0xLTFINGExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiIGZpbGw9IiMzQzQwNDMiLz48L3N2Zz4); } .image-music-note { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgM3Y5LjI2Yy0uNS0uMTctMS0uMjYtMS41LS4yNkM4IDEyIDYgMTQgNiAxNi41UzggMjEgMTAuNSAyMXM0LjUtMiA0LjUtNC41VjZoNFYzaC03eiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg); } .image-earth { content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMmM1LjUyIDAgMTAgNC40OCAxMCAxMHMtNC40OCAxMC0xMCAxMFMyIDE3LjUyIDIgMTIgNi40OCAyIDEyIDJ6TTQgMTJoNC40YzMuNDA3LjAyMiA0LjkyMiAxLjczIDQuNTQzIDUuMTI3SDkuNDg4djIuNDdhOC4wMDQgOC4wMDQgMCAwIDAgMTAuNDk4LTguMDgzQzE5LjMyNyAxMi41MDQgMTguMzMyIDEzIDE3IDEzYy0yLjEzNyAwLTMuMjA2LS45MTYtMy4yMDYtMi43NWgtMy43NDhjLS4yNzQtMi43MjguNjgzLTQuMDkyIDIuODctNC4wOTIgMC0uOTc1LjMyNy0xLjU5Ny44MTEtMS45N0E4LjAwNCA4LjAwNCAwIDAgMCA0IDEyeiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg); } .image-file { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTMgOVYzLjVMMTguNSA5TTYgMmMtMS4xMSAwLTIgLjg5LTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOGwtNi02SDZ6IiBmaWxsPSIjM0M0MDQzIi8+PC9zdmc+); } .offline-content-suggestion-texts { display: flex; flex-direction: column; justify-content: space-between; line-height: 1.3; padding: 0.9em; width: 100%; } .offline-content-suggestion-title { -webkit-box-orient: vertical; -webkit-line-clamp: 3; color: #202124; display: -webkit-box; font-size: 1.1em; overflow: hidden; text-overflow: ellipsis; } div.offline-content-suggestion { align-items: stretch; border: 1px solid #dadce0; border-radius: 8px; display: flex; justify-content: space-between; margin-bottom: 0.8em; } .suggestion-with-image { flex-direction: row; height: 8.2em; max-height: 8.2em; } .suggestion-with-icon { flex-direction: row-reverse; height: 4.2em; max-height: 4.2em; } .suggestion-with-icon .offline-content-suggestion-title { -webkit-line-clamp: 1; word-break: break-all; } .suggestion-with-icon .offline-content-suggestion-texts { padding-inline-start: 0; } .offline-content-suggestion-attribution-freshness { color: #5f6368; display: flex; font-size: 0.8em; line-height: 1.7em; } .offline-content-suggestion-attribution { -webkit-box-orient: vertical; -webkit-line-clamp: 1; display: -webkit-box; flex-shrink: 1; margin-inline-end: 0.3em; overflow: hidden; overflow-wrap: break-word; text-overflow: ellipsis; word-break: break-all; } .no-attribution .offline-content-suggestion-attribution { display: none; } .offline-content-suggestion-freshness::before { content: -; display: inline-block; flex-shrink: 0; margin-inline-end: 0.1em; margin-inline-start: 0.1em; } .no-attribution .offline-content-suggestion-freshness::before { display: none; } .offline-content-suggestion-freshness { flex-shrink: 0; } .suggestion-with-image .offline-content-suggestion-pin-spacer { flex-grow: 100; flex-shrink: 1; } .suggestion-with-image .offline-content-suggestion-pin { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjR2MjRIMFYweiIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjYikiIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6IiBmaWxsPSIjOUFBMEE2Ii8+PC9zdmc+); flex-shrink: 0; height: 1.4em; margin-inline-start: 0.4em; width: 1.4em; } #offline-content-list-action { text-align: center; transition: visibility 0s 0.2s, opacity 0.2s 0.2s linear; } #offline-content-list.list-hidden #offline-content-list-action { opacity: 0; transition: opacity 0.2s linear, visibility 0s 0.2s; visibility: hidden; } #cancel-save-page-button { background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij48Y2xpcFBhdGggaWQ9Im1hc2siPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6IiBmaWxsPSIjOUFBMEE2Ii8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjbWFzaykiIGZpbGw9IiM5QUEwQTYiIGQ9Ik0wIDBoMjR2MjRIMHoiLz48cGF0aCBjbGlwLXBhdGg9InVybCgjbWFzaykiIGZpbGw9IiMxQTczRTgiIHN0eWxlPSJhbmltYXRpb246b2ZmbGluZUFuaW1hdGlvbiA0cyBpbmZpbml0ZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxzdHlsZT5Aa2V5ZnJhbWVzIG9mZmxpbmVBbmltYXRpb257MCUsMzUle2hlaWdodDowfTYwJXtoZWlnaHQ6MTAwJX05MCV7ZmlsbC1vcGFjaXR5OjF9dG97ZmlsbC1vcGFjaXR5OjB9fTwvc3R5bGU+PC9zdmc+); background-position: right 27px center; background-repeat: no-repeat; border: 1px solid var(--google-gray-300); border-radius: 5px; color: var(--google-gray-700); margin-bottom: 26px; padding-bottom: 16px; padding-inline-end: 88px; padding-inline-start: 16px; padding-top: 16px; text-align: start; } htmldirrtl #cancel-save-page-button { background-position: left 27px center; } #save-page-for-later-button { display: flex; justify-content: start; } #save-page-for-later-button a::before { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjJlbSIgaGVpZ2h0PSIxLjJlbSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNSAyMGgxNHYtMkg1bTE0LTloLTRWM0g5djZINWw3IDcgNy03eiIgZmlsbD0iIzQyODVGNCIvPjwvc3ZnPg); display: inline-block; margin-inline-end: 4px; vertical-align: -webkit-baseline-middle; } .hidden#save-page-for-later-button { display: none; } htmlsubframe body { overflow: hidden; } #sub-frame-error { -webkit-align-items: center; -webkit-flex-flow: column; -webkit-justify-content: center; background-color: #ddd; display: -webkit-flex; height: 100%; left: 0; position: absolute; text-align: center; top: 0; transition: background-color 0.2s ease-in-out; width: 100%; } #sub-frame-error:hover { background-color: #eee; } #sub-frame-error .icon-generic { margin: 0 0 16px; } #sub-frame-error-details { margin: 0 10px; text-align: center; visibility: hidden; } #sub-frame-error:hover #sub-frame-error-details { visibility: visible; } @media (max-width: 200px), (max-height: 95px) { #sub-frame-error-details { display: none; } } @media (max-height: 100px) { #sub-frame-error .icon-generic { height: auto; margin: 0; padding-top: 0; width: 25px; } } #details-button { box-shadow: none; min-width: 0; } .suggested-left > #control-buttons, .suggested-right > #details-button { float: left; } .suggested-left > #details-button, .suggested-right > #control-buttons { float: right; } .suggested-left .secondary-button { margin-inline-end: 0; margin-inline-start: 16px; } #details-button.singular { float: none; } #download-button { padding-bottom: 4px; padding-top: 4px; position: relative; } #download-button::before { background: -webkit-image-set( url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAAO0lEQVQ4y2NgGArgPxIY1YChsOE/LtBAmpYG0mxpIOSDBpKUo2lpIDZxNJCkHKqlYZAla3RAHQ1DFgAARRroHyLNTwwAAAAASUVORK5CYII) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAAAZElEQVRYw+3Ruw3AMAwDUY3OzZUmRRD4E9iim9wNwAdbEURHyk4AAAAATiCVK8lLyPsKeT9K3lsownnunfkPxO78hKiYHxBV8x2icr5BVM+/CMf8g3DN34Rzns6ViwHUAUQ/6wIAd5Km7l6c8AAAAABJRU5ErkJggg) 2x ) no-repeat; content: ; display: inline-block; height: 24px; margin-inline-end: 4px; margin-inline-start: -4px; vertical-align: middle; width: 24px; } #download-button:disabled { background: #b4cef9; color: #fff; } #buttons::after { clear: both; content: ; display: block; width: 100%; } htmldirrtl .runner-container, htmldirrtl.offline .icon-offline { transform: scaleX(-1); } .offline { transition: filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1), background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1); will-change: filter, background-color; } .offline body { transition: background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1); } .offline #main-message > p { display: none; } .offline.inverted { background-color: #fff; filter: invert(1); } .offline.inverted body { background-color: #fff; } .offline .interstitial-wrapper { color: var(--text-color); font-size: 1em; line-height: 1.55; margin: 0 auto; max-width: 600px; padding-top: 100px; position: relative; width: 100%; } .offline .runner-container { direction: ltr; height: 150px; max-width: 600px; overflow: hidden; position: absolute; top: 35px; width: 44px; } .offline .runner-container:focus { outline: 0; } .offline .runner-container:focus-visible { outline: 3px solid var(--google-blue-300); } .offline .runner-canvas { height: 150px; max-width: 600px; opacity: 1; overflow: hidden; position: absolute; top: 0; z-index: 10; } .offline .controller { height: 100vh; left: 0; position: absolute; top: 0; width: 100vw; z-index: 9; } #offline-resources { display: none; } #offline-instruction { image-rendering: pixelated; left: 0; margin: auto; position: absolute; right: 0; top: 60px; width: fit-content; } .offline-runner-live-region { bottom: 0; clip-path: polygon(0 0, 0 0, 0 0); color: var(--background-color); display: block; font-size: xx-small; overflow: hidden; position: absolute; text-align: center; transition: color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1); user-select: none; } .slow-speed-option { align-items: center; background: var(--google-gray-50); border-radius: 24px/50%; bottom: 0; color: var(--error-code-color); display: inline-flex; font-size: 1em; left: 0; line-height: 1.1em; margin: 5px auto; padding: 2px 12px 3px 20px; position: absolute; right: 0; width: max-content; z-index: 999; } .slow-speed-option.hidden { display: none; } .slow-speed-option typecheckbox { opacity: 0; pointer-events: none; position: absolute; } .slow-speed-option .slow-speed-toggle { cursor: pointer; margin-inline-start: 8px; padding: 8px 4px; position: relative; } .slow-speed-option typecheckbox:disabled ~ .slow-speed-toggle { cursor: default; } .slow-speed-option-label typecheckbox { opacity: 0; pointer-events: none; position: absolute; } .slow-speed-option .slow-speed-toggle::after, .slow-speed-option .slow-speed-toggle::before { content: ; display: block; margin: 0 3px; transition: all 0.1s cubic-bezier(0.4, 0, 1, 1); } .slow-speed-option .slow-speed-toggle::before { background: #bdc1c6; border-radius: 0.65em; height: 0.9em; width: 2em; } .slow-speed-option .slow-speed-toggle::after { background: #fff; border-radius: 50%; box-shadow: 0 1px 3px 0 rgb(0 0 0 / 40%); height: 1.2em; position: absolute; top: 51%; transform: translate(-20%, -50%); width: 1.1em; } .slow-speed-option typecheckbox:focus + .slow-speed-toggle { box-shadow: 0 0 8px #5e9ed6; outline: 1px solid #5d9dd5; } .slow-speed-option typecheckbox:checked + .slow-speed-toggle::before { background: var(--google-blue-600); opacity: 0.5; } .slow-speed-option typecheckbox:checked + .slow-speed-toggle::after { background: var(--google-blue-600); transform: translate(calc(2em - 90%), -50%); } .slow-speed-option typecheckbox:checked:disabled + .slow-speed-toggle::before { background: #bdc1c6; } .slow-speed-option typecheckbox:checked:disabled + .slow-speed-toggle::after { background: var(--google-gray-50); } @media (max-width: 420px) { #download-button { padding-bottom: 12px; padding-top: 12px; } .suggested-left > #control-buttons, .suggested-right > #control-buttons { float: none; } .snackbar { border-radius: 0; bottom: 0; left: 0; width: 100%; } } @media (max-height: 350px) { h1 { margin: 0 0 15px; } .icon-offline { margin: 0 0 10px; } .interstitial-wrapper { margin-top: 5%; } .nav-wrapper { margin-top: 30px; } } @media (min-width: 420px) and (max-width: 736px) and (min-height: 240px) and (max-height: 420px) and (orientation: landscape) { .interstitial-wrapper { margin-bottom: 100px; } } @media (max-width: 360px) and (max-height: 480px) { .offline .interstitial-wrapper { padding-top: 60px; } .offline .runner-container { top: 8px; } } @media (min-height: 240px) and (orientation: landscape) { .offline .interstitial-wrapper { margin-bottom: 90px; } .icon-offline { margin-bottom: 20px; } } @media (max-height: 320px) and (orientation: landscape) { .icon-offline { margin-bottom: 0; } .offline .runner-container { top: 10px; } } @media (max-width: 240px) { button { padding-inline-end: 12px; padding-inline-start: 12px; } .interstitial-wrapper { overflow: inherit; padding: 0 8px; } } @media (max-width: 120px) { button { width: auto; } } .arcade-mode, .arcade-mode .runner-canvas, .arcade-mode .runner-container { image-rendering: pixelated; max-width: 100%; overflow: hidden; } .arcade-mode #buttons, .arcade-mode #main-content { opacity: 0; overflow: hidden; } .arcade-mode .interstitial-wrapper { height: 100vh; max-width: 100%; overflow: hidden; } .arcade-mode .runner-container { left: 0; margin: auto; right: 0; transform-origin: top center; transition: transform 250ms cubic-bezier(0.4, 0, 1, 1) 0.4s; z-index: 2; } @media (prefers-color-scheme: dark) { .icon { filter: invert(1); } .offline .runner-canvas { filter: invert(1); } .offline.inverted { background-color: var(--background-color); filter: invert(0); } .offline.inverted body { background-color: #fff; } .offline.inverted .offline-runner-live-region { color: #fff; } #suggestions-list a { color: var(--link-color); } #error-information-button { filter: invert(0.6); } .slow-speed-option { background: var(--google-gray-800); color: var(--google-gray-100); } .slow-speed-option .slow-speed-toggle::before, .slow-speed-option typecheckbox:checked:disabled + .slow-speed-toggle::before { background: #bdc1c6; } .slow-speed-option typecheckbox:checked + .slow-speed-toggle::after, .slow-speed-option typecheckbox:checked + .slow-speed-toggle::before { background: var(--google-blue-300); } } /style> link relstylesheet hrefcss/style.css> script> var errorPageController; const HIDDEN_CLASS hidden; function decodeUTF16Base64ToString(t) { const e atob(t); let n ; for (let t 0; t e.length; t + 2) n + String.fromCharCode(256 * e.charCodeAt(t) + e.charCodeAt(t + 1)); return n; } function toggleHelpBox() { const t document.getElementById(details); t.classList.toggle(HIDDEN_CLASS); const e document.getElementById(details-button); if ( (t.classList.contains(HIDDEN_CLASS) ? (e.innerText e.detailsText) : (e.innerText e.hideDetailsText), mobileNav) ) { document .getElementById(main-content) .classList.toggle(HIDDEN_CLASS); const t document.querySelector(.runner-container); t && t.classList.toggle(HIDDEN_CLASS); } } function diagnoseErrors() { window.errorPageController && errorPageController.diagnoseErrorsButtonClick(); } let isSubFrame !1; function updateForDnsProbe(t) { const e new JsEvalContext(t); jstProcess(e, document.getElementById(t)), onDocumentLoadOrUpdate(); } function updateIconClass(t) { const e isSubFrame ? #sub-frame-error : #main-frame-error, n document.querySelector(e + .icon); n.classList.contains(t) || (n.className icon + t); } function reloadButtonClick(t) { window.errorPageController ? errorPageController.reloadButtonClick() : (window.location t); } function downloadButtonClick() { if (window.errorPageController) { errorPageController.downloadButtonClick(); const t document.getElementById(download-button); (t.disabled !0), (t.textContent t.disabledText), document .getElementById(download-link-wrapper) .classList.add(HIDDEN_CLASS), document .getElementById(download-link-clicked-wrapper) .classList.remove(HIDDEN_CLASS); } } function detailsButtonClick() { window.errorPageController && errorPageController.detailsButtonClick(); } (window.top.location ! window.location || window.portalHost) && (document.documentElement.setAttribute(subframe, ), (isSubFrame !0)); let AvailableOfflineContent, primaryControlOnLeft !0; function setAutoFetchState(t, e) { document .getElementById(cancel-save-page-button) .classList.toggle(HIDDEN_CLASS, !t), document .getElementById(save-page-for-later-button) .classList.toggle(HIDDEN_CLASS, t || !e); } function savePageLaterClick() { errorPageController.savePageForLater(); } function cancelSavePageClick() { errorPageController.cancelSavePage(), setAutoFetchState(!1, !0); } function toggleErrorInformationPopup() { document .getElementById(error-information-popup-container) .classList.toggle(HIDDEN_CLASS); } function launchOfflineItem(t, e) { errorPageController.launchOfflineItem(t, e); } function launchDownloadsPage() { errorPageController.launchDownloadsPage(); } function getIconForSuggestedItem(t) { switch (t.content_type) { case 1: return image-video; case 2: return image-music-note; case 0: case 3: return image-earth; } return image-file; } function getSuggestedContentDiv(t, e) { let n ; const o ; if (t.thumbnail_data_uri) o.push(suggestion-with-image), (n `img src${t.thumbnail_data_uri}>`); else { o.push(suggestion-with-icon), (n `div>img class${getIconForSuggestedItem(t)}>/div>`); } let i ; return ( t.favicon_data_uri ? (i `img src${t.favicon_data_uri}>`) : o.push(no-favicon), t.attribution_base64 || o.push(no-attribution), `div classoffline-content-suggestion ${o.join( )}onclicklaunchOfflineItem(${t.ID}, ${ t.name_space })>div classoffline-content-suggestion-texts>div idoffline-content-suggestion-title-${e}classoffline-content-suggestion-title>/div>div classoffline-content-suggestion-attribution-freshness>div idoffline-content-suggestion-favicon-${e}classoffline-content-suggestion-favicon>${i}/div>div idoffline-content-suggestion-attribution-${e}classoffline-content-suggestion-attribution>/div>div classoffline-content-suggestion-freshness>${ t.date_modified }/div>div classoffline-content-suggestion-pin-spacer>/div>div classoffline-content-suggestion-pin>/div>/div>/div>div classoffline-content-suggestion-thumbnail>${n}/div>/div>` ); } function offlineContentAvailable(t, e) { if (!e || !loadTimeData.valueExists(offlineContentList)) return; const n ; for (let t 0; t e.length; t++) n.push(getSuggestedContentDiv(et, t)); document.getElementById(offline-content-suggestions).innerHTML n.join(\n); for (let t 0; t e.length; t++) (document.getElementById( `offline-content-suggestion-title-${t}` ).textContent decodeUTF16Base64ToString(et.title_base64)), (document.getElementById( `offline-content-suggestion-attribution-${t}` ).textContent decodeUTF16Base64ToString(et.attribution_base64)); const o document.getElementById(offline-content-list); rtl document.dir && o.classList.add(is-rtl), (o.hidden !1), t && toggleOfflineContentListVisibility(!1); } function toggleOfflineContentListVisibility(t) { if (!loadTimeData.valueExists(offlineContentList)) return; const e !document .getElementById(offline-content-list) .classList.toggle(list-hidden); t && window.errorPageController && errorPageController.listVisibilityChanged(e); } function onDocumentLoadOrUpdate() { const t loadTimeData.valueExists(downloadButton) && loadTimeData.getValue(downloadButton).msg, e document.getElementById(details-button), n loadTimeData.valueExists(suggestedOfflineContentPresentation); n && (document.querySelector(.nav-wrapper).classList.add(HIDDEN_CLASS), e.classList.add(HIDDEN_CLASS), (document.getElementById(download-link).hidden !t), document .getElementById(download-links-wrapper) .classList.remove(HIDDEN_CLASS), document .getElementById(error-information-popup-container) .classList.add(use-popup-container, HIDDEN_CLASS), document .getElementById(error-information-button) .classList.remove(HIDDEN_CLASS)); loadTimeData.valueExists(attemptAutoFetch) && loadTimeData.getValue(attemptAutoFetch); const o loadTimeData.valueExists(reloadButton) && loadTimeData.getValue(reloadButton).msg, i document.getElementById(reload-button), a document.getElementById(download-button); none i.style.display && none a.style.display && e.classList.add(singular), (document.getElementById(control-buttons).hidden n || !(o || t)); const s loadTimeData.valueExists(iconClass) && loadTimeData.getValue(iconClass); updateIconClass(s), isSubFrame || icon-offline ! s || (document.documentElement.classList.add(offline), new Runner(.interstitial-wrapper)); } function onDocumentLoad() { const t document.getElementById(buttons); primaryControlOnLeft ? t.classList.add(suggested-left) : t.classList.add(suggested-right), onDocumentLoadOrUpdate(); } document.addEventListener(DOMContentLoaded, onDocumentLoad); /script> script> let mobileNav !1; function onResize() { const e document.querySelector(#details), t document.querySelector(#main-content), i e.classList.contains(HIDDEN_CLASS), n document.querySelector(.runner-container); mobileNav ! window.matchMedia( (min-width: 240px) and (max-width: 420px) and (min-height: 401px), (max-height: 560px) and (min-height: 240px) and (min-width: 421px) ).matches && ((mobileNav !mobileNav) ? (t.classList.toggle(HIDDEN_CLASS, !i), e.classList.toggle(HIDDEN_CLASS, i), n && n.classList.toggle(HIDDEN_CLASS, !i)) : i || (t.classList.remove(HIDDEN_CLASS), e.classList.remove(HIDDEN_CLASS), n && n.classList.remove(HIDDEN_CLASS))); } function setupMobileNav() { window.addEventListener(resize, onResize), onResize(); } document.addEventListener(DOMContentLoaded, setupMobileNav); /script> script> function Runner(t, e) { if (Runner.instance_) return Runner.instance_; (Runner.instance_ this), (this.outerContainerEl document.querySelector(t)), (this.containerEl null), (this.snackbarEl null), (this.touchController null), (this.config e || Object.assign(Runner.config, Runner.normalConfig)), (this.dimensions Runner.defaultDimensions), (this.gameType null), (Runner.spriteDefinition Runner.spriteDefinitionByType.original), (this.altGameImageSprite null), (this.altGameModeActive !1), (this.altGameModeFlashTimer null), (this.fadeInTimer 0), (this.canvas null), (this.canvasCtx null), (this.tRex null), (this.distanceMeter null), (this.distanceRan 0), (this.highestScore 0), (this.syncHighestScore !1), (this.time 0), (this.runningTime 0), (this.msPerFrame 1e3 / FPS), (this.currentSpeed this.config.SPEED), (Runner.slowDown !1), (this.obstacles ), (this.activated !1), (this.playing !1), (this.crashed !1), (this.paused !1), (this.inverted !1), (this.invertTimer 0), (this.resizeTimerId_ null), (this.playCount 0), (this.audioBuffer null), (this.soundFx {}), (this.generatedSoundFx null), (this.audioContext null), (this.images {}), (this.imagesLoaded 0), (this.pollingGamepads !1), (this.gamepadIndex void 0), (this.previousGamepad null), this.isDisabled() ? this.setupDisabledRunner() : (Runner.isAltGameModeEnabled() && (this.initAltGameType(), (Runner.gameType this.gameType)), this.loadImages(), (window.initializeEasterEggHighScore this.initializeHighScore.bind(this))); } const DEFAULT_WIDTH 600, FPS 60, IS_HIDPI window.devicePixelRatio > 1, IS_IOS /CriOS/.test(window.navigator.userAgent), IS_MOBILE /Android/.test(window.navigator.userAgent) || IS_IOS, IS_RTL rtl document.querySelector(html).dir, ARCADE_MODE_URL chrome://dino/, RESOURCE_POSTFIX offline-resources-, A11Y_STRINGS { ariaLabel: dinoGameA11yAriaLabel, description: dinoGameA11yDescription, gameOver: dinoGameA11yGameOver, highScore: dinoGameA11yHighScore, jump: dinoGameA11yJump, started: dinoGameA11yStartGame, speedLabel: dinoGameA11ySpeedToggle, }; function GeneratedSoundFx() { (this.audioCues !1), (this.context null), (this.panner null); } function speakPhrase(t) { if (speechSynthesis in window) { const e new SpeechSynthesisUtterance(t); window.speechSynthesis.getVoices(); (e.text t), speechSynthesis.speak(e); } } function announcePhrase(t) { Runner.a11yStatusEl && ((Runner.a11yStatusEl.textContent ), (Runner.a11yStatusEl.textContent t)); } function getA11yString(t) { return loadTimeData && loadTimeData.valueExists(t) ? loadTimeData.getString(t) : ; } function getRandomNum(t, e) { return Math.floor(Math.random() * (e - t + 1)) + t; } function vibrate(t) { IS_MOBILE && window.navigator.vibrate && window.navigator.vibrate(t); } function createCanvas(t, e, i, s) { const n document.createElement(canvas); return ( (n.className s ? Runner.classes.CANVAS + + s : Runner.classes.CANVAS), (n.width e), (n.height i), t.appendChild(n), n ); } function decodeBase64ToArrayBuffer(t) { const e (t.length / 4) * 3, i atob(t), s new ArrayBuffer(e), n new Uint8Array(s); for (let t 0; t e; t++) nt i.charCodeAt(t); return n.buffer; } function getTimeStamp() { return IS_IOS ? new Date().getTime() : performance.now(); } function GameOverPanel(t, e, i, s, n, a) { (this.canvas t), (this.canvasCtx t.getContext(2d)), (this.canvasDimensions s), (this.textImgPos e), (this.restartImgPos i), (this.altGameEndImgPos n), (this.altGameModeActive a), (this.frameTimeStamp 0), (this.animTimer 0), (this.currentFrame 0), (this.gameOverRafId null), (this.flashTimer 0), (this.flashCounter 0), (this.originalText !0); } function checkForCollision(t, e, i) { Runner.defaultDimensions.WIDTH, t.xPos; const s new CollisionBox( e.xPos + 1, e.yPos + 1, e.config.WIDTH - 2, e.config.HEIGHT - 2 ), n new CollisionBox( t.xPos + 1, t.yPos + 1, t.typeConfig.width * t.size - 2, t.typeConfig.height - 2 ); if ((i && drawCollisionBoxes(i, s, n), boxCompare(s, n))) { const a t.collisionBoxes; let o ; o Runner.isAltGameModeEnabled() ? Runner.spriteDefinition.TREX.COLLISION_BOXES : e.ducking ? Trex.collisionBoxes.DUCKING : Trex.collisionBoxes.RUNNING; for (let t 0; t o.length; t++) for (let e 0; e a.length; e++) { const h createAdjustedCollisionBox(ot, s), r createAdjustedCollisionBox(ae, n), c boxCompare(h, r); if ((i && drawCollisionBoxes(i, h, r), c)) return h, r; } } } function createAdjustedCollisionBox(t, e) { return new CollisionBox(t.x + e.x, t.y + e.y, t.width, t.height); } function drawCollisionBoxes(t, e, i) { t.save(), (t.strokeStyle #f00), t.strokeRect(e.x, e.y, e.width, e.height), (t.strokeStyle #0f0), t.strokeRect(i.x, i.y, i.width, i.height), t.restore(); } function boxCompare(t, e) { let i !1; t.x, t.y; const s e.x; e.y; return ( t.x s + e.width && t.x + t.width > s && t.y e.y + e.height && t.height + t.y > e.y && (i !0), i ); } function CollisionBox(t, e, i, s) { (this.x t), (this.y e), (this.width i), (this.height s); } function Obstacle(t, e, i, s, n, a, o, h) { (this.canvasCtx t), (this.spritePos i), (this.typeConfig e), (this.gapCoefficient Runner.slowDown ? 2 * n : n), (this.size getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH)), (this.dimensions s), (this.remove !1), (this.xPos s.WIDTH + (o || 0)), (this.yPos 0), (this.width 0), (this.collisionBoxes ), (this.gap 0), (this.speedOffset 0), (this.altGameModeActive h), (this.imageSprite COLLECTABLE this.typeConfig.type ? Runner.altCommonImageSprite : this.altGameModeActive ? Runner.altGameImageSprite : Runner.imageSprite), (this.currentFrame 0), (this.timer 0), this.init(a); } function Trex(t, e) { (this.canvas t), (this.canvasCtx t.getContext(2d)), (this.spritePos e), (this.xPos 0), (this.yPos 0), (this.xInitialPos 0), (this.groundYPos 0), (this.currentFrame 0), (this.currentAnimFrames ), (this.blinkDelay 0), (this.blinkCount 0), (this.animStartTime 0), (this.timer 0), (this.msPerFrame 1e3 / FPS), (this.config Object.assign(Trex.config, Trex.normalJumpConfig)), (this.status Trex.status.WAITING), (this.jumping !1), (this.ducking !1), (this.jumpVelocity 0), (this.reachedMinHeight !1), (this.speedDrop !1), (this.jumpCount 0), (this.jumpspotX 0), (this.altGameModeEnabled !1), (this.flashing !1), this.init(); } function DistanceMeter(t, e, i) { (this.canvas t), (this.canvasCtx t.getContext(2d)), (this.image Runner.imageSprite), (this.spritePos e), (this.x 0), (this.y 5), (this.currentDistance 0), (this.maxScore 0), (this.highScore 0), (this.container null), (this.digits ), (this.achievement !1), (this.defaultString ), (this.flashTimer 0), (this.flashIterations 0), (this.invertTrigger !1), (this.flashingRafId null), (this.highScoreBounds {}), (this.highScoreFlashing !1), (this.config DistanceMeter.config), (this.maxScoreUnits this.config.MAX_DISTANCE_UNITS), (this.canvasWidth i), this.init(i); } function Cloud(t, e, i) { (this.canvas t), (this.canvasCtx this.canvas.getContext(2d)), (this.spritePos e), (this.containerWidth i), (this.xPos i), (this.yPos 0), (this.remove !1), (this.gap getRandomNum( Cloud.config.MIN_CLOUD_GAP, Cloud.config.MAX_CLOUD_GAP )), this.init(); } function BackgroundEl(t, e, i, s) { (this.canvas t), (this.canvasCtx this.canvas.getContext(2d)), (this.spritePos e), (this.containerWidth i), (this.xPos i), (this.yPos 0), (this.remove !1), (this.type s), (this.gap getRandomNum( BackgroundEl.config.MIN_GAP, BackgroundEl.config.MAX_GAP )), (this.animTimer 0), (this.switchFrames !1), (this.spriteConfig {}), this.init(); } function NightMode(t, e, i) { (this.spritePos e), (this.canvas t), (this.canvasCtx t.getContext(2d)), (this.xPos i - 50), (this.yPos 30), (this.currentPhase 0), (this.opacity 0), (this.containerWidth i), (this.stars ), (this.drawStars !1), this.placeStars(); } function HorizonLine(t, e) { let i e.SOURCE_X, s e.SOURCE_Y; IS_HIDPI && ((i * 2), (s * 2)), (this.spritePos { x: i, y: s }), (this.canvas t), (this.canvasCtx t.getContext(2d)), (this.sourceDimensions {}), (this.dimensions e), (this.sourceXPos this.spritePos.x, this.spritePos.x + this.dimensions.WIDTH, ), (this.xPos ), (this.yPos 0), (this.bumpThreshold 0.5), this.setSourceDimensions(e), this.draw(); } function Horizon(t, e, i, s) { (this.canvas t), (this.canvasCtx this.canvas.getContext(2d)), (this.config Horizon.config), (this.dimensions i), (this.gapCoefficient s), (this.obstacles ), (this.obstacleHistory ), (this.horizonOffsets 0, 0), (this.cloudFrequency this.config.CLOUD_FREQUENCY), (this.spritePos e), (this.nightMode null), (this.altGameModeActive !1), (this.clouds ), (this.cloudSpeed this.config.BG_CLOUD_SPEED), (this.backgroundEls ), (this.lastEl null), (this.backgroundSpeed this.config.BG_CLOUD_SPEED), (this.horizonLine null), (this.horizonLines ), this.init(); } (Runner.config { AUDIOCUE_PROXIMITY_THRESHOLD: 190, AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 250, BG_CLOUD_SPEED: 0.2, BOTTOM_PAD: 10, CANVAS_IN_VIEW_OFFSET: -10, CLEAR_TIME: 3e3, CLOUD_FREQUENCY: 0.5, FADE_DURATION: 1, FLASH_DURATION: 1e3, GAMEOVER_CLEAR_TIME: 1200, INITIAL_JUMP_VELOCITY: 12, INVERT_FADE_DURATION: 12e3, MAX_BLINK_COUNT: 3, MAX_CLOUDS: 6, MAX_OBSTACLE_LENGTH: 3, MAX_OBSTACLE_DUPLICATION: 2, RESOURCE_TEMPLATE_ID: audio-resources, SPEED: 6, SPEED_DROP_COEFFICIENT: 3, ARCADE_MODE_INITIAL_TOP_POSITION: 35, ARCADE_MODE_TOP_POSITION_PERCENT: 0.1, }), (Runner.normalConfig { ACCELERATION: 0.001, AUDIOCUE_PROXIMITY_THRESHOLD: 190, AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 250, GAP_COEFFICIENT: 0.6, INVERT_DISTANCE: 700, MAX_SPEED: 13, MOBILE_SPEED_COEFFICIENT: 1.2, SPEED: 6, }), (Runner.slowConfig { ACCELERATION: 5e-4, AUDIOCUE_PROXIMITY_THRESHOLD: 170, AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 220, GAP_COEFFICIENT: 0.3, INVERT_DISTANCE: 350, MAX_SPEED: 9, MOBILE_SPEED_COEFFICIENT: 1.5, SPEED: 4.2, }), (Runner.defaultDimensions { WIDTH: 600, HEIGHT: 150 }), (Runner.classes { ARCADE_MODE: arcade-mode, CANVAS: runner-canvas, CONTAINER: runner-container, CRASHED: crashed, ICON: icon-offline, INVERTED: inverted, SNACKBAR: snackbar, SNACKBAR_SHOW: snackbar-show, TOUCH_CONTROLLER: controller, }), (Runner.sounds { BUTTON_PRESS: offline-sound-press, HIT: offline-sound-hit, SCORE: offline-sound-reached, }), (Runner.keycodes { JUMP: { 38: 1, 32: 1 }, DUCK: { 40: 1 }, RESTART: { 13: 1 }, }), (Runner.events { ANIM_END: webkitAnimationEnd, CLICK: click, KEYDOWN: keydown, KEYUP: keyup, POINTERDOWN: pointerdown, POINTERUP: pointerup, RESIZE: resize, TOUCHEND: touchend, TOUCHSTART: touchstart, VISIBILITY: visibilitychange, BLUR: blur, FOCUS: focus, LOAD: load, GAMEPADCONNECTED: gamepadconnected, }), (Runner.prototype { initAltGameType() { GAME_TYPE.length > 0 && (this.gameType loadTimeData && loadTimeData.valueExists(altGameType) ? GAME_TYPE parseInt(loadTimeData.getValue(altGameType), 10) - 1 : ); }, isDisabled: () > loadTimeData && loadTimeData.valueExists(disabledEasterEgg), setupDisabledRunner() { (this.containerEl document.createElement(div)), (this.containerEl.className Runner.classes.SNACKBAR), (this.containerEl.textContent loadTimeData.getValue(disabledEasterEgg)), this.outerContainerEl.appendChild(this.containerEl), document.addEventListener( Runner.events.KEYDOWN, function (t) { Runner.keycodes.JUMPt.keyCode && (this.containerEl.classList.add( Runner.classes.SNACKBAR_SHOW ), document .querySelector(.icon) .classList.add(icon-disabled)); }.bind(this) ); }, updateConfigSetting(t, e) { if (t in this.config && void 0 ! e) switch (((this.configt e), t)) { case GRAVITY: case MIN_JUMP_HEIGHT: case SPEED_DROP_COEFFICIENT: this.tRex.configt e; break; case INITIAL_JUMP_VELOCITY: this.tRex.setJumpVelocity(e); break; case SPEED: this.setSpeed(e); } }, createImageElement(t) { const e loadTimeData && loadTimeData.valueExists(t) ? loadTimeData.getString(t) : null; if (e) { const i document.createElement(img); return ( (i.id t), (i.src e), document.getElementById(offline-resources).appendChild(i), i ); } return null; }, loadImages() { let t 1x; (this.spriteDef Runner.spriteDefinition.LDPI), IS_HIDPI && ((t 2x), (this.spriteDef Runner.spriteDefinition.HDPI)), (Runner.imageSprite document.getElementById( RESOURCE_POSTFIX + t )), this.gameType && ((Runner.altGameImageSprite this.createImageElement( altGameSpecificImage + t )), (Runner.altCommonImageSprite this.createImageElement( altGameCommonImage + t ))), (Runner.origImageSprite Runner.imageSprite), (Runner.altGameImageSprite && Runner.altCommonImageSprite) || ((Runner.isAltGameModeEnabled () > !1), (this.altGameModeActive !1)), Runner.imageSprite.complete ? this.init() : Runner.imageSprite.addEventListener( Runner.events.LOAD, this.init.bind(this) ); }, loadSounds() { if (!IS_IOS) { this.audioContext new AudioContext(); const t document.getElementById( this.config.RESOURCE_TEMPLATE_ID ).content; for (const e in Runner.sounds) { let i t.getElementById(Runner.soundse).src; const s decodeBase64ToArrayBuffer( (i i.substr(i.indexOf(,) + 1)) ); this.audioContext.decodeAudioData( s, function (t, e) { this.soundFxt e; }.bind(this, e) ); } } }, setSpeed(t) { const e t || this.currentSpeed; if (this.dimensions.WIDTH 600) { const t Runner.slowDown ? e : ((e * this.dimensions.WIDTH) / 600) * this.config.MOBILE_SPEED_COEFFICIENT; this.currentSpeed t > e ? e : t; } else t && (this.currentSpeed t); }, init() { (document.querySelector( . + Runner.classes.ICON ).style.visibility hidden), this.adjustDimensions(), this.setSpeed(); const t getA11yString(A11Y_STRINGS.ariaLabel); (this.containerEl document.createElement(div)), this.containerEl.setAttribute( role, IS_MOBILE ? button : application ), this.containerEl.setAttribute(tabindex, 0), this.containerEl.setAttribute(title, t), (this.containerEl.className Runner.classes.CONTAINER), (this.canvas createCanvas( this.containerEl, this.dimensions.WIDTH, this.dimensions.HEIGHT )), (this.a11yStatusEl document.createElement(span)), (this.a11yStatusEl.className offline-runner-live-region), this.a11yStatusEl.setAttribute(aria-live, assertive), (this.a11yStatusEl.textContent ), (Runner.a11yStatusEl this.a11yStatusEl), (this.slowSpeedCheckboxLabel document.createElement(label)), (this.slowSpeedCheckboxLabel.className slow-speed-option hidden), (this.slowSpeedCheckboxLabel.textContent getA11yString( A11Y_STRINGS.speedLabel )), (this.slowSpeedCheckbox document.createElement(input)), this.slowSpeedCheckbox.setAttribute(type, checkbox), this.slowSpeedCheckbox.setAttribute( title, getA11yString(A11Y_STRINGS.speedLabel) ), this.slowSpeedCheckbox.setAttribute(tabindex, 0), this.slowSpeedCheckbox.setAttribute(checked, checked), (this.slowSpeedToggleEl document.createElement(span)), (this.slowSpeedToggleEl.className slow-speed-toggle), this.slowSpeedCheckboxLabel.appendChild(this.slowSpeedCheckbox), this.slowSpeedCheckboxLabel.appendChild(this.slowSpeedToggleEl), IS_IOS ? this.outerContainerEl.appendChild(this.a11yStatusEl) : this.containerEl.appendChild(this.a11yStatusEl), announcePhrase(getA11yString(A11Y_STRINGS.description)), (this.generatedSoundFx new GeneratedSoundFx()), (this.canvasCtx this.canvas.getContext(2d)), (this.canvasCtx.fillStyle #f7f7f7), this.canvasCtx.fill(), Runner.updateCanvasScaling(this.canvas), (this.horizon new Horizon( this.canvas, this.spriteDef, this.dimensions, this.config.GAP_COEFFICIENT )), (this.distanceMeter new DistanceMeter( this.canvas, this.spriteDef.TEXT_SPRITE, this.dimensions.WIDTH )), (this.tRex new Trex(this.canvas, this.spriteDef.TREX)), this.outerContainerEl.appendChild(this.containerEl), this.outerContainerEl.appendChild(this.slowSpeedCheckboxLabel), this.startListening(), this.update(), window.addEventListener( Runner.events.RESIZE, this.debounceResize.bind(this) ); const e window.matchMedia((prefers-color-scheme: dark)); (this.isDarkMode e && e.matches), e.addListener((t) > { this.isDarkMode t.matches; }); }, createTouchController() { (this.touchController document.createElement(div)), (this.touchController.className Runner.classes.TOUCH_CONTROLLER), this.touchController.addEventListener( Runner.events.TOUCHSTART, this ), this.touchController.addEventListener( Runner.events.TOUCHEND, this ), this.outerContainerEl.appendChild(this.touchController); }, debounceResize() { this.resizeTimerId_ || (this.resizeTimerId_ setInterval( this.adjustDimensions.bind(this), 250 )); }, adjustDimensions() { clearInterval(this.resizeTimerId_), (this.resizeTimerId_ null); const t window.getComputedStyle(this.outerContainerEl), e Number(t.paddingLeft.substr(0, t.paddingLeft.length - 2)); (this.dimensions.WIDTH this.outerContainerEl.offsetWidth - 2 * e), this.isArcadeMode() && ((this.dimensions.WIDTH Math.min(600, this.dimensions.WIDTH)), this.activated && this.setArcadeModeContainerScale()), this.canvas && ((this.canvas.width this.dimensions.WIDTH), (this.canvas.height this.dimensions.HEIGHT), Runner.updateCanvasScaling(this.canvas), this.distanceMeter.calcXPos(this.dimensions.WIDTH), this.clearCanvas(), this.horizon.update(0, 0, !0), this.tRex.update(0), this.playing || this.crashed || this.paused ? ((this.containerEl.style.width this.dimensions.WIDTH + px), (this.containerEl.style.height this.dimensions.HEIGHT + px), this.distanceMeter.update(0, Math.ceil(this.distanceRan)), this.stop()) : this.tRex.draw(0, 0), this.crashed && this.gameOverPanel && (this.gameOverPanel.updateDimensions(this.dimensions.WIDTH), this.gameOverPanel.draw(this.altGameModeActive, this.tRex))); }, playIntro() { if (this.activated || this.crashed) this.crashed && this.restart(); else { (this.playingIntro !0), (this.tRex.playingIntro !0); const t @-webkit-keyframes intro { from { width: + Trex.config.WIDTH + px }to { width: + this.dimensions.WIDTH + px }}; document.styleSheets0.insertRule(t, 0), this.containerEl.addEventListener( Runner.events.ANIM_END, this.startGame.bind(this) ), (this.containerEl.style.webkitAnimation intro .4s ease-out 1 both), (this.containerEl.style.width this.dimensions.WIDTH + px), this.setPlayStatus(!0), (this.activated !0); } }, startGame() { this.isArcadeMode() && this.setArcadeMode(), this.toggleSpeed(), (this.runningTime 0), (this.playingIntro !1), (this.tRex.playingIntro !1), (this.containerEl.style.webkitAnimation ), this.playCount++, this.generatedSoundFx.background(), announcePhrase(getA11yString(A11Y_STRINGS.started)), Runner.audioCues && this.containerEl.setAttribute( title, getA11yString(A11Y_STRINGS.jump) ), document.addEventListener( Runner.events.VISIBILITY, this.onVisibilityChange.bind(this) ), window.addEventListener( Runner.events.BLUR, this.onVisibilityChange.bind(this) ), window.addEventListener( Runner.events.FOCUS, this.onVisibilityChange.bind(this) ); }, clearCanvas() { this.canvasCtx.clearRect( 0, 0, this.dimensions.WIDTH, this.dimensions.HEIGHT ); }, isCanvasInView() { return ( this.containerEl.getBoundingClientRect().top > Runner.config.CANVAS_IN_VIEW_OFFSET ); }, enableAltGameMode() { (Runner.imageSprite Runner.altGameImageSprite), (Runner.spriteDefinition Runner.spriteDefinitionByTypeRunner.gameType), (this.spriteDef IS_HIDPI ? Runner.spriteDefinition.HDPI : Runner.spriteDefinition.LDPI), (this.altGameModeActive !0), this.tRex.enableAltGameMode(this.spriteDef.TREX), this.horizon.enableAltGameMode(this.spriteDef), this.generatedSoundFx.background(); }, update() { this.updatePending !1; const t getTimeStamp(); let e t - (this.time || t); if ( (this.altGameModeFlashTimer 0 || 0 this.altGameModeFlashTimer ? ((this.altGameModeFlashTimer null), this.tRex.setFlashing(!1), this.enableAltGameMode()) : this.altGameModeFlashTimer > 0 && ((this.altGameModeFlashTimer - e), this.tRex.update(e), (e 0)), (this.time t), this.playing) ) { this.clearCanvas(), this.altGameModeActive && this.fadeInTimer this.config.FADE_DURATION ? ((this.fadeInTimer + e / 1e3), (this.canvasCtx.globalAlpha this.fadeInTimer)) : (this.canvasCtx.globalAlpha 1), this.tRex.jumping && this.tRex.updateJump(e), (this.runningTime + e); const t this.runningTime > this.config.CLEAR_TIME; if ( (1 ! this.tRex.jumpCount || this.playingIntro || this.playIntro(), this.playingIntro) ) this.horizon.update(0, this.currentSpeed, t); else if (!this.crashed) { const i this.isDarkMode ^ this.inverted; (e this.activated ? e : 0), this.horizon.update(e, this.currentSpeed, t, i); } let i t && checkForCollision(this.horizon.obstacles0, this.tRex); if (Runner.audioCues && t) { const t COLLECTABLE ! this.horizon.obstacles0.typeConfig.type; if (!this.horizon.obstacles0.jumpAlerted) { const e Runner.isMobileMouseInput ? Runner.config.AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y : Runner.config.AUDIOCUE_PROXIMITY_THRESHOLD, i e + e * Math.log10(this.currentSpeed / Runner.config.SPEED); this.horizon.obstacles0.xPos i && (t && this.generatedSoundFx.jump(), (this.horizon.obstacles0.jumpAlerted !0)); } } Runner.isAltGameModeEnabled() && i && COLLECTABLE this.horizon.obstacles0.typeConfig.type && (this.horizon.removeFirstObstacle(), this.tRex.setFlashing(!0), (i !1), (this.altGameModeFlashTimer this.config.FLASH_DURATION), (this.runningTime 0), this.generatedSoundFx.collect()), i ? this.gameOver() : ((this.distanceRan + (this.currentSpeed * e) / this.msPerFrame), this.currentSpeed this.config.MAX_SPEED && (this.currentSpeed + this.config.ACCELERATION)); const s this.distanceMeter.update( e, Math.ceil(this.distanceRan) ); if ( (!Runner.audioCues && s && this.playSound(this.soundFx.SCORE), !Runner.isAltGameModeEnabled()) ) if (this.invertTimer > this.config.INVERT_FADE_DURATION) (this.invertTimer 0), (this.invertTrigger !1), this.invert(!1); else if (this.invertTimer) this.invertTimer + e; else { const t this.distanceMeter.getActualDistance( Math.ceil(this.distanceRan) ); t > 0 && ((this.invertTrigger !(t % this.config.INVERT_DISTANCE)), this.invertTrigger && 0 this.invertTimer && ((this.invertTimer + e), this.invert(!1))); } } (this.playing || (!this.activated && this.tRex.blinkCount Runner.config.MAX_BLINK_COUNT)) && (this.tRex.update(e), this.scheduleNextUpdate()); }, handleEvent(t) { return function (e, i) { switch (e) { case i.KEYDOWN: case i.TOUCHSTART: case i.POINTERDOWN: this.onKeyDown(t); break; case i.KEYUP: case i.TOUCHEND: case i.POINTERUP: this.onKeyUp(t); break; case i.GAMEPADCONNECTED: this.onGamepadConnected(t); } }.bind(this)(t.type, Runner.events); }, handleCanvasKeyPress(t) { this.activated || Runner.audioCues ? t.keyCode && Runner.keycodes.JUMPt.keyCode && this.onKeyDown(t) : (this.toggleSpeed(), (Runner.audioCues !0), this.generatedSoundFx.init(), (Runner.generatedSoundFx this.generatedSoundFx), (Runner.config.CLEAR_TIME * 1.2)); }, preventScrolling(t) { 32 t.keyCode && t.preventDefault(); }, toggleSpeed() { if (Runner.audioCues) { if (Runner.slowDown ! this.slowSpeedCheckbox.checked) { Runner.slowDown this.slowSpeedCheckbox.checked; const t Runner.slowDown ? Runner.slowConfig : Runner.normalConfig; (Runner.config Object.assign(Runner.config, t)), (this.currentSpeed t.SPEED), this.tRex.enableSlowConfig(), this.horizon.adjustObstacleSpeed(); } this.playing && this.disableSpeedToggle(!0); } }, showSpeedToggle(t) { const e t && focus t.type; (Runner.audioCues || e) && this.slowSpeedCheckboxLabel.classList.toggle( HIDDEN_CLASS, !e && !this.crashed ); }, disableSpeedToggle(t) { t ? this.slowSpeedCheckbox.setAttribute(disabled, disabled) : this.slowSpeedCheckbox.removeAttribute(disabled); }, startListening() { this.containerEl.addEventListener( Runner.events.KEYDOWN, this.handleCanvasKeyPress.bind(this) ), IS_MOBILE || this.containerEl.addEventListener( Runner.events.FOCUS, this.showSpeedToggle.bind(this) ), this.canvas.addEventListener( Runner.events.KEYDOWN, this.preventScrolling.bind(this) ), this.canvas.addEventListener( Runner.events.KEYUP, this.preventScrolling.bind(this) ), document.addEventListener(Runner.events.KEYDOWN, this), document.addEventListener(Runner.events.KEYUP, this), this.containerEl.addEventListener(Runner.events.TOUCHSTART, this), document.addEventListener(Runner.events.POINTERDOWN, this), document.addEventListener(Runner.events.POINTERUP, this), this.isArcadeMode() && window.addEventListener(Runner.events.GAMEPADCONNECTED, this); }, stopListening() { document.removeEventListener(Runner.events.KEYDOWN, this), document.removeEventListener(Runner.events.KEYUP, this), this.touchController && (this.touchController.removeEventListener( Runner.events.TOUCHSTART, this ), this.touchController.removeEventListener( Runner.events.TOUCHEND, this )), this.containerEl.removeEventListener( Runner.events.TOUCHSTART, this ), document.removeEventListener(Runner.events.POINTERDOWN, this), document.removeEventListener(Runner.events.POINTERUP, this), this.isArcadeMode() && window.removeEventListener( Runner.events.GAMEPADCONNECTED, this ); }, onKeyDown(t) { if ( (IS_MOBILE && this.playing && t.preventDefault(), this.isCanvasInView()) ) { if ( Runner.keycodes.JUMPt.keyCode && t.target this.slowSpeedCheckbox ) return; if (!this.crashed && !this.paused) { const e (IS_MOBILE && t.type Runner.events.POINTERDOWN && mouse t.pointerType && t.target this.containerEl) || (IS_IOS && touch t.pointerType && document.activeElement this.containerEl); Runner.keycodes.JUMPt.keyCode || t.type Runner.events.TOUCHSTART || e || (Runner.keycodes.DUCKt.keyCode && this.altGameModeActive) ? (t.preventDefault(), this.playing || (this.touchController || t.type ! Runner.events.TOUCHSTART || this.createTouchController(), e && this.handleCanvasKeyPress(t), this.loadSounds(), this.setPlayStatus(!0), this.update(), window.errorPageController && errorPageController.trackEasterEgg()), this.tRex.jumping || this.tRex.ducking || (Runner.audioCues ? this.generatedSoundFx.cancelFootSteps() : this.playSound(this.soundFx.BUTTON_PRESS), this.tRex.startJump(this.currentSpeed))) : !this.altGameModeActive && this.playing && Runner.keycodes.DUCKt.keyCode && (t.preventDefault(), this.tRex.jumping ? this.tRex.setSpeedDrop() : this.tRex.jumping || this.tRex.ducking || this.tRex.setDuck(!0)); } } }, onKeyUp(t) { const e String(t.keyCode), i Runner.keycodes.JUMPe || t.type Runner.events.TOUCHEND || t.type Runner.events.POINTERUP; if (this.isRunning() && i) this.tRex.endJump(); else if (Runner.keycodes.DUCKe) (this.tRex.speedDrop !1), this.tRex.setDuck(!1); else if (this.crashed) { const i getTimeStamp() - this.time; this.isCanvasInView() && (Runner.keycodes.RESTARTe || this.isLeftClickOnCanvas(t) || (i > this.config.GAMEOVER_CLEAR_TIME && Runner.keycodes.JUMPe)) && this.handleGameOverClicks(t); } else this.paused && i && (this.tRex.reset(), this.play()); }, onGamepadConnected(t) { this.pollingGamepads || this.pollGamepadState(); }, pollGamepadState() { const t navigator.getGamepads(); this.pollActiveGamepad(t), (this.pollingGamepads !0), requestAnimationFrame(this.pollGamepadState.bind(this)); }, pollForActiveGamepad(t) { for (let e 0; e t.length; ++e) if (te && te.buttons.length > 0 && te.buttons0.pressed) return (this.gamepadIndex e), void this.pollActiveGamepad(t); }, pollActiveGamepad(t) { if (void 0 this.gamepadIndex) return void this.pollForActiveGamepad(t); const e tthis.gamepadIndex; if (!e) return ( (this.gamepadIndex void 0), void this.pollForActiveGamepad(t) ); this.pollGamepadButton(e, 0, 38), e.buttons.length > 2 && this.pollGamepadButton(e, 1, 40), e.buttons.length > 10 && this.pollGamepadButton(e, 9, 13), (this.previousGamepad e); }, pollGamepadButton(t, e, i) { const s t.buttonse.pressed; let n !1; if ( (this.previousGamepad && (n this.previousGamepad.buttonse.pressed), s ! n) ) { const t new KeyboardEvent( s ? Runner.events.KEYDOWN : Runner.events.KEYUP, { keyCode: i } ); document.dispatchEvent(t); } }, handleGameOverClicks(t) { t.target ! this.slowSpeedCheckbox && (t.preventDefault(), this.distanceMeter.hasClickedOnHighScore(t) && this.highestScore ? this.distanceMeter.isHighScoreFlashing() ? (this.saveHighScore(0, !0), this.distanceMeter.resetHighScore()) : this.distanceMeter.startHighScoreFlashing() : (this.distanceMeter.cancelHighScoreFlashing(), this.restart())); }, isLeftClickOnCanvas(t) { return ( null ! t.button && t.button 2 && t.type Runner.events.POINTERUP && (t.target this.canvas || (IS_MOBILE && Runner.audioCues && t.target this.containerEl)) ); }, scheduleNextUpdate() { this.updatePending || ((this.updatePending !0), (this.raqId requestAnimationFrame(this.update.bind(this)))); }, isRunning() { return !!this.raqId; }, initializeHighScore(t) { (this.syncHighestScore !0), (t Math.ceil(t)) this.highestScore ? window.errorPageController && errorPageController.updateEasterEggHighScore( this.highestScore ) : ((this.highestScore t), this.distanceMeter.setHighScore(this.highestScore)); }, saveHighScore(t, e) { (this.highestScore Math.ceil(t)), this.distanceMeter.setHighScore(this.highestScore), this.syncHighestScore && window.errorPageController && (e ? errorPageController.resetEasterEggHighScore() : errorPageController.updateEasterEggHighScore( this.highestScore )); }, gameOver() { if ( (this.playSound(this.soundFx.HIT), vibrate(200), this.stop(), (this.crashed !0), (this.distanceMeter.achievement !1), this.tRex.update(100, Trex.status.CRASHED), !this.gameOverPanel) ) { const t IS_HIDPI ? Runner.spriteDefinitionByType.original.HDPI : Runner.spriteDefinitionByType.original.LDPI; this.canvas && (Runner.isAltGameModeEnabled ? (this.gameOverPanel new GameOverPanel( this.canvas, t.TEXT_SPRITE, t.RESTART, this.dimensions, t.ALT_GAME_END, this.altGameModeActive )) : (this.gameOverPanel new GameOverPanel( this.canvas, t.TEXT_SPRITE, t.RESTART, this.dimensions ))); } this.gameOverPanel.draw(this.altGameModeActive, this.tRex), this.distanceRan > this.highestScore && this.saveHighScore(this.distanceRan), (this.time getTimeStamp()), Runner.audioCues && (this.generatedSoundFx.stopAll(), announcePhrase( getA11yString(A11Y_STRINGS.gameOver).replace( $1, this.distanceMeter .getActualDistance(this.distanceRan) .toString() ) + + getA11yString(A11Y_STRINGS.highScore).replace( $1, this.distanceMeter .getActualDistance(this.highestScore) .toString() ) ), this.containerEl.setAttribute( title, getA11yString(A11Y_STRINGS.ariaLabel) )), this.showSpeedToggle(), this.disableSpeedToggle(!1); }, stop() { this.setPlayStatus(!1), (this.paused !0), cancelAnimationFrame(this.raqId), (this.raqId 0), this.generatedSoundFx.stopAll(); }, play() { this.crashed || (this.setPlayStatus(!0), (this.paused !1), this.tRex.update(0, Trex.status.RUNNING), (this.time getTimeStamp()), this.update(), this.generatedSoundFx.background()); }, restart() { this.raqId || (this.playCount++, (this.runningTime 0), this.setPlayStatus(!0), this.toggleSpeed(), (this.paused !1), (this.crashed !1), (this.distanceRan 0), this.setSpeed(this.config.SPEED), (this.time getTimeStamp()), this.containerEl.classList.remove(Runner.classes.CRASHED), this.clearCanvas(), this.distanceMeter.reset(), this.horizon.reset(), this.tRex.reset(), this.playSound(this.soundFx.BUTTON_PRESS), this.invert(!0), (this.flashTimer null), this.update(), this.gameOverPanel.reset(), this.generatedSoundFx.background(), this.containerEl.setAttribute( title, getA11yString(A11Y_STRINGS.jump) ), announcePhrase(getA11yString(A11Y_STRINGS.started))); }, setPlayStatus(t) { this.touchController && this.touchController.classList.toggle(HIDDEN_CLASS, !t), (this.playing t); }, isArcadeMode: () > IS_RTL ? 1 document.title.indexOf(ARCADE_MODE_URL) : document.title ARCADE_MODE_URL, setArcadeMode() { document.body.classList.add(Runner.classes.ARCADE_MODE), this.setArcadeModeContainerScale(); }, setArcadeModeContainerScale() { const t window.innerHeight, e t / this.dimensions.HEIGHT, i window.innerWidth / this.dimensions.WIDTH, s Math.max(1, Math.min(e, i)), n this.dimensions.HEIGHT * s, a Math.ceil( Math.max( 0, (t - n - Runner.config.ARCADE_MODE_INITIAL_TOP_POSITION) * Runner.config.ARCADE_MODE_TOP_POSITION_PERCENT ) ) * window.devicePixelRatio, o IS_RTL ? -s + , + s : s; this.containerEl.style.transform scale( + o + ) translateY( + a + px); }, onVisibilityChange(t) { document.hidden || document.webkitHidden || blur t.type || visible ! document.visibilityState ? this.stop() : this.crashed || (this.tRex.reset(), this.play()); }, playSound(t) { if (t) { const e this.audioContext.createBufferSource(); (e.buffer t), e.connect(this.audioContext.destination), e.start(0); } }, invert(t) { const e document.firstElementChild; t ? (e.classList.toggle(Runner.classes.INVERTED, !1), (this.invertTimer 0), (this.inverted !1)) : (this.inverted e.classList.toggle( Runner.classes.INVERTED, this.invertTrigger )); }, }), (Runner.updateCanvasScaling function (t, e, i) { const s t.getContext(2d), n Math.floor(window.devicePixelRatio) || 1, a Math.floor(s.webkitBackingStorePixelRatio) || 1, o n / a; if (n ! a) { const n e || t.width, a i || t.height; return ( (t.width n * o), (t.height a * o), (t.style.width n + px), (t.style.height a + px), s.scale(o, o), !0 ); } return ( 1 n && ((t.style.width t.width + px), (t.style.height t.height + px)), !1 ); }), (Runner.isAltGameModeEnabled function () { return loadTimeData && loadTimeData.valueExists(enableAltGameMode); }), (GeneratedSoundFx.prototype { init() { (this.audioCues !0), this.context || ((this.context window.webkitAudioContext ? new webkitAudioContext() : new AudioContext()), IS_IOS && ((this.context.onstatechange function () { running ! this.context.state && this.context.resume(); }.bind(this)), this.context.resume()), (this.panner this.context.createStereoPanner ? this.context.createStereoPanner() : null)); }, stopAll() { this.cancelFootSteps(); }, playNote(t, e, i, s, n) { const a this.context.createOscillator(), o this.context.createOscillator(), h this.context.createGain(); (a.type triangle), (o.type triangle), (h.gain.value 0.1), this.panner ? ((this.panner.pan.value n || 0), a.connect(h).connect(this.panner), o.connect(h).connect(this.panner), this.panner.connect(this.context.destination)) : (a.connect(h), o.connect(h), h.connect(this.context.destination)), (a.frequency.value t + 1), (o.frequency.value t - 2), h.gain.setValueAtTime(s || 0.01, e + i - 0.05), h.gain.linearRampToValueAtTime(1e-5, e + i), a.start(e), o.start(e), a.stop(e + i), o.stop(e + i); }, background() { if (this.audioCues) { const t this.context.currentTime; this.playNote(493.883, t, 0.116), this.playNote(659.255, t + 0.116, 0.232), this.loopFootSteps(); } }, loopFootSteps() { this.audioCues && !this.bgSoundIntervalId && (this.bgSoundIntervalId setInterval( function () { this.playNote(73.42, this.context.currentTime, 0.05, 0.16), this.playNote( 69.3, this.context.currentTime + 0.116, 0.116, 0.16 ); }.bind(this), 280 )); }, cancelFootSteps() { this.audioCues && this.bgSoundIntervalId && (clearInterval(this.bgSoundIntervalId), (this.bgSoundIntervalId null), this.playNote(103.83, this.context.currentTime, 0.232, 0.02), this.playNote( 116.54, this.context.currentTime + 0.116, 0.232, 0.02 )); }, collect() { if (this.audioCues) { this.cancelFootSteps(); const t this.context.currentTime; this.playNote(830.61, t, 0.116), this.playNote(1318.51, t + 0.116, 0.232); } }, jump() { if (this.audioCues) { const t this.context.currentTime; this.playNote(659.25, t, 0.116, 0.3, -0.6), this.playNote(880, t + 0.116, 0.232, 0.3, -0.6); } }, }), (GameOverPanel.RESTART_ANIM_DURATION 875), (GameOverPanel.LOGO_PAUSE_DURATION 875), (GameOverPanel.FLASH_ITERATIONS 5), (GameOverPanel.animConfig { frames: 0, 36, 72, 108, 144, 180, 216, 252, msPerFrame: GameOverPanel.RESTART_ANIM_DURATION / 8, }), (GameOverPanel.dimensions { TEXT_X: 0, TEXT_Y: 13, TEXT_WIDTH: 191, TEXT_HEIGHT: 11, RESTART_WIDTH: 36, RESTART_HEIGHT: 32, }), (GameOverPanel.prototype { updateDimensions(t, e) { (this.canvasDimensions.WIDTH t), e && (this.canvasDimensions.HEIGHT e), (this.currentFrame GameOverPanel.animConfig.frames.length - 1); }, drawGameOverText(t, e) { const i this.canvasDimensions.WIDTH / 2; let s t.TEXT_X, n t.TEXT_Y, a t.TEXT_WIDTH, o t.TEXT_HEIGHT; const h Math.round(i - t.TEXT_WIDTH / 2), r Math.round((this.canvasDimensions.HEIGHT - 25) / 3), c t.TEXT_WIDTH, l t.TEXT_HEIGHT; IS_HIDPI && ((n * 2), (s * 2), (a * 2), (o * 2)), e || ((s + this.textImgPos.x), (n + this.textImgPos.y)); const d e ? Runner.altCommonImageSprite : Runner.origImageSprite; this.canvasCtx.save(), IS_RTL && (this.canvasCtx.translate(this.canvasDimensions.WIDTH, 0), this.canvasCtx.scale(-1, 1)), this.canvasCtx.drawImage(d, s, n, a, o, h, r, c, l), this.canvasCtx.restore(); }, drawAltGameElements(t) { if ( this.altGameModeActive && Runner.spriteDefinition.ALT_GAME_END_CONFIG ) { const e Runner.spriteDefinition.ALT_GAME_END_CONFIG; let i e.WIDTH, s e.HEIGHT; const n t.xPos + e.X_OFFSET, a t.yPos + e.Y_OFFSET; IS_HIDPI && ((i * 2), (s * 2)), this.canvasCtx.drawImage( Runner.altCommonImageSprite, this.altGameEndImgPos.x, this.altGameEndImgPos.y, i, s, n, a, e.WIDTH, e.HEIGHT ); } }, drawRestartButton() { const t GameOverPanel.dimensions; let e GameOverPanel.animConfig.framesthis.currentFrame, i t.RESTART_WIDTH, s t.RESTART_HEIGHT; const n this.canvasDimensions.WIDTH / 2 - t.RESTART_WIDTH / 2, a this.canvasDimensions.HEIGHT / 2; IS_HIDPI && ((i * 2), (s * 2), (e * 2)), this.canvasCtx.save(), IS_RTL && (this.canvasCtx.translate(this.canvasDimensions.WIDTH, 0), this.canvasCtx.scale(-1, 1)), this.canvasCtx.drawImage( Runner.origImageSprite, this.restartImgPos.x + e, this.restartImgPos.y, i, s, n, a, t.RESTART_WIDTH, t.RESTART_HEIGHT ), this.canvasCtx.restore(); }, draw(t, e) { t && (this.altGameModeActive t), this.drawGameOverText(GameOverPanel.dimensions, !1), this.drawRestartButton(), this.drawAltGameElements(e), this.update(); }, update() { const t getTimeStamp(), e t - (this.frameTimeStamp || t); if ( ((this.frameTimeStamp t), (this.animTimer + e), (this.flashTimer + e), 0 this.currentFrame && this.animTimer > GameOverPanel.LOGO_PAUSE_DURATION) ) (this.animTimer 0), this.currentFrame++, this.drawRestartButton(); else if ( this.currentFrame > 0 && this.currentFrame GameOverPanel.animConfig.frames.length ) this.animTimer > GameOverPanel.animConfig.msPerFrame && (this.currentFrame++, this.drawRestartButton()); else if ( !this.altGameModeActive && this.currentFrame GameOverPanel.animConfig.frames.length ) return void this.reset(); if ( this.altGameModeActive && Runner.spriteDefinitionByType.original.ALT_GAME_OVER_TEXT_CONFIG ) { const t Runner.spriteDefinitionByType.original .ALT_GAME_OVER_TEXT_CONFIG; if ( this.flashCounter GameOverPanel.FLASH_ITERATIONS && this.flashTimer > t.FLASH_DURATION ) (this.flashTimer 0), (this.originalText !this.originalText), this.clearGameOverTextBounds(), this.originalText ? (this.drawGameOverText(GameOverPanel.dimensions, !1), this.flashCounter++) : this.drawGameOverText(t, !0); else if (this.flashCounter > GameOverPanel.FLASH_ITERATIONS) return void this.reset(); } this.gameOverRafId requestAnimationFrame(this.update.bind(this)); }, clearGameOverTextBounds() { this.canvasCtx.save(), this.canvasCtx.clearRect( Math.round( this.canvasDimensions.WIDTH / 2 - GameOverPanel.dimensions.TEXT_WIDTH / 2 ), Math.round((this.canvasDimensions.HEIGHT - 25) / 3), GameOverPanel.dimensions.TEXT_WIDTH, GameOverPanel.dimensions.TEXT_HEIGHT + 4 ), this.canvasCtx.restore(); }, reset() { this.gameOverRafId && (cancelAnimationFrame(this.gameOverRafId), (this.gameOverRafId null)), (this.animTimer 0), (this.frameTimeStamp 0), (this.currentFrame 0), (this.flashTimer 0), (this.flashCounter 0), (this.originalText !0); }, }), (Obstacle.MAX_GAP_COEFFICIENT 1.5), (Obstacle.MAX_OBSTACLE_LENGTH 3), (Obstacle.prototype { init(t) { if ( (this.cloneCollisionBoxes(), this.size > 1 && this.typeConfig.multipleSpeed > t && (this.size 1), (this.width this.typeConfig.width * this.size), Array.isArray(this.typeConfig.yPos)) ) { const t IS_MOBILE ? this.typeConfig.yPosMobile : this.typeConfig.yPos; this.yPos tgetRandomNum(0, t.length - 1); } else this.yPos this.typeConfig.yPos; this.draw(), this.size > 1 && ((this.collisionBoxes1.width this.width - this.collisionBoxes0.width - this.collisionBoxes2.width), (this.collisionBoxes2.x this.width - this.collisionBoxes2.width)), this.typeConfig.speedOffset && (this.speedOffset Math.random() > 0.5 ? this.typeConfig.speedOffset : -this.typeConfig.speedOffset), (this.gap this.getGap(this.gapCoefficient, t)), Runner.audioCues && (this.gap * 2); }, draw() { let t this.typeConfig.width, e this.typeConfig.height; IS_HIDPI && ((t * 2), (e * 2)); let i t * this.size * (0.5 * (this.size - 1)) + this.spritePos.x; this.currentFrame > 0 && (i + t * this.currentFrame), this.canvasCtx.drawImage( this.imageSprite, i, this.spritePos.y, t * this.size, e, this.xPos, this.yPos, this.typeConfig.width * this.size, this.typeConfig.height ); }, update(t, e) { this.remove || (this.typeConfig.speedOffset && (e + this.speedOffset), (this.xPos - Math.floor(((e * FPS) / 1e3) * t)), this.typeConfig.numFrames && ((this.timer + t), this.timer > this.typeConfig.frameRate && ((this.currentFrame this.currentFrame this.typeConfig.numFrames - 1 ? 0 : this.currentFrame + 1), (this.timer 0))), this.draw(), this.isVisible() || (this.remove !0)); }, getGap(t, e) { const i Math.round(this.width * e + this.typeConfig.minGap * t); return getRandomNum( i, Math.round(i * Obstacle.MAX_GAP_COEFFICIENT) ); }, isVisible() { return this.xPos + this.width > 0; }, cloneCollisionBoxes() { const t this.typeConfig.collisionBoxes; for (let e t.length - 1; e > 0; e--) this.collisionBoxese new CollisionBox( te.x, te.y, te.width, te.height ); }, }), (Trex.config { DROP_VELOCITY: -5, FLASH_OFF: 175, FLASH_ON: 100, HEIGHT: 47, HEIGHT_DUCK: 25, INTRO_DURATION: 1500, SPEED_DROP_COEFFICIENT: 3, SPRITE_WIDTH: 262, START_X_POS: 50, WIDTH: 44, WIDTH_DUCK: 59, }), (Trex.slowJumpConfig { GRAVITY: 0.25, MAX_JUMP_HEIGHT: 50, MIN_JUMP_HEIGHT: 45, INITIAL_JUMP_VELOCITY: -20, }), (Trex.normalJumpConfig { GRAVITY: 0.6, MAX_JUMP_HEIGHT: 30, MIN_JUMP_HEIGHT: 30, INITIAL_JUMP_VELOCITY: -10, }), (Trex.collisionBoxes { DUCKING: new CollisionBox(1, 18, 55, 25), RUNNING: new CollisionBox(22, 0, 17, 16), new CollisionBox(1, 18, 30, 9), new CollisionBox(10, 35, 14, 8), new CollisionBox(1, 24, 29, 5), new CollisionBox(5, 30, 21, 4), new CollisionBox(9, 34, 15, 4), , }), (Trex.status { CRASHED: CRASHED, DUCKING: DUCKING, JUMPING: JUMPING, RUNNING: RUNNING, WAITING: WAITING, }), (Trex.BLINK_TIMING 7e3), (Trex.animFrames { WAITING: { frames: 44, 0, msPerFrame: 1e3 / 3 }, RUNNING: { frames: 88, 132, msPerFrame: 1e3 / 12 }, CRASHED: { frames: 220, msPerFrame: 1e3 / 60 }, JUMPING: { frames: 0, msPerFrame: 1e3 / 60 }, DUCKING: { frames: 264, 323, msPerFrame: 125 }, }), (Trex.prototype { init() { (this.groundYPos Runner.defaultDimensions.HEIGHT - this.config.HEIGHT - Runner.config.BOTTOM_PAD), (this.yPos this.groundYPos), (this.minJumpHeight this.groundYPos - this.config.MIN_JUMP_HEIGHT), this.draw(0, 0), this.update(0, Trex.status.WAITING); }, enableSlowConfig: function () { const t Runner.slowDown ? Trex.slowJumpConfig : Trex.normalJumpConfig; (Trex.config Object.assign(Trex.config, t)), this.adjustAltGameConfigForSlowSpeed(); }, enableAltGameMode: function (t) { (this.altGameModeEnabled !0), (this.spritePos t); const e Runner.spriteDefinition.TREX; (Trex.animFrames.RUNNING.frames e.RUNNING_1.x, e.RUNNING_2.x), (Trex.animFrames.CRASHED.frames e.CRASHED.x), object typeof e.JUMPING.x ? (Trex.animFrames.JUMPING.frames e.JUMPING.x) : (Trex.animFrames.JUMPING.frames e.JUMPING.x), (Trex.animFrames.DUCKING.frames e.RUNNING_1.x, e.RUNNING_2.x), (Trex.config.GRAVITY e.GRAVITY || Trex.config.GRAVITY), (Trex.config.HEIGHT e.RUNNING_1.h), (Trex.config.INITIAL_JUMP_VELOCITY e.INITIAL_JUMP_VELOCITY), (Trex.config.MAX_JUMP_HEIGHT e.MAX_JUMP_HEIGHT), (Trex.config.MIN_JUMP_HEIGHT e.MIN_JUMP_HEIGHT), (Trex.config.WIDTH e.RUNNING_1.w), (Trex.config.WIDTH_JUMP e.JUMPING.w), (Trex.config.INVERT_JUMP e.INVERT_JUMP), this.adjustAltGameConfigForSlowSpeed(e.GRAVITY), (this.config Trex.config), (this.groundYPos Runner.defaultDimensions.HEIGHT - this.config.HEIGHT - Runner.spriteDefinition.BOTTOM_PAD), (this.yPos this.groundYPos), this.reset(); }, adjustAltGameConfigForSlowSpeed: function (t) { Runner.slowDown && (t && (Trex.config.GRAVITY t / 1.5), (Trex.config.MIN_JUMP_HEIGHT * 1.5), (Trex.config.MAX_JUMP_HEIGHT * 1.5), (Trex.config.INITIAL_JUMP_VELOCITY 1.5 * Trex.config.INITIAL_JUMP_VELOCITY)); }, setFlashing: function (t) { this.flashing t; }, setJumpVelocity(t) { (this.config.INITIAL_JUMP_VELOCITY -t), (this.config.DROP_VELOCITY -t / 2); }, update(t, e) { (this.timer + t), e && ((this.status e), (this.currentFrame 0), (this.msPerFrame Trex.animFramese.msPerFrame), (this.currentAnimFrames Trex.animFramese.frames), e Trex.status.WAITING && ((this.animStartTime getTimeStamp()), this.setBlinkDelay())), this.playingIntro && this.xPos this.config.START_X_POS && ((this.xPos + Math.round( (this.config.START_X_POS / this.config.INTRO_DURATION) * t )), (this.xInitialPos this.xPos)), this.status Trex.status.WAITING ? this.blink(getTimeStamp()) : this.draw(this.currentAnimFramesthis.currentFrame, 0), !this.flashing && this.timer > this.msPerFrame && ((this.currentFrame this.currentFrame this.currentAnimFrames.length - 1 ? 0 : this.currentFrame + 1), (this.timer 0)), this.altGameModeEnabled || (this.speedDrop && this.yPos this.groundYPos && ((this.speedDrop !1), this.setDuck(!0))); }, draw(t, e) { let i t, s e, n this.ducking && this.status ! Trex.status.CRASHED ? this.config.WIDTH_DUCK : this.config.WIDTH, a this.config.HEIGHT; const o a; let h Runner.spriteDefinition.TREX.JUMPING.xOffset; this.altGameModeEnabled && this.jumping && this.status ! Trex.status.CRASHED && (n this.config.WIDTH_JUMP), IS_HIDPI && ((i * 2), (s * 2), (n * 2), (a * 2), (h * 2)), (i + this.spritePos.x), (s + this.spritePos.y), this.flashing && (this.timer this.config.FLASH_ON ? (this.canvasCtx.globalAlpha 0.5) : this.timer > this.config.FLASH_OFF && (this.timer 0)), !this.altGameModeEnabled && this.ducking && this.status ! Trex.status.CRASHED ? this.canvasCtx.drawImage( Runner.imageSprite, i, s, n, a, this.xPos, this.yPos, this.config.WIDTH_DUCK, o ) : this.altGameModeEnabled && this.jumping && this.status ! Trex.status.CRASHED ? this.canvasCtx.drawImage( Runner.imageSprite, i, s, n, a, this.xPos - h, this.yPos, this.config.WIDTH_JUMP, o ) : (this.ducking && this.status Trex.status.CRASHED && this.xPos++, this.canvasCtx.drawImage( Runner.imageSprite, i, s, n, a, this.xPos, this.yPos, this.config.WIDTH, o )), (this.canvasCtx.globalAlpha 1); }, setBlinkDelay() { this.blinkDelay Math.ceil(Math.random() * Trex.BLINK_TIMING); }, blink(t) { t - this.animStartTime > this.blinkDelay && (this.draw(this.currentAnimFramesthis.currentFrame, 0), 1 this.currentFrame && (this.setBlinkDelay(), (this.animStartTime t), this.blinkCount++)); }, startJump(t) { this.jumping || (this.update(0, Trex.status.JUMPING), (this.jumpVelocity this.config.INITIAL_JUMP_VELOCITY - t / 10), (this.jumping !0), (this.reachedMinHeight !1), (this.speedDrop !1), this.config.INVERT_JUMP && (this.minJumpHeight this.groundYPos + this.config.MIN_JUMP_HEIGHT)); }, endJump() { this.reachedMinHeight && this.jumpVelocity this.config.DROP_VELOCITY && (this.jumpVelocity this.config.DROP_VELOCITY); }, updateJump(t) { const e t / Trex.animFramesthis.status.msPerFrame; this.speedDrop ? (this.yPos + Math.round( this.jumpVelocity * this.config.SPEED_DROP_COEFFICIENT * e )) : this.config.INVERT_JUMP ? (this.yPos - Math.round(this.jumpVelocity * e)) : (this.yPos + Math.round(this.jumpVelocity * e)), (this.jumpVelocity + this.config.GRAVITY * e), ((this.config.INVERT_JUMP && this.yPos > this.minJumpHeight) || (!this.config.INVERT_JUMP && this.yPos this.minJumpHeight) || this.speedDrop) && (this.reachedMinHeight !0), ((this.config.INVERT_JUMP && this.yPos > -this.config.MAX_JUMP_HEIGHT) || (!this.config.INVERT_JUMP && this.yPos this.config.MAX_JUMP_HEIGHT) || this.speedDrop) && this.endJump(), ((this.config.INVERT_JUMP && this.yPos) this.groundYPos || (!this.config.INVERT_JUMP && this.yPos) > this.groundYPos) && (this.reset(), this.jumpCount++, Runner.audioCues && Runner.generatedSoundFx.loopFootSteps()); }, setSpeedDrop() { (this.speedDrop !0), (this.jumpVelocity 1); }, setDuck(t) { t && this.status ! Trex.status.DUCKING ? (this.update(0, Trex.status.DUCKING), (this.ducking !0)) : this.status Trex.status.DUCKING && (this.update(0, Trex.status.RUNNING), (this.ducking !1)); }, reset() { (this.xPos this.xInitialPos), (this.yPos this.groundYPos), (this.jumpVelocity 0), (this.jumping !1), (this.ducking !1), this.update(0, Trex.status.RUNNING), (this.midair !1), (this.speedDrop !1), (this.jumpCount 0); }, }), (DistanceMeter.dimensions { WIDTH: 10, HEIGHT: 13, DEST_WIDTH: 11 }), (DistanceMeter.yPos 0, 13, 27, 40, 53, 67, 80, 93, 107, 120), (DistanceMeter.config { MAX_DISTANCE_UNITS: 5, ACHIEVEMENT_DISTANCE: 100, COEFFICIENT: 0.025, FLASH_DURATION: 250, FLASH_ITERATIONS: 3, HIGH_SCORE_HIT_AREA_PADDING: 4, }), (DistanceMeter.prototype { init(t) { let e ; this.calcXPos(t), (this.maxScore this.maxScoreUnits); for (let t 0; t this.maxScoreUnits; t++) this.draw(t, 0), (this.defaultString + 0), (e + 9); this.maxScore parseInt(e, 10); }, calcXPos(t) { this.x t - DistanceMeter.dimensions.DEST_WIDTH * (this.maxScoreUnits + 1); }, draw(t, e, i) { let s DistanceMeter.dimensions.WIDTH, n DistanceMeter.dimensions.HEIGHT, a DistanceMeter.dimensions.WIDTH * e, o 0; const h t * DistanceMeter.dimensions.DEST_WIDTH, r this.y, c DistanceMeter.dimensions.WIDTH, l DistanceMeter.dimensions.HEIGHT; if ( (IS_HIDPI && ((s * 2), (n * 2), (a * 2)), (a + this.spritePos.x), (o + this.spritePos.y), this.canvasCtx.save(), IS_RTL) ) i ? this.canvasCtx.translate( this.canvasWidth - DistanceMeter.dimensions.WIDTH * (this.maxScoreUnits + 3), this.y ) : this.canvasCtx.translate( this.canvasWidth - DistanceMeter.dimensions.WIDTH, this.y ), this.canvasCtx.scale(-1, 1); else { const t this.x - 2 * this.maxScoreUnits * DistanceMeter.dimensions.WIDTH; i ? this.canvasCtx.translate(t, this.y) : this.canvasCtx.translate(this.x, this.y); } this.canvasCtx.drawImage(this.image, a, o, s, n, h, r, c, l), this.canvasCtx.restore(); }, getActualDistance(t) { return t ? Math.round(t * this.config.COEFFICIENT) : 0; }, update(t, e) { let i !0, s !1; if (this.achievement) this.flashIterations this.config.FLASH_ITERATIONS ? ((this.flashTimer + t), this.flashTimer this.config.FLASH_DURATION ? (i !1) : this.flashTimer > 2 * this.config.FLASH_DURATION && ((this.flashTimer 0), this.flashIterations++)) : ((this.achievement !1), (this.flashIterations 0), (this.flashTimer 0)); else if ( ((e this.getActualDistance(e)) > this.maxScore && this.maxScoreUnits this.config.MAX_DISTANCE_UNITS ? (this.maxScoreUnits++, (this.maxScore parseInt(this.maxScore + 9, 10))) : (this.distance 0), e > 0) ) { e % this.config.ACHIEVEMENT_DISTANCE 0 && ((this.achievement !0), (this.flashTimer 0), (s !0)); const t (this.defaultString + e).substr(-this.maxScoreUnits); this.digits t.split(); } else this.digits this.defaultString.split(); if (i) for (let t this.digits.length - 1; t > 0; t--) this.draw(t, parseInt(this.digitst, 10)); return this.drawHighScore(), s; }, drawHighScore() { if (parseInt(this.highScore, 10) > 0) { this.canvasCtx.save(), (this.canvasCtx.globalAlpha 0.8); for (let t this.highScore.length - 1; t > 0; t--) this.draw(t, parseInt(this.highScoret, 10), !0); this.canvasCtx.restore(); } }, setHighScore(t) { t this.getActualDistance(t); const e (this.defaultString + t).substr(-this.maxScoreUnits); this.highScore 10, 11, .concat(e.split()); }, hasClickedOnHighScore(t) { let e 0, i 0; if (t.touches) { const s this.canvas.getBoundingClientRect(); (e t.touches0.clientX - s.left), (i t.touches0.clientY - s.top); } else (e t.offsetX), (i t.offsetY); return ( (this.highScoreBounds this.getHighScoreBounds()), e > this.highScoreBounds.x && e this.highScoreBounds.x + this.highScoreBounds.width && i > this.highScoreBounds.y && i this.highScoreBounds.y + this.highScoreBounds.height ); }, getHighScoreBounds() { return { x: this.x - 2 * this.maxScoreUnits * DistanceMeter.dimensions.WIDTH - DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING, y: this.y, width: DistanceMeter.dimensions.WIDTH * (this.highScore.length + 1) + DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING, height: DistanceMeter.dimensions.HEIGHT + 2 * DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING, }; }, flashHighScore() { const t getTimeStamp(), e t - (this.frameTimeStamp || t); let i !0; (this.frameTimeStamp t), this.flashIterations > 2 * this.config.FLASH_ITERATIONS ? this.cancelHighScoreFlashing() : ((this.flashTimer + e), this.flashTimer this.config.FLASH_DURATION ? (i !1) : this.flashTimer > 2 * this.config.FLASH_DURATION && ((this.flashTimer 0), this.flashIterations++), i ? this.drawHighScore() : this.clearHighScoreBounds(), (this.flashingRafId requestAnimationFrame( this.flashHighScore.bind(this) ))); }, clearHighScoreBounds() { this.canvasCtx.save(), (this.canvasCtx.fillStyle #fff), this.canvasCtx.rect( this.highScoreBounds.x, this.highScoreBounds.y, this.highScoreBounds.width, this.highScoreBounds.height ), this.canvasCtx.fill(), this.canvasCtx.restore(); }, startHighScoreFlashing() { (this.highScoreFlashing !0), this.flashHighScore(); }, isHighScoreFlashing() { return this.highScoreFlashing; }, cancelHighScoreFlashing() { this.flashingRafId && cancelAnimationFrame(this.flashingRafId), (this.flashIterations 0), (this.flashTimer 0), (this.highScoreFlashing !1), this.clearHighScoreBounds(), this.drawHighScore(); }, resetHighScore() { this.setHighScore(0), this.cancelHighScoreFlashing(); }, reset() { this.update(0, 0), (this.achievement !1); }, }), (Cloud.config { HEIGHT: 14, MAX_CLOUD_GAP: 400, MAX_SKY_LEVEL: 30, MIN_CLOUD_GAP: 100, MIN_SKY_LEVEL: 71, WIDTH: 46, }), (Cloud.prototype { init() { (this.yPos getRandomNum( Cloud.config.MAX_SKY_LEVEL, Cloud.config.MIN_SKY_LEVEL )), this.draw(); }, draw() { this.canvasCtx.save(); let t Cloud.config.WIDTH, e Cloud.config.HEIGHT; const i t, s e; IS_HIDPI && ((t * 2), (e * 2)), this.canvasCtx.drawImage( Runner.imageSprite, this.spritePos.x, this.spritePos.y, t, e, this.xPos, this.yPos, i, s ), this.canvasCtx.restore(); }, update(t) { this.remove || ((this.xPos - Math.ceil(t)), this.draw(), this.isVisible() || (this.remove !0)); }, isVisible() { return this.xPos + Cloud.config.WIDTH > 0; }, }), (BackgroundEl.config { MAX_BG_ELS: 0, MAX_GAP: 0, MIN_GAP: 0, POS: 0, SPEED: 0, Y_POS: 0, MS_PER_FRAME: 0, }), (BackgroundEl.prototype { init() { (this.spriteConfig Runner.spriteDefinition.BACKGROUND_ELthis.type), this.spriteConfig.FIXED && (this.xPos this.spriteConfig.FIXED_X_POS), (this.yPos BackgroundEl.config.Y_POS - this.spriteConfig.HEIGHT + this.spriteConfig.OFFSET), this.draw(); }, draw() { this.canvasCtx.save(); let t this.spriteConfig.WIDTH, e this.spriteConfig.HEIGHT, i this.spriteConfig.X_POS; const s t, n e; IS_HIDPI && ((t * 2), (e * 2), (i * 2)), this.canvasCtx.drawImage( Runner.imageSprite, i, this.spritePos.y, t, e, this.xPos, this.yPos, s, n ), this.canvasCtx.restore(); }, update(t) { this.remove || (this.spriteConfig.FIXED ? ((this.animTimer + t), this.animTimer > BackgroundEl.config.MS_PER_FRAME && ((this.animTimer 0), (this.switchFrames !this.switchFrames)), this.spriteConfig.FIXED_Y_POS_1 && this.spriteConfig.FIXED_Y_POS_2 && (this.yPos this.switchFrames ? this.spriteConfig.FIXED_Y_POS_1 : this.spriteConfig.FIXED_Y_POS_2)) : (this.xPos - BackgroundEl.config.SPEED), this.draw(), this.isVisible() || (this.remove !0)); }, isVisible() { return this.xPos + this.spriteConfig.WIDTH > 0; }, }), (NightMode.config { FADE_SPEED: 0.035, HEIGHT: 40, MOON_SPEED: 0.25, NUM_STARS: 2, STAR_SIZE: 9, STAR_SPEED: 0.3, STAR_MAX_Y: 70, WIDTH: 20, }), (NightMode.phases 140, 120, 100, 60, 40, 20, 0), (NightMode.prototype { update(t) { if ( (t && 0 this.opacity && (this.currentPhase++, this.currentPhase > NightMode.phases.length && (this.currentPhase 0)), t && (this.opacity 1 || 0 this.opacity) ? (this.opacity + NightMode.config.FADE_SPEED) : this.opacity > 0 && (this.opacity - NightMode.config.FADE_SPEED), this.opacity > 0) ) { if ( ((this.xPos this.updateXPos( this.xPos, NightMode.config.MOON_SPEED )), this.drawStars) ) for (let t 0; t NightMode.config.NUM_STARS; t++) this.starst.x this.updateXPos( this.starst.x, NightMode.config.STAR_SPEED ); this.draw(); } else (this.opacity 0), this.placeStars(); this.drawStars !0; }, updateXPos(t, e) { return ( t -NightMode.config.WIDTH ? (t this.containerWidth) : (t - e), t ); }, draw() { let t 3 this.currentPhase ? 2 * NightMode.config.WIDTH : NightMode.config.WIDTH, e NightMode.config.HEIGHT, i this.spritePos.x + NightMode.phasesthis.currentPhase; const s t; let n NightMode.config.STAR_SIZE, a Runner.spriteDefinitionByType.original.LDPI.STAR.x; if ( (IS_HIDPI && ((t * 2), (e * 2), (i this.spritePos.x + 2 * NightMode.phasesthis.currentPhase), (n * 2), (a Runner.spriteDefinitionByType.original.HDPI.STAR.x)), this.canvasCtx.save(), (this.canvasCtx.globalAlpha this.opacity), this.drawStars) ) for (let t 0; t NightMode.config.NUM_STARS; t++) this.canvasCtx.drawImage( Runner.origImageSprite, a, this.starst.sourceY, n, n, Math.round(this.starst.x), this.starst.y, NightMode.config.STAR_SIZE, NightMode.config.STAR_SIZE ); this.canvasCtx.drawImage( Runner.origImageSprite, i, this.spritePos.y, t, e, Math.round(this.xPos), this.yPos, s, NightMode.config.HEIGHT ), (this.canvasCtx.globalAlpha 1), this.canvasCtx.restore(); }, placeStars() { const t Math.round( this.containerWidth / NightMode.config.NUM_STARS ); for (let e 0; e NightMode.config.NUM_STARS; e++) (this.starse {}), (this.starse.x getRandomNum(t * e, t * (e + 1))), (this.starse.y getRandomNum( 0, NightMode.config.STAR_MAX_Y )), (this.starse.sourceY IS_HIDPI ? Runner.spriteDefinitionByType.original.HDPI.STAR.y + 2 * NightMode.config.STAR_SIZE * e : Runner.spriteDefinitionByType.original.LDPI.STAR.y + NightMode.config.STAR_SIZE * e); }, reset() { (this.currentPhase 0), (this.opacity 0), this.update(!1); }, }), (HorizonLine.dimensions { WIDTH: 600, HEIGHT: 12, YPOS: 127 }), (HorizonLine.prototype { setSourceDimensions(t) { for (const e in t) SOURCE_X ! e && SOURCE_Y ! e && (IS_HIDPI ? YPOS ! e && (this.sourceDimensionse 2 * te) : (this.sourceDimensionse te), (this.dimensionse te)); (this.xPos 0, t.WIDTH), (this.yPos t.YPOS); }, getRandomType() { return Math.random() > this.bumpThreshold ? this.dimensions.WIDTH : 0; }, draw() { this.canvasCtx.drawImage( Runner.imageSprite, this.sourceXPos0, this.spritePos.y, this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT, this.xPos0, this.yPos, this.dimensions.WIDTH, this.dimensions.HEIGHT ), this.canvasCtx.drawImage( Runner.imageSprite, this.sourceXPos1, this.spritePos.y, this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT, this.xPos1, this.yPos, this.dimensions.WIDTH, this.dimensions.HEIGHT ); }, updateXPos(t, e) { const i t, s 0 t ? 1 : 0; (this.xPosi - e), (this.xPoss this.xPosi + this.dimensions.WIDTH), this.xPosi -this.dimensions.WIDTH && ((this.xPosi + 2 * this.dimensions.WIDTH), (this.xPoss this.xPosi - this.dimensions.WIDTH), (this.sourceXPosi this.getRandomType() + this.spritePos.x)); }, update(t, e) { const i Math.floor(e * (FPS / 1e3) * t); this.xPos0 0 ? this.updateXPos(0, i) : this.updateXPos(1, i), this.draw(); }, reset() { (this.xPos0 0), (this.xPos1 this.dimensions.WIDTH); }, }), (Horizon.config { BG_CLOUD_SPEED: 0.2, BUMPY_THRESHOLD: 0.3, CLOUD_FREQUENCY: 0.5, HORIZON_HEIGHT: 16, MAX_CLOUDS: 6, }), (Horizon.prototype { init() { (Obstacle.types Runner.spriteDefinitionByType.original.OBSTACLES), this.addCloud(); for (let t 0; t Runner.spriteDefinition.LINES.length; t++) this.horizonLines.push( new HorizonLine(this.canvas, Runner.spriteDefinition.LINESt) ); this.nightMode new NightMode( this.canvas, this.spritePos.MOON, this.dimensions.WIDTH ); }, adjustObstacleSpeed: function () { for (let t 0; t Obstacle.types.length; t++) Runner.slowDown && ((Obstacle.typest.multipleSpeed Obstacle.typest.multipleSpeed / 2), (Obstacle.typest.minGap * 1.5), (Obstacle.typest.minSpeed Obstacle.typest.minSpeed / 2), object typeof Obstacle.typest.yPos && ((Obstacle.typest.yPos Obstacle.typest.yPos0), (Obstacle.typest.yPosMobile Obstacle.typest.yPos0))); }, enableAltGameMode: function (t) { (this.clouds ), (this.backgroundEls ), (this.altGameModeActive !0), (this.spritePos t), (Obstacle.types Runner.spriteDefinition.OBSTACLES), this.adjustObstacleSpeed(), (Obstacle.MAX_GAP_COEFFICIENT Runner.spriteDefinition.MAX_GAP_COEFFICIENT), (Obstacle.MAX_OBSTACLE_LENGTH Runner.spriteDefinition.MAX_OBSTACLE_LENGTH), (BackgroundEl.config Runner.spriteDefinition.BACKGROUND_EL_CONFIG), (this.horizonLines ); for (let t 0; t Runner.spriteDefinition.LINES.length; t++) this.horizonLines.push( new HorizonLine(this.canvas, Runner.spriteDefinition.LINESt) ); this.reset(); }, update(t, e, i, s) { (this.runningTime + t), this.altGameModeActive && this.updateBackgroundEls(t, e); for (let i 0; i this.horizonLines.length; i++) this.horizonLinesi.update(t, e); (this.altGameModeActive && !Runner.spriteDefinition.HAS_CLOUDS) || (this.nightMode.update(s), this.updateClouds(t, e)), i && this.updateObstacles(t, e); }, updateBackgroundEl(t, e, i, s, n) { const a e.length; if (a) { for (let i a - 1; i > 0; i--) ei.update(t); const o ea - 1; a i && this.dimensions.WIDTH - o.xPos > o.gap && n > Math.random() && s(); } else s(); }, updateClouds(t, e) { const i (this.cloudSpeed / 1e3) * t * e; this.updateBackgroundEl( i, this.clouds, this.config.MAX_CLOUDS, this.addCloud.bind(this), this.cloudFrequency ), (this.clouds this.clouds.filter((t) > !t.remove)); }, updateBackgroundEls(t, e) { this.updateBackgroundEl( t, this.backgroundEls, BackgroundEl.config.MAX_BG_ELS, this.addBackgroundEl.bind(this), this.cloudFrequency ), (this.backgroundEls this.backgroundEls.filter( (t) > !t.remove )); }, updateObstacles(t, e) { const i this.obstacles.slice(0); for (let s 0; s this.obstacles.length; s++) { const n this.obstacless; n.update(t, e), n.remove && i.shift(); } if (((this.obstacles i), this.obstacles.length > 0)) { const t this.obstaclesthis.obstacles.length - 1; t && !t.followingObstacleCreated && t.isVisible() && t.xPos + t.width + t.gap this.dimensions.WIDTH && (this.addNewObstacle(e), (t.followingObstacleCreated !0)); } else this.addNewObstacle(e); }, removeFirstObstacle() { this.obstacles.shift(); }, addNewObstacle(t) { const e (Runner.isAltGameModeEnabled() && !this.altGameModeActive) || this.altGameModeActive ? Obstacle.types.length - 1 : Obstacle.types.length - 2, i e > 0 ? getRandomNum(0, e) : 0, s Obstacle.typesi; if ( (e > 0 && this.duplicateObstacleCheck(s.type)) || t s.minSpeed ) this.addNewObstacle(t); else { const e this.spritePoss.type; this.obstacles.push( new Obstacle( this.canvasCtx, s, e, this.dimensions, this.gapCoefficient, t, s.width, this.altGameModeActive ) ), this.obstacleHistory.unshift(s.type), this.obstacleHistory.length > 1 && this.obstacleHistory.splice( Runner.config.MAX_OBSTACLE_DUPLICATION ); } }, duplicateObstacleCheck(t) { let e 0; for (let i 0; i this.obstacleHistory.length; i++) e this.obstacleHistoryi t ? e + 1 : 0; return e > Runner.config.MAX_OBSTACLE_DUPLICATION; }, reset() { this.obstacles ; for (let t 0; t this.horizonLines.length; t++) this.horizonLinest.reset(); this.nightMode.reset(); }, resize(t, e) { (this.canvas.width t), (this.canvas.height e); }, addCloud() { this.clouds.push( new Cloud( this.canvas, this.spritePos.CLOUD, this.dimensions.WIDTH ) ); }, addBackgroundEl() { const t Object.keys(Runner.spriteDefinition.BACKGROUND_EL); if (t.length > 0) { let e getRandomNum(0, t.length - 1), i te; for (; i this.lastEl && t.length > 1; ) i t(e getRandomNum(0, t.length - 1)); (this.lastEl i), this.backgroundEls.push( new BackgroundEl( this.canvas, this.spritePos.BACKGROUND_EL, this.dimensions.WIDTH, i ) ); } }, }); /script> script> const GAME_TYPE ; let ObstacleType; Runner.spriteDefinitionByType { original: { LDPI: { BACKGROUND_EL: { x: 86, y: 2 }, CACTUS_LARGE: { x: 332, y: 2 }, CACTUS_SMALL: { x: 228, y: 2 }, OBSTACLE_2: { x: 332, y: 2 }, OBSTACLE: { x: 228, y: 2 }, CLOUD: { x: 86, y: 2 }, HORIZON: { x: 2, y: 54 }, MOON: { x: 484, y: 2 }, PTERODACTYL: { x: 134, y: 2 }, RESTART: { x: 2, y: 68 }, TEXT_SPRITE: { x: 655, y: 2 }, TREX: { x: 848, y: 2 }, STAR: { x: 645, y: 2 }, COLLECTABLE: { x: 2, y: 2 }, ALT_GAME_END: { x: 121, y: 2 }, }, HDPI: { BACKGROUND_EL: { x: 166, y: 2 }, CACTUS_LARGE: { x: 652, y: 2 }, CACTUS_SMALL: { x: 446, y: 2 }, OBSTACLE_2: { x: 652, y: 2 }, OBSTACLE: { x: 446, y: 2 }, CLOUD: { x: 166, y: 2 }, HORIZON: { x: 2, y: 104 }, MOON: { x: 954, y: 2 }, PTERODACTYL: { x: 260, y: 2 }, RESTART: { x: 2, y: 130 }, TEXT_SPRITE: { x: 1294, y: 2 }, TREX: { x: 1678, y: 2 }, STAR: { x: 1276, y: 2 }, COLLECTABLE: { x: 4, y: 4 }, ALT_GAME_END: { x: 242, y: 4 }, }, MAX_GAP_COEFFICIENT: 1.5, MAX_OBSTACLE_LENGTH: 3, HAS_CLOUDS: 1, BOTTOM_PAD: 10, TREX: { WAITING_1: { x: 44, w: 44, h: 47, xOffset: 0 }, WAITING_2: { x: 0, w: 44, h: 47, xOffset: 0 }, RUNNING_1: { x: 88, w: 44, h: 47, xOffset: 0 }, RUNNING_2: { x: 132, w: 44, h: 47, xOffset: 0 }, JUMPING: { x: 0, w: 44, h: 47, xOffset: 0 }, CRASHED: { x: 220, w: 44, h: 47, xOffset: 0 }, COLLISION_BOXES: new CollisionBox(22, 0, 17, 16), new CollisionBox(1, 18, 30, 9), new CollisionBox(10, 35, 14, 8), new CollisionBox(1, 24, 29, 5), new CollisionBox(5, 30, 21, 4), new CollisionBox(9, 34, 15, 4), , }, OBSTACLES: { type: CACTUS_SMALL, width: 17, height: 35, yPos: 105, multipleSpeed: 4, minGap: 120, minSpeed: 0, collisionBoxes: new CollisionBox(0, 7, 5, 27), new CollisionBox(4, 0, 6, 34), new CollisionBox(10, 4, 7, 14), , }, { type: CACTUS_LARGE, width: 25, height: 50, yPos: 90, multipleSpeed: 7, minGap: 120, minSpeed: 0, collisionBoxes: new CollisionBox(0, 12, 7, 38), new CollisionBox(8, 0, 7, 49), new CollisionBox(13, 10, 10, 38), , }, { type: PTERODACTYL, width: 46, height: 40, yPos: 100, 75, 50, yPosMobile: 100, 50, multipleSpeed: 999, minSpeed: 8.5, minGap: 150, collisionBoxes: new CollisionBox(15, 15, 16, 5), new CollisionBox(18, 21, 24, 6), new CollisionBox(2, 14, 4, 3), new CollisionBox(6, 10, 4, 7), new CollisionBox(10, 8, 6, 9), , numFrames: 2, frameRate: 1e3 / 6, speedOffset: 0.8, }, , BACKGROUND_EL: { CLOUD: { HEIGHT: 14, MAX_CLOUD_GAP: 400, MAX_SKY_LEVEL: 30, MIN_CLOUD_GAP: 100, MIN_SKY_LEVEL: 71, OFFSET: 4, WIDTH: 46, X_POS: 1, Y_POS: 120, }, }, BACKGROUND_EL_CONFIG: { MAX_BG_ELS: 1, MAX_GAP: 400, MIN_GAP: 100, POS: 0, SPEED: 0.5, Y_POS: 125, }, LINES: { SOURCE_X: 2, SOURCE_Y: 52, WIDTH: 600, HEIGHT: 12, YPOS: 127 }, , }, }; /script> /head> body idt classneterror stylefont-family: Segoe UI, Tahoma, sans-serif; font-size: 75% jstcache0 > div classwrapper> div classimage image-first> img srcimages/top.svg alt> /div> div classimage image-second> img srcimages/bottom.svg alt> /div> div classbottom> div classbottom__title> /div> div classbottom__image> /div> /div> div classcontent> div classcontent__block-game> div classcontent__game> div idmain-frame-error classinterstitial-wrapper jstcache0> div idmain-content jstcache0> div classicon icon-offline jstcache0 stylevisibility: hidden >/div> div idmain-message jstcache0> h1 jstcache0> span jsselectheading jsvalues.innerHTML:msg jstcache9 a iderror-information-button classhidden onclicktoggleErrorInformationPopup() jstcache0 >/a> /h1> p jsselectsummary jsvalues.innerHTML:msg jstcache1 styledisplay: none >/p> div iderror-information-popup-container jstcache0> div iderror-information-popup jstcache0> div iderror-information-popup-box jstcache0> div iderror-information-popup-content jstcache0> div idsuggestions-list styledisplay: none jsdisplay(suggestionsSummaryList && suggestionsSummaryList.length) jstcache16 > p jsvalues.innerHTML:suggestionsSummaryListHeader jstcache18 >/p> ul jsvalues.className:suggestionsSummaryList.length 1 ? single-suggestion : jstcache19 > li jsselectsuggestionsSummaryList jsvalues.innerHTML:summary jstcache21 >/li> /ul> /div> div classerror-code jscontenterrorCode jstcache17 >/div> p iderror-information-popup-close jstcache0> a classlink-button jscontentcloseDescriptionPopup onclicktoggleErrorInformationPopup() jstcache20 >null/a > /p> /div> /div> /div> /div> div iddownload-links-wrapper classhidden jstcache0> div iddownload-link-wrapper jstcache0> a iddownload-link classlink-button onclickdownloadButtonClick() jsselectdownloadButton jscontentmsg jsvalues.disabledText:disabledMsg jstcache6 styledisplay: none >/a> /div> div iddownload-link-clicked-wrapper classhidden jstcache0> div iddownload-link-clicked classlink-button jsselectdownloadButton jscontentdisabledMsg jstcache11 styledisplay: none >/div> /div> /div> div idsave-page-for-later-button classhidden jstcache0> a classlink-button onclicksavePageLaterClick() jsselectsavePageLater jscontentsavePageMsg jstcache10 styledisplay: none >/a> /div> div idcancel-save-page-button classhidden onclickcancelSavePageClick() jsselectsavePageLater jsvalues.innerHTML:cancelMsg jstcache4 styledisplay: none >/div> div idoffline-content-list classlist-hidden hidden jstcache0 > div idoffline-content-list-visibility-card onclicktoggleOfflineContentListVisibility(!0) jstcache0 > div idoffline-content-list-title jsselectofflineContentList jscontenttitle jstcache12 styledisplay: none >/div> div jstcache0> div idoffline-content-list-show-text jsselectofflineContentList jscontentshowText jstcache14 styledisplay: none >/div> div idoffline-content-list-hide-text jsselectofflineContentList jscontenthideText jstcache15 styledisplay: none >/div> /div> /div> div idoffline-content-suggestions jstcache0>/div> div idoffline-content-list-action jstcache0> a classlink-button onclicklaunchDownloadsPage() jsselectofflineContentList jscontentactionText jstcache13 styledisplay: none >/a> /div> /div> /div> /div> div idbuttons classnav-wrapper suggested-left jstcache0> div idcontrol-buttons hidden jstcache0> button idreload-button classblue-button text-button onclickreloadButtonClick(this.url) jsselectreloadButton jsvalues.url:reloadUrl jscontentmsg jstcache5 styledisplay: none >/button> button iddownload-button classblue-button text-button onclickdownloadButtonClick() jsselectdownloadButton jscontentmsg jsvalues.disabledText:disabledMsg jstcache6 styledisplay: none >/button> /div> button iddetails-button classsecondary-button text-button small-link singular onclickdetailsButtonClick(),toggleHelpBox() jscontentdetails jsdisplay(suggestionsDetails && suggestionsDetails.length > 0) || diagnose jsvalues.detailsText:details; .hideDetailsText:hideDetails; jstcache2 styledisplay: none >/button> /div> div iddetails classhidden jstcache0> div classsuggestions jsselectsuggestionsDetails jstcache3 styledisplay: none > div classsuggestion-header jsvalues.innerHTML:header jstcache7 >/div> div classsuggestion-body jsvalues.innerHTML:body jstcache8 >/div> /div> /div> div roleapplication tabindex0 titleDino game, play classrunner-container > canvas classrunner-canvas width600 height150 stylewidth: 600px; height: 150px >/canvas >span classoffline-runner-live-region aria-liveassertive >/span > /div> label classslow-speed-option hidden >Start slowerinput typecheckbox titleStart slower tabindex0 checked />span classslow-speed-toggle>/span >/label> /div> div idsub-frame-error jstcache0> div classicon jstcache0>/div> div idsub-frame-error-details jsselectsummary jsvalues.innerHTML:msg jstcache1 styledisplay: none >/div> /div> div idoffline-resources jstcache0> img idoffline-resources-1x srcdata:image/png;base64,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 jstcache0 /> img idoffline-resources-2x srcdata:image/png;base64,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 jstcache0 />template idaudio-resources jstcache0 >audio idoffline-sound-press srcdata:audio/mpeg;base64,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 >/audio >audio idoffline-sound-hit srcdata:audio/mpeg;base64,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 >/audio >audio idoffline-sound-reached srcdata:audio/mpeg;base64,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 >/audio >/template> /div> /div> div classcontent__back>Назад/div> /div> div classcontent__block-start> div classcontent__start-title> 💰 Домен доступен к покупке /div> div classcontent__start-block> div classcontent__start-text> Контакты владельца домена:br> WhatsApp:79205350790br> a hrefhttps://wa.me/79205350790>Написать в WhatsApp/a> br> Telegram: domenBroker br> a hrefhttps://t.me/domenBroker>Написать в Telegram/a> /div> /div> div classcontent__start-price> p>Цена этого домена:/p> span>3000 ₽/span> /div> /div> /div> /div> /div> script jstcache0> !(function () { function t(t, e, n) { var i (function (t, e, n) { return Function.prototype.call.apply( Array.prototype.slice, arguments ); })(arguments, 2); return function () { return e.apply(t, i); }; } function e(t) { this.i t; } function n(t) { t.style.display ; } function i(t) { t.style.display none; } function r(t, e) { this.l.apply(this, arguments); } function s(t) { for (var e in t.a) delete t.ae; (t.f null), m.push(t); } function o(t, e, n) { try { return e.call(n, t.a, t.f); } catch (t) { return b.$default; } } function l(t) { if (!_t) try { var e (function(a_, b_) { with (a_) with (b_) return + t + }), n window.trustedTypes ? y.createScript(e) : e; _t window.eval(n); } catch (t) {} return _t; } function a(t) { for (var e , n 0, i (t t.split(j)).length; i > n; ++n) { var r tn.indexOf(:); if (!(0 > r)) { var s tn.substr(0, r).replace(/^\s+/, ).replace(/\s+$/, ); (r l(tn.substr(r + 1))), e.push(s, r); } } return e; } function u() {} function c(t) { t.__jstcache || (function (t, n) { var i new e(n); for (i.h t; i.h.length; ) { var r i, s i.h.shift(); for (r.i(s), s s.firstChild; s; s s.nextSibling) 1 s.nodeType && r.h.push(s); } })(t, function (t) { h(t); }); } function h(t) { if (t.__jstcache) return t.__jstcache; var e t.getAttribute(jstcache); if (null ! e) return (t.__jstcache Ce); e T.length 0; for (var n E.length; n > e; ++e) { var i Ee0, r t.getAttribute(i); (Bi r), null ! r && T.push(i + + r); } if (0 T.length) return t.setAttribute(jstcache, 0), (t.__jstcache C0); var s T.join(&); if ((e As)) return t.setAttribute(jstcache, e), (t.__jstcache Ce); var o {}; for (e 0, n E.length; n > e; ++e) { i (r Ee)0; var l r1; null ! (r Bi) && (oi l(r)); } return ( (e + ++w), t.setAttribute(jstcache, e), (Ce o), (As e), (t.__jstcache o) ); } function f(t, e) { t.j.push(e), t.o.push(0); } function p(t) { return t.c.length ? t.c.pop() : ; } function d(t) { if (t.__jstcache) return t.__jstcache; var e t.getAttribute(jstcache); return e ? (t.__jstcache Ce) : h(t); } function v(t, e) { var n document; if (e) { var r n.getElementById(t); if (!r) { r e(); var s n.getElementById(jsts); s || (((s n.createElement(div)).id jsts), i(s), (s.style.position absolute), n.body.appendChild(s)); var o n.createElement(div); s.appendChild(o), (o.innerHTML r), (r n.getElementById(t)); } n r; } else n n.getElementById(t); return n ? (c(n), (n n.cloneNode(!0)).removeAttribute(id), n) : null; } function g(t, e, n) { n e.length - 1 ? t.setAttribute(jsinstance, * + n) : t.setAttribute(jsinstance, + n); } var j /\s*;\s*/; r.prototype.l function (t, e) { if ((this.a || (this.a {}), e)) { var n this.a, i e.a; for (r in i) nr ir; } else { var r this.a; for (n in (i b)) rn in; } (this.a.$this t), (this.a.$context this), (this.f void 0 ! t && null ! t ? t : ), e || (this.a.$top this.f); }; var y, b { $default: null }, m ; (r.prototype.clone function (t, e, n) { if (0 m.length) { var i m.pop(); r.call(i, t, this), (t i); } else t new r(t, this); return (t.a.$index e), (t.a.$count n), t; }), window.trustedTypes && (y trustedTypes.createPolicy(jstemplate, { createScript: function (t) { return t; }, })); var _ {}, w 0, C { 0: {} }, A {}, B {}, T , E jsselect, l, jsdisplay, l, jsvalues, a, jsvars, a, jseval, function (t) { for (var e , n 0, i (t t.split(j)).length; i > n; ++n) if (tn) { var r l(tn); e.push(r); } return e; }, , transclude, function (t) { return t; }, , jscontent, l, jsskip, l, ; (u.prototype.g function (t, e) { var r d(e), l r.transclude; if (l) (r v(l)) ? (e.parentNode.replaceChild(r, e), (l p(this)).push(this.g, t, r), f(this, l)) : e.parentNode.removeChild(e); else if ((r r.jsselect)) { r o(t, r, e); var a e.getAttribute(jsinstance), u !1; a && (* a.charAt(0) ? ((a parseInt(a.substr(1), 10)), (u !0)) : (a parseInt(a, 10))); var c null ! r && object typeof r && number typeof r.length; l c ? r.length : 1; var h c && 0 l; if (c) if (h) a ? e.parentNode.removeChild(e) : (e.setAttribute(jsinstance, *0), i(e)); else if ((n(e), null a || a || (u && l - 1 > a))) { for (u p(this), a a || 0, c l - 1; c > a; ++a) { var j e.cloneNode(!0); e.parentNode.insertBefore(j, e), g(j, r, a), (h t.clone(ra, a, l)), u.push(this.b, h, j, s, h, null); } g(e, r, a), (h t.clone(ra, a, l)), u.push(this.b, h, e, s, h, null), f(this, u); } else l > a ? ((u ra), g(e, r, a), (h t.clone(u, a, l)), (u p(this)).push(this.b, h, e, s, h, null), f(this, u)) : e.parentNode.removeChild(e); else null r ? i(e) : (n(e), (h t.clone(r, 0, 1)), (u p(this)).push(this.b, h, e, s, h, null), f(this, u)); } else this.b(t, e); }), (u.prototype.b function (t, e) { var r d(e), s r.jsdisplay; if (s) { if (!o(t, s, e)) return void i(e); n(e); } if ((s r.jsvars)) for (var l 0, a s.length; a > l; l + 2) { var u sl, c o(t, sl + 1, e); t.au c; } if ((s r.jsvalues)) for (l 0, a s.length; a > l; l + 2) if (((c sl), (u o(t, sl + 1, e)), $ c.charAt(0))) t.ac u; else if (. c.charAt(0)) { for ( var h e, v (c c.substr(1).split(.)).length, g 0, j v - 1; j > g; ++g ) { var y cg; hy || (hy {}), (h hy); } hcv - 1 u; } else c && (boolean typeof u ? u ? e.setAttribute(c, c) : e.removeAttribute(c) : e.setAttribute(c, + u)); if ((s r.jseval)) for (l 0, a s.length; a > l; ++l) o(t, sl, e); if (!(s r.jsskip) || !o(t, s, e)) if ((r r.jscontent)) { if (((r + o(t, r, e)), e.innerHTML ! r)) { for (; e.firstChild; ) (s e.firstChild).parentNode.removeChild(s); e.appendChild(this.m.createTextNode(r)); } } else { for (r p(this), s e.firstChild; s; s s.nextSibling) 1 s.nodeType && r.push(this.g, t, s); r.length && f(this, r); } }), (window.jstGetTemplate v), (window.JsEvalContext r), (window.jstProcess function (e, n) { var i new u(); c(n), (i.m n ? 9 n.nodeType ? n : n.ownerDocument || document : document); var r, s, o, l t(i, i.g, e, n), a (i.j ), h (i.o ); for (i.c , l(); a.length; ) (r aa.length - 1), (l hh.length - 1) > r.length ? ((l i), ((s a.pop()).length 0), l.c.push(s), h.pop()) : ((s rl++), (o rl++), (r rl++), (hh.length - 1 l), s.call(i, o, r)); }); })(); /script> script jstcache0> var loadTimeData; class LoadTimeData { constructor() { this.data_ null; } set data(t) { expect(!this.data_, Re-setting data.), (this.data_ t); } valueExists(t) { return t in this.data_; } getValue(t) { expect( this.data_, No data. Did you remember to include strings.js? ); const e this.data_t; return expect(void 0 ! e, Could not find value for + t), e; } getString(t) { const e this.getValue(t); return expectIsType(t, e, string), e; } getStringF(t, e) { const n this.getString(t); if (!n) return ; const a Array.prototype.slice.call(arguments); return (a0 n), this.substituteString.apply(this, a); } substituteString(t, e) { const n arguments; return t.replace(/\$(.|$|\n)/g, function (t) { return ( expect( t.match(/\$$1-9/), Unescaped $ found in localized string. ), $$ t ? $ : nt1 ); }); } getSubstitutedStringPieces(t, e) { const n arguments; return (t.match(/(\$1-9)|((^$|\$(^1-9|$))+)/g) || ).map( function (t) { return t.match(/^\$1-9$/) ? { value: nt1, arg: t } : (expect( (t.match(/\$/g) || ).length % 2 0, Unescaped $ found in localized string. ), { value: t.replace(/\$\$/g, $), arg: null }); } ); } getBoolean(t) { const e this.getValue(t); return expectIsType(t, e, boolean), e; } getInteger(t) { const e this.getValue(t); return ( expectIsType(t, e, number), expect(e Math.floor(e), Number isnt integer: + e), e ); } overrideValues(t) { expect( object typeof t, Replacements must be a dictionary object. ); for (const e in t) this.data_e te; } resetForTesting(t null) { this.data_ t; } isInitialized() { return null ! this.data_; } } function expect(t, e) { if (!t) throw new Error( Unexpected condition on + document.location.href + : + e ); } function expectIsType(t, e, n) { expect(typeof e n, + e + ( + t + ) is not a + n); } expect(!loadTimeData, should only include this file once), (loadTimeData new LoadTimeData()), (window.loadTimeData loadTimeData), console.warn(crbug/1173575, non-JS module files deprecated.); /script> script jstcache0> const pageData { dinoGameA11yAriaLabel: Dino game, play, dinoGameA11yDescription: Dino game. A pixelated dinosaur dodges cacti and pterodactyls as it runs across a desolate landscape. When you hear an audio cue, press space to jump over obstacles., dinoGameA11yGameOver: Game over, your score is $1., dinoGameA11yHighScore: Your highest score is $1., dinoGameA11yJump: Jump!, dinoGameA11ySpeedToggle: Start slower, dinoGameA11yStartGame: Game started., errorCode: , fontfamily: Segoe UI, Tahoma, sans-serif, fontsize: 75%, heading: { hostName: dino, msg: Press space to play }, iconClass: icon-offline, language: en, textdirection: ltr, title: chrome://dino/, }; loadTimeData.data pageData; var tp document.getElementById(t); jstProcess(new JsEvalContext(pageData), tp); /script> script src./libs/jquery/jquery-3.2.1.min.js>/script> script src./js/main.js>/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]