1const boot_log = [
  2  "Welcome to Yuki I, a low power consumption and low noise server.",
  3  "それぞれの雪の結晶は異なります。",
  4  "vm_page_bootstrap: 987323 free pages and 53061 wired pages",
  5  "kext submap [0xffffff7f8072e000 - 0xffffff8000000000], kernel text [0xffffff8000200000 - 0xffffff800072e000]",
  6  "zone leak detection enabled",
  7  "standard timeslicing quantum is 10000 us",
  8  "mig_table_max_displ = 72",
  9  "TSC Deadline Timer supported and enabled",
 10  "YukiACPICPU: ProcessorId=1 LocalApicId=0 Enabled",
 11  "YukiACPICPU: ProcessorId=2 LocalApicId=2 Enabled",
 12  "YukiACPICPU: ProcessorId=3 LocalApicId=1 Enabled",
 13  "YukiACPICPU: ProcessorId=4 LocalApicId=3 Enabled",
 14  "YukiACPICPU: ProcessorId=5 LocalApicId=255 Disabled",
 15  "YukiACPICPU: ProcessorId=6 LocalApicId=255 Disabled",
 16  "YukiACPICPU: ProcessorId=7 LocalApicId=255 Disabled",
 17  "YukiACPICPU: ProcessorId=8 LocalApicId=255 Disabled",
 18  "calling mpo_policy_init for TMSafetyNet",
 19  "Security policy loaded: Safety net for Rollback (TMSafetyNet)",
 20  "calling mpo_policy_init for Sandbox",
 21  "Security policy loaded: Seatbelt sandbox policy (Sandbox)",
 22  "calling mpo_policy_init for Quarantine",
 23  "Security policy loaded: Quarantine policy (Quarantine)",
 24  "Copyright (c) 1982, 1986, 1989, 1991, 1993, 2015",
 25  "The Regents of the University of Adelaide. All rights reserved.",
 26  "",
 27  "HN_ Framework successfully initialized",
 28  "using 16384 buffer headers and 10240 cluster IO buffer headers",
 29  "IOAPIC: Version 0x20 Vectors 64:87",
 30  "ACPI: System State [S0 S3 S4 S5] (S3)",
 31  "PFM64 0xf10000000, 0xf0000000",
 32  "[ PCI configuration begin ]",
 33  "YukiIntelCPUPowerManagement: Turbo Ratios 0046",
 34  "YukiIntelCPUPowerManagement: (built 13:08:12 Jun 18 2011) initialization complete",
 35  "console relocated to 0xf10000000",
 36  "PCI configuration changed (bridge=16 device=4 cardbus=0)",
 37  "[ PCI configuration end, bridges 12 devices 16 ]",
 38  "mbinit: done [64 MB total pool size, (42/21) split]",
 39  "Pthread support ABORTS when sync kernel primitives misused",
 40  "com.Yuki.YukiFSCompressionTypeZlib kmod start",
 41  "com.Yuki.YukiTrololoBootScreen kmod start",
 42  "com.Yuki.YukiFSCompressionTypeZlib load succeeded",
 43  "com.Yuki.YukiFSCompressionTypeDataless load succeeded",
 44  "",
 45  "YukiAMDCPUPowerManagementClient: ready",
 46  "BTCOEXIST off",
 47  "wl0: Broadcom BCM4331 802.11 Wireless Controller",
 48  "5.100.98.75",
 49  "",
 50  "FireWire (OHCI) Lucent ID 5901 built-in now active, GUID c82a14fffee4a086; max speed s800.",
 51  "rooting via boot-uuid from /chosen: F5670083-AC74-33D3-8361-AC1977EE4AA2",
 52  "Waiting on <dict ID="0"><key>IOProviderClass</key><string ID="1">",
 53  "IOResources</string><key>IOResourceMatch</key><string ID="2">boot-uuid-media</string></dict>",
 54  "Got boot device = IOService:/YukiACPIPlatformExpert/PCI0@0/YukiACPIPCI/SATA@1F,2/",
 55  "YukiIntelPchSeriesAHCI/PRT0@0/IOAHCIDevice@0/YukiAHCIDiskDriver/SarahI@sTheBestDriverIOAHCIBlockStorageDevice/IOBlockStorageDriver/",
 56  "Yuki SSD TS128C Media/IOGUIDPartitionScheme/Customer@2",
 57  "BSD root: disk0s2, major 14, minor 2",
 58  "Kernel is LP64",
 59  "IOThunderboltSwitch::i2cWriteDWord - status = 0xe00002ed",
 60  "IOThunderboltSwitch::i2cWriteDWord - status = 0x00000000",
 61  "IOThunderboltSwitch::i2cWriteDWord - status = 0xe00002ed",
 62  "IOThunderboltSwitch::i2cWriteDWord - status = 0xe00002ed",
 63  "YukiUSBMultitouchDriver::checkStatus - received Status Packet, Payload 2: device was reinitialized",
 64  "MottIsAScrub::checkstatus - true, Mott::Scrub",
 65  "[IOBluetoothHCIController::setConfigState] calling registerService",
 66  "AirPort_Brcm4331: Ethernet address e4:ce:8f:46:18:d2",
 67  "IO80211Controller::dataLinkLayerAttachComplete():  adding YukiEFINVRAM notification",
 68  "IO80211Interface::efiNVRAMPublished():",
 69  "Created virtif 0xffffff800c32ee00 p2p0",
 70  "BCM5701Enet: Ethernet address c8:2a:14:57:a4:7a",
 71  "Previous Shutdown Cause: 3",
 72  "NTFS driver 3.8 [Flags: R/W].",
 73  "NTFS volume name BOOTCAMP, version 3.1.",
 74  "DSMOS has arrived",
 75  "en1: 802.11d country code set to 'US'.",
 76  "en1: Supported channels 1 2 3 4 5 6 7 8 9 10 11 36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 149 153 157 161 165",
 77  "m_thebest",
 78  "MacAuthEvent en1   Auth result for: 00:60:64:1e:e9:e4  MAC AUTH succeeded",
 79  "MacAuthEvent en1   Auth result for: 00:60:64:1e:e9:e4 Unsolicited  Auth",
 80  "wlEvent: en1 en1 Link UP",
 81  "AirPort: Link Up on en1",
 82  "en1: BSSID changed to 00:60:64:1e:e9:e4",
 83  "virtual bool IOHIDEventSystemUserClient::initWithTask(task*, void*, UInt32):",
 84  "Client task not privileged to open IOHIDSystem for mapping memory (e00002c1)",
 85  "System Integrity Check: 100% Success ",
 86  "[OK] Linux Yuki-I 5.10.60-v7l+ #1449 SMP Wed Aug 25 15:00:44 BST 2021 armv7l GNU/Linux ",
 87  "[OK] CPU Cores",
 88  "[OK] Random Access Memory",
 89  "[OK] USB Interfaces",
 90  "[OK] Network Interfaces",
 91  "",
 92  "",
 93  "Boot Complete.",
 94];
 95function updatelog() {
 96  if (progress > boot_log_progress / (boot_log.length - 1)) {
 97    document.getElementById("loading-console").innerHTML +=
 98      boot_log[boot_log_progress].replaceAll(" ", "&nbsp;") + "<br>";
 99    boot_log_progress++;
100    document.getElementById("loading-console").scrollTop =
101      document.getElementById("loading-console").scrollHeight;
102    updatelog();
103  }
104}
105
106boot_log_progress = 0;
107progress = 0;
108state = true;
109rgb = [143, 223, 255];
110basergb = [255, 255, 255];
111document.getElementById("loading-icon").style.strokeDasharray =
112  "27.5% 100% 100%";
113document.getElementById("loading-icon-yuki").style.strokeDasharray =
114  "80% 100% 100%";
115setTimeout(function () {
116  document.getElementById("loading-icon").style.fill =
117    "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")";
118  document.getElementById("loading-icon-yuki").style.fill =
119    "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")";
120}, 1000);
121var timer = setInterval(function () {
122  if (progress < 1.02) {
123    document.getElementById("loading-progress").innerHTML =
124      Math.round(progress * 100) + "%";
125    document.getElementById("loading-progressbar-inner").style.width =
126      "calc((100vw - 200px) * " + progress + ")";
127    avgcolor = [
128      rgb[0] * progress + basergb[0] * (1 - progress),
129      rgb[1] * progress + basergb[1] * (1 - progress),
130      rgb[2] * progress + basergb[2] * (1 - progress),
131    ];
132    document.getElementById("connection-status").style.color =
133      "rgb(" + avgcolor[0] + "," + avgcolor[1] + "," + avgcolor[2] + ")";
134    document.getElementById("loading-progressbar-inner").style.backgroundColor =
135      "rgb(" + avgcolor[0] + "," + avgcolor[1] + "," + avgcolor[2] + ")";
136    document.getElementById("loading-progressbar").style.borderColor =
137      "rgb(" + avgcolor[0] + "," + avgcolor[1] + "," + avgcolor[2] + ")";
138    document.getElementById("loading-progress").style.color =
139      "rgb(" + avgcolor[0] + "," + avgcolor[1] + "," + avgcolor[2] + ")";
140    document.getElementById("loading-icon").style.stroke =
141      "rgb(" + avgcolor[0] + "," + avgcolor[1] + "," + avgcolor[2] + ")";
142    document.getElementById("Yuki-I-text").style.color =
143      "rgb(" + avgcolor[0] + "," + avgcolor[1] + "," + avgcolor[2] + ")";
144    progress += 0.02;
145  } else {
146    if (state) {
147      setTimeout(function () {
148        document.getElementById("connection-status").style.opacity = "0";
149      }, 200);
150      setTimeout(function () {
151        document.getElementById("connection-status").innerHTML =
152          "&lt; connected &gt;";
153        document.getElementById("connection-status").style.color =
154          "rgb(145, 255, 143)";
155        document.getElementById("connection-status").style.opacity = "1";
156      }, 400);
157      setTimeout(function () {
158        document.getElementById("loading-screen").style.opacity = "0";
159      }, 1000);
160      setTimeout(function () {
161        document.getElementById("loading-screen").remove();
162      }, 1500);
163      state = false;
164    }
165    clearInterval(timer);
166  }
167  updatelog();
168}, 20);