Runa do Destino da Intenção Funesta",
[43091] = "Monster - Sword, 1H Blood Elf D01 Purple",
[43092] = "Monster - Shield, Dalaran",
[43093] = "Monster - Staff, Dalaran",
[43094] = "Runa do Destino da Quase Invencibilidade",
[43095] = "Pesquisa de Berinand",
[43096] = "O Sopro de Alexstrasza",
[43097] = "Forro de Pele - Poder de Ataque",
[43098] = "Ochre Pigment [PH]",
[43099] = "Bolo de Carne de Cogumelo Infuso",
[43100] = "Cogumelo Infuso",
[43101] = "Fôrma de Bolo de Carne",
[43102] = "Orbe Congelado",
[43103] = "Pigmento Verdejante",
[43104] = "Pigmento Queimado",
[43105] = "Pigmento Índigo",
[43106] = "Pigmento Rubi",
[43107] = "Pigmento Safira",
[43108] = "Pigmento Ebâneo",
[43109] = "Pigmento Gélido",
[43110] = "Monster - Polearm, Northrend D01 Black",
[43111] = "Monster - Axe, 2H Blackwing A02",
[43112] = "Monster - Mace, Blackwing A01",
[43113] = "Monster - Mace, Blackwing A02",
[43114] = "Monster - Polearm, Blackwing A01",
[43115] = "Tinta do Caçador",
[43116] = "Tinta do Leão",
[43117] = "Tinta de Aurestela",
[43118] = "Tinta Flamejade",
[43119] = "Tinta Real",
[43120] = "Tinta Celestial",
[43121] = "Tinta Abrasadora",
[43122] = "Tinta Cintilante",
[43123] = "Tinta do Céu",
[43124] = "Tinta Etérea",
[43125] = "Tinta Trevachama",
[43126] = "Tinta do Mar",
[43127] = "Tinta da Nevada",
[43128] = "Jarra de Vinho",
[43129] = "Peitoral do Golpe Cortante",
[43130] = "Espaldares Virulentos",
[43131] = "Braçadeiras Mata-águia",
[43132] = "Capuz do Choque Noturno",
[43133] = "Cinturão do Choque Noturno",
[43134] = "Runa do Destino da Energia Primeva",
[43135] = "Runa do Destino dos Pés Ligeiros",
[43136] = "Bandeja de Queijo e Vinho",
[43137] = "Roquefort de Dalaran Curado",
[43138] = "Taça de Vinho de Dalaran Meio Cheia",
[43139] = "Bandeja de Queijo Vazia",
[43140] = "Tabuleta Histórica dos Drakkari",
[43141] = "Runa do Destino do Vigor Insuperável",
[43142] = "Cesta de Piquenique Vazia",
[43143] = "Mostarda Selvagem",
[43144] = "Cesta de Mostardos-quentes",
[43145] = "Velino Arruinado",
[43146] = "Velino Arruinado",
[43147] = "Panela de Ensopado",
[43148] = "Cenoura do Canto Cristalino",
[43149] = "Cozido Vegetariano",
[43150] = "Cristal de Controle de Defesas",
[43151] = "Língua de Loken",
[43152] = "Monster - Staff, Northrend B02


Codes::unknown, 0), ResponseMsgParamCodes::unknown, 0);
    uint8_t rawMsg[Protocol::MaxResponseSize()];
    uint8_t rawMsgLen = 0;
    MMU2::ProtocolLogic::ExpectingMessage2(xbuddy_extension.mmuModbusRq, xbuddy_extension.mmuQuery, rsp, rq, rawMsg, rawMsgLen);

    if (address < 4) {
        CHECK(rsp.request.code == RequestMsgCodes::Version);
    } else {
        CHECK(rsp.request.code == RequestMsgCodes::Read);
    }
    CHECK(rsp.request.value == address);
    CHECK(rsp.request.value2 == 0);
    CHECK(rsp.paramCode == ResponseMsgParamCodes::Accepted);
    CHECK(rsp.paramValue == expectedRead);
}

TEST_CASE("MMU2-MODBUS read register") {
    for (uint16_t address = 0; address < 256; ++address) {
        CheckReadRegister(address, 256 - address);
    }
}

void CheckWriteRegister(uint8_t address, uint16_t value) {
    RequestMsg rq(RequestMsgCodes::Write, address, value);
    xbuddy_extension.post_write_mmu_register(address, value);

    // check the control structures
    CHECK(xbuddy_extension.mmuModbusRq.rw == XBuddyExtension::MMUModbusRequest::RW::write);
    CHECK(xbuddy_extension.mmuModbusRq.u.write.address == address);
    CHECK(xbuddy_extension.mmuModbusRq.u.write.value == value);

    // prepare simulated modbus comm
    returnedStatus = CommunicationStatus::OK;

    // process the message
    CHECK(xbuddy_extension.refresh_mmu() == returnedStatus);

    // check control structures
    CHECK(xbuddy_extension.mmuModbusRq.u.write.accepted == true);

    // now run ExpectingMessage a couple of times to make sure a valid response got recoded into MMU protocol messages
    ResponseMsg rsp(RequestMsg(RequestMsgCodes::unknown, 0), ResponseMsgParamCodes::unknown, 0);
    uint8_t rawMsg[Protocol::MaxResponseSize()];
    uint8_t rawMsgLen = 0;
    MMU2::ProtocolLogic::ExpectingMessage2(xbuddy_extension.mmuModbusRq, xbuddy_extension.mmuQuery, rsp, rq, rawMsg, rawMsgLen);

    CHECK(rsp.request.code == RequestMsgCodes::Write);
    CHECK(rsp.request.value == address);
    CHECK(rsp.paramCode == ResponseMsgParamCodes::Accepted);
    CHECK(rsp.paramValue == value);
}

TEST_CASE("MMU2-MODBUS write register") {
    for (uint16_t address = 0; address < 256; ++address) {
        CheckWriteRegister(address, 256 - address);
    }
}

TEST_CASE("MMU2-MODBUS pack-unpack-command") {
    REQUIRE(xbuddy_extension_shared::mmu_bridge::pack_command('X', 0) == 'X');
    REQUIRE(xbuddy_extension_shared::mmu_bridge::pack_command('X', 1) == 256U + 'X');
    REQUIRE(xbuddy_extension_shared::mmu_bridge::pack_command('T', 4) == 4 * 256U + 'T');

    {
        const auto [command, param] = xbuddy_extension_shared::mmu_bridge::unpack_command(256U + 'X');
        REQUIRE(command == 'X');
        REQUIRE(param == 1);
    }

    {
        const auto [command, param] = xbuddy_extension_shared::mmu_bridge::unpack_command(512U + 'T');
        REQUIRE(command == 'T');
        REQUIRE(param == 2);
    }
}

void CheckQuery(uint8_t command, uint8_t param, uint16_t commandStatus, uint16_t pec) {
    RequestMsg r


: 6px;
		width: 5px;
	}
	&::-webkit-scrollbar-track {
		@apply my-[5px] bg-transparent;
	}
	&::-webkit-scrollbar-thumb {
		@apply w-[5px] rounded-[6px] bg-black/70 opacity-0;
	}
	&:hover {
		&::-webkit-scrollbar-thumb {
			@apply opacity-100;
		}
	}
}
.textviewer-scroll {
	&::-webkit-scrollbar {
		height: 6px;
		width: 8px;
	}
	&::-webkit-scrollbar-track {
		@apply bg-transparent;
	}
	&::-webkit-scrollbar-thumb {
		@apply rounded-md bg-app-box;
	}
}

@keyframes fadeIn {
	from {
		opacity: 0;
	}
	to {
		opacity: 1;
	}
}

@keyframes fadeOut {
	from {
		opacity: 1;
	}
	to {
		opacity: 0;
	}
}

@-webkit-keyframes slide-top {
	0% {
		-webkit-transform: translateY(0);
		transform: translateY(0);
	}
	100% {
		-webkit-transform: translateY(-50px);
		transform: translateY(-50px);
	}
}
@keyframes slide-top {
	0% {
		-webkit-transform: translateY(0);
		transform: translateY(0);
	}
	100% {
		-webkit-transform: translateY(-50px);
		transform: translateY(-50px);
	}
}

.dialog-overlay[data-state='open'] {
	animation: fadeIn 200ms ease-out forwards;
}
.dialog-overlay[data-state='closed'] {
	animation: fadeIn 200ms ease-out forwards;
}
.dialog-content[data-state='open'] {
	-webkit-animation: slide-top 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) both;
	animation: slide-top 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) both;
}
.dialog-content[data-state='closed'] {
	animation: bounceDown 100ms ease-in forwards;
}

.picker {
	position: relative;
}

.swatch {
	width: 28px;
	height: 28px;
	border-radius: 8px;
	border: 3px solid #fff;
	box-shadow:
		0 0 0 1px rgba(0, 0, 0, 0.1),
		inset 0 0 0 1px rgba(0, 0, 0, 0.1);
	cursor: pointer;
}

.popover {
	position: absolute;
	top: calc(100% + 2px);
	left: 0;
	border-radius: 9px;
	box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
}

.react-colorful__saturation {
	border-radius: 4px !important;
}

.react-colorful__saturation-pointer {
	width: 12px !important;
	height: 12px !important;
}

.react-colorful__hue,
.react-colorful__alpha {
	margin-top: 12px !important;
	height: 8px !important;
	border-radius: 4px !important;
}

.react-colorful__hue-pointer,
.react-colorful__alpha-pointer {
	height: 18px !important;
	width: 8px !important;
	border-radius: 3px !important;
}

.selecto-selection {
	@apply rounded;
	border-color: hsla(var(--color-accent));
	background-color: hsla(var(--color-accent), 0.2) !important;
	z-index: 10 !important;
}

.indeterminate-progress-bar {
	/* Rounded border */
	border-radius: 9999px;

	/* Size */
	height: 4px


 5 16 5zM8.281 9.688a7.506 7.506 0 001.813.687c1.562.39 3.629.625 5.906.625 2.277 0 4.344-.234 5.906-.625.711-.18 1.301-.379 1.813-.656h.062c1.172.261 2.098.601 2.657.906.277.152.457.293.53.375-.023.035-.113.14-.405.313-.473.277-1.286.585-2.313.843-2.059.516-5.004.844-8.25.844-3.246 0-6.191-.328-8.25-.844-1.027-.258-1.84-.566-2.313-.844-.292-.171-.382-.277-.406-.312.074-.082.254-.223.532-.375.558-.305 1.484-.645 2.656-.906a.466.466 0 00.062-.031zm-.406 4.53c2.215.49 5.016.782 8.125.782 3.11 0 5.91-.293 8.125-.781C24.665 15.37 25 16.64 25 18c0 .566-.059 1.117-.156 1.656l-1.469-.593s-1.242-.493-2.625-1c-.691-.254-1.418-.524-2.063-.72C18.044 17.149 17.578 17 17 17c-1.645 0-3 1.355-3 3s1.355 3 3 3c.578 0 1.043-.148 1.688-.344.644-.195 1.37-.465 2.062-.718 1.383-.508 2.625-1 2.625-1l1.281-.532A8.963 8.963 0 0116 27c-4.984 0-9-4.016-9-9 0-1.355.336-2.629.875-3.781zM13 15c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm7 0c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-3 4c-.027 0 .54.102 1.125.281.586.18 1.266.41 1.938.657.082.03.074.03.156.062-.082.031-.074.031-.157.063-.671.246-1.351.476-1.937.656-.586.18-1.152.281-1.125.281-.566 0-1-.434-1-1 0-.566.434-1 1-1zm-2.813 3.844L12.75 24.25c2.336 2.336 6.164 2.336 8.5 0l-1.406-1.406a3.984 3.984 0 01-5.657 0z"/></svg>';
  static const String snowplow_solid =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path fill="currentColor" d="M10.5 6a3.005 3.005 0 00-2.875 2.188l-1.313 4.53-2-.655-.625 1.874 1.47.5-.282.282A2.931 2.931 0 004 16.813V19h-.813l-.156.813-1 5L1.781 26H30.22l-.25-1.188-1-5-.157-.812H28v-2.188c0-.796-.313-1.53-.875-2.093l-.281-.281 1.468-.5-.625-1.876-2 .657-1.312-4.531A3.005 3.005 0 0021.5 6zm0 2h11a.96.96 0 01.938.719L23.655 13H8.344l1.219-4.281A.96.96 0 0110.5 8zm-3.


us 4"] = 0,
      ["FD Bonus 5"] = 0,
      ["H Flip"] = false,
      ["Level 1"] = 3,
      ["Level 2"] = 3,
      ["Level 3"] = 3,
      ["Level 4"] = 0,
      ["Level 5"] = 0,
      ["Money Reward 1"] = 37,
      ["Money Reward 2"] = 37,
      ["Money Reward 3"] = 37,
      ["Money Reward 4"] = 0,
      ["Money Reward 5"] = 0,
      ["Monster 1 ID"] = 101,
      ["Monster 2 ID"] = 101,
      ["Monster 3 ID"] = 102,
      ["Monster 4 ID"] = 0,
      ["Monster 5 ID"] = 0,
      ["Monster DPS%"] = 0,
      ["Monster HP%"] = 0,
      ["MP 1"] = 0,
      ["MP 2"] = 0,
      ["MP 3"] = 0,
      ["MP 4"] = 0,
      ["MP 5"] = 0,
      ["Raid Wave Weight"] = 0,
      ["Stage Difficulty"] = 1,
      ["Stage ID"] = 9,
      ["Stage Name"] = LSTR("BATTLE.ARROW_OF_WINDS"),
      ["Stage Type"] = "normal",
      ["Stars 1"] = 1,
      ["Stars 2"] = 1,
      ["Stars 3"] = 1,
      ["Stars 4"] = 1,
      ["Stars 5"] = 1,
      ["Wave ID"] = 2
    },
    [3] = {
      ["Background Pic"] = "battle_bg/bbg_fall_grassland.jpg",
      ["Boss DPS%"] = 130,
      ["Boss HP%"] = 200,
      ["Boss Position"] = 5,
      ["BOSS SIZE%"] = 0,
      ["Chest 1 ID"] = 0,
      ["Chest 1 Mult"] = 0,
      ["Chest 2 ID"] = 0,
      ["Chest 2 Mult"] = 0,
      ["Chest 3 ID"] = 0,
      ["Chest 3 Mult"] = 0,
      ["Chest 4 ID"] = 0,
      ["Chest 4 Mult"] = 0,
      ["Chest 5 ID"] = 0,
      ["Chest 5 Mult"] = 0,
      ["FD Bonus 1"] = 0,
      ["FD Bonus 2"] = 0,
      ["FD Bonus 3"] = 0,
      ["FD Bonus 4"] = 0,
      ["FD Bonus 5"] = 104,
      ["H Flip"] = false,
      ["Level 1"] = 3,
      ["Level 2"] = 3,
      ["Level 3"] = 3,
      ["Level 4"] = 3,
      ["Level 5"] = 3,
      ["Money Reward 1"] = 37,
      ["Money Reward 2"] = 37,
      ["Money Reward 3"] = 37,
      ["Money Reward 4"] = 37,
      ["Money Reward 5"] = 210,
      ["Monster 1 ID"] = 101,
      ["Monster 2 ID"] = 101,
      ["Monster 3 ID"] = 101,
      ["Monster 4 ID"] = 102,
      ["Monster 5 ID"] = 11,
      ["Monster DPS%"] = 0,
      ["Monster HP%"] = 0,
      ["MP 1"] = 0,
      ["MP 2"] = 0,
      ["MP 3"] = 0,
      ["MP 4"] = 0,
      ["MP 5"] = 400,
      ["Raid Wave Weight"] = 0,
      ["Stage Difficulty"] = 1,
      ["Stage ID"] = 9,
      ["Stage Name"] = LSTR("BATTLE.ARROW_OF_WINDS"),
      ["Stage Type"] = "normal",
      ["Stars 1"] = 1,
      ["Stars 2"] = 1,
      ["Stars 3"] = 1,
      ["Stars 4"] = 1,
      ["Stars 5"] = 1,
      ["Wave ID"] = 3
    }
  },
  [10] = {
    [1] = {
      ["


	assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTokenOptions(false)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTLSOptions(false)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTLSOptions(false)))
	})

	t.Run("Security Spec configured with kms only,so kms options will be configured", func(t *testing.T) {
		c.store.Spec.Security.KeyManagementService.ConnectionDetails["VAULT_SECRET_ENGINE"] = "transit"
		rgwContainer, err := c.makeDaemonContainer(rgwConfig)
		assert.NoError(t, err)
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseKMSDefaultOptions(true)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseS3DefaultOptions(false)))
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTokenOptions(true)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTokenOptions(false)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTLSOptions(false)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTLSOptions(false)))
	})

	t.Run("Security Spec configured with s3 only, so s3 options will be configured", func(t *testing.T) {
		configureSSE(t, c, false, true)
		c.store.Spec.Security.ServerSideEncryptionS3.ConnectionDetails["VAULT_SECRET_ENGINE"] = "transit"
		rgwContainer, err := c.makeDaemonContainer(rgwConfig)
		assert.NoError(t, err)
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseKMSDefaultOptions(false)))
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseS3DefaultOptions(true)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTokenOptions(false)))
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTokenOptions(true)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTLSOptions(false)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTLSOptions(false)))
	})

	t.Run("Security Spec configured with both kms and s3 settings, so both kms and s3 options will be configured", func(t *testing.T) {
		configureSSE(t, c, true, true)
		c.store.Spec.Security.KeyManagementService.ConnectionDetails["VAULT_SECRET_ENGINE"] = "transit"
		c.store.Spec.Security.ServerSideEncryptionS3.ConnectionDetails["VAULT_SECRET_ENGINE"] = "transit"
		rgwContainer, err := c.makeDaemonContainer(rgwConfig)
		assert.NoError(t, err)
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseKMSDefaultOptions(true)))
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseS3DefaultOptions(true)))
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTokenOptions(true)))
		assert.True(t, checkRGWOptions(rgwContainer.Args, c.sseS3VaultTokenOptions(true)))
		assert.False(t, checkRGWOptions(rgwContainer.Args, c.sseKMSVaultTLSOptions(false)))
		assert.False(t, checkRGWOptions(rgwContainer.Args,


WE336_Same_Seed_in_PRNG__basic_01()).runTest("CWE336_Same_Seed_in_PRNG__basic_01");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_02()).runTest("CWE336_Same_Seed_in_PRNG__basic_02");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_03()).runTest("CWE336_Same_Seed_in_PRNG__basic_03");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_04()).runTest("CWE336_Same_Seed_in_PRNG__basic_04");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_05()).runTest("CWE336_Same_Seed_in_PRNG__basic_05");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_06()).runTest("CWE336_Same_Seed_in_PRNG__basic_06");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_07()).runTest("CWE336_Same_Seed_in_PRNG__basic_07");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_08()).runTest("CWE336_Same_Seed_in_PRNG__basic_08");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_09()).runTest("CWE336_Same_Seed_in_PRNG__basic_09");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_10()).runTest("CWE336_Same_Seed_in_PRNG__basic_10");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_11()).runTest("CWE336_Same_Seed_in_PRNG__basic_11");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_12()).runTest("CWE336_Same_Seed_in_PRNG__basic_12");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_13()).runTest("CWE336_Same_Seed_in_PRNG__basic_13");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_14()).runTest("CWE336_Same_Seed_in_PRNG__basic_14");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_15()).runTest("CWE336_Same_Seed_in_PRNG__basic_15");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_16()).runTest("CWE336_Same_Seed_in_PRNG__basic_16");
			(new testcases.CWE336_Same_Seed_in_PRNG.CWE336_Same_Seed_in_PRNG__basic_17()).runTest("CWE336_Same_Seed_in_PRNG__basic_17");
			/* END-AUTOGENERATED-JAVA-TESTS-3 */
}

private static void runTestCWE4() {
/* BEGIN-AUTOGENERATED-JAVA-TESTS-4 */

			/* END-AUTOGENERATED-JAVA-TESTS-4 */
}

private static void runTestCWE5() {
/* BEGIN-AUTOGENERATED-JAVA-TESTS-5 */

			/* END-AUTOGENERATED-JAVA-TESTS-5 */
}

private static void runTestCWE6() {
/* BEGIN-AUTOGENERATED-JAVA-TESTS-6 */

			/* END-AUTOGENERATED-JAVA-TESTS-6 */
}

private static void runTestCWE7() {
/* BEGIN-AUTOGENERATED-JAVA-TESTS-7 */

			/*


gares más peligrosos de Azeroth encontrarás textos, aquellos de tiempos antiguos, que contienen enseñanzas olvidadas hace mucho. Encuéntralos y con un poco de oro de tu parte, puedo ponerte en el camino correcto para desbloquear nuevas estrategias de batalla para ti.",
    ["O"] = "Preséntale a Sakgoth un Texto de Guerra Antiguo y 250 de oro para obtener acceso al conocimiento de las artes marciales. Te espera en la Isla Fray en los Baldíos.",
    ["T"] = "Maestría en Ballestas",
  },
  [41528] = {
    ["D"] = "<El pesado libro es un testimonio de la devoción rigurosa del Maestro Mathias al arte de la guerra. Solo intentar obtener una visión general hojeando sus páginas te deja una expresión abrumadora. Se puede deducir una historia detallada de la invención y refinamiento de la ballesta, pero sientes que la verdadera esencia y conexiones de todo ello te eluden. Como debes devolver el libro a Nora de todos modos, quizás ella pueda ayudarte a comprenderlo mejor.>",
    ["O"] = "Lleva el libro Maestría de Ballestas a Nora Steamsight en la Isla Fray.",
    ["T"] = "Maestría en Ballestas",
  },
  [41529] = {
    ["D"] = "Puede que ya hayas leído sobre ellos en el libro anterior, pero hay tres capítulos dedicados a los logros de la familia Willey y sus avances en el desarrollo de ballestas. Ningún otro fabricante en la historia reciente ha perfeccionado la creación de ballestas como ellos. Anteriormente al servicio del Rey Tereneas II de Lordaeron, cayeron víctimas de la cruzada de su hijo y pronto fueron olvidados. Un legado de generaciones, borrado en un instante. Al menos eso asumimos, con el surgimiento de la Cruzada Escarlata, el nombre Willey resurgió. Ahora un general dentro de dicha organización, comanda su artillería, utilizando el conocimiento de innumerables generaciones antes de él.$B$BEl Maestro Mathias mostró interés en una de las ballestas de su familia, pero nunca encontró la manera de conseguir una, hasta ahora. Willey está defendiendo el Bastión Escarlata contra las hordas no muertas de Stratholme. Busca su armería y encuentra una ballesta de la familia Willey, una vez que la tengas, tráesela directamente a Mathias!",
    ["O"] = "Preséntale a Mathias Corazón Brillante en la Isla Fray una ballesta de la familia Willey.",
    ["T"] = "Cruzando la Línea",
  },
  [41530] = {
    ["D"] = "Ahora dime: ¿Cómo se siente ser considerado digno por el maestro? Cuando él me eligió como su aprendiz, fue el mayor honor que he sentido, seguramente tú sientes lo mismo.$B$BSi el maestro desea compartir su conocimiento contigo, puedo ayudarte con eso - por un precio, por supuesto. Él puede ser benevolente, pero no lo suficientemente tonto como para actuar por caridad, tienes que contribuir con tu parte del trabajo también. Ocultos en los lugares más peligrosos de Azeroth encontrarás textos, aquellos de tiempos antiguos, que contienen enseñanzas olvidadas hace mucho. Encuéntralos y con un poco de oro de tu parte, puedo ponerte en el camino correcto para desbloquear nuevas estrategias de batalla para ti.",
    ["O"] = "Preséntale a Sakgoth un Text


32h64l.7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"],plug:[384,512,[128268],"f1e6","M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8C297 398 352 333.4 352 256V224c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"],"chevron-up":[512,512,[],"f077","M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"],"hand-spock":[576,512,[128406],"f259","M246.9 23.7C242.3 6.6 224.8-3.5 207.7 1.1s-27.2 22.1-22.6 39.2L238 237.8c2.5 9.2-4.5 18.2-14 18.2c-6.4 0-12-4.2-13.9-10.3L166.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L99.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L156.8 448c43.1 41.1 100.4 64 160 64h10.9 8.2c.1 0 .1-.1 .1-.1s.1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L443.5 247.1c-1.6 5.3-6.4 8.9-12 8.9c-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-3


se for more details.
//
//  You should have received a copy of the GNU Lesser General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

using System;
using System.Threading.Tasks;
using Remora.Commands.Attributes;
using Remora.Commands.Groups;
using Remora.Results;

#pragma warning disable CS1591, SA1600, SA1402, SA1602

namespace Remora.Discord.Commands.Tests.Data.Valid;

public class GroupWithEnumParameterWithDescriptionOverrides : CommandGroup
{
    [Command("description-enum")]
    public Task<Result> CommandWithDescriptionEnum(DescriptionEnum value)
    {
        throw new NotImplementedException();
    }
}


import pandas as pd

data = {'이름' : ['Kim', 'Park', 'Lee', 'Ho'],
        '국어' : [90, 58, 88, 100],
        '영어' : [100, 60, 80, 70],
        '수학' : [55, 65, 76, 88] }
df = pd.DataFrame(data)

print("1> --------------------------------------")
print("국어 평균 : ", df['국어'].mean(), end="\n\n")
print("국어 중간 : ", df['국어'].median(), end="\n\n")
print("국어 최소 : ", df['국어'].min(), end="\n\n")
print("국어 최대 : ", df['국어'].max(), end="\n\n")

print("2> --------------------------------------")
print("Kim 총점 : ", df.iloc[0, 1:4].sum(), end="\n\n")
print("Kom 평균 : ", df.iloc[0, 1:4].mean(), end="\n\n")

print("3> --------------------------------------")
print("수학 4분위 \n", df['수학'].quantile([0.25,0.5,0.75]), end="\n\n")
print("수학 분산 : ", df['수학'].var(), end="\n\n")
print("수학 표준편차 : ", df['수학'].std(), end="\n\n")


n.tis -Technical Inspection and Safety commission
cern.training -Information on courses organized by education service
cern.ua1 -Information on UA1
cern.ua2 -Information on UA2
cern.ultrix -ULTRIX-related news at CERN
cern.unix -General Unix-related matters
cern.us -Information on US
cern.vaxmanagers -Topics for CERN VAX System Managers
cern.vaxusers -Aliased to cern.vms
cern.vme -VME-bus matters
cern.vmnews -Relayed VM news
cern.vms -Relayed VMS news
cern.vox_populi -Aliased to cern.voxpop
cern.voxpop -Vox Populi, letters to the CNL editor
cern.vxcern -Information of the VXCERN (VXCRNA/B/Z) cluster
cern.vxeng -Information of the VXENG cluster
cern.www.announce -World-Wide Web product announcements
cern.www.talk -World-Wide Web discussion list
cern.xenews -Information on XENEWS
cern.xn -WA77 and WA85
cern.xsoft -Cross-software at CERN
cern.yenews -Information on YENEWS
<title>WAIS indexes by net domain</title>

WAIS indexes by net domain

Generated automatically at CERN from the TMC directory of servers.
See also: by index name,
by Subject.

quake

matrix_news,

ariel.its.unimelb.EDU.AU

unimelb-research,

wais.wu-wien.ac.at

cerro-l,
<a href=http://info.cern.ch:8001/wais.wu-wien.ac.at:210/


"""
.. _surface_point_picking_example:

Picking a Point on the Surface of a Mesh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This example demonstrates how to pick meshes using
:func:`enable_surface_point_picking() <pyvista.Plotter.enable_surface_point_picking>`.

This allows you to pick points on the surface of a mesh.

"""

from __future__ import annotations

import pyvista as pv

# sphinx_gallery_start_ignore
# picking does not work on interactive examples
PYVISTA_GALLERY_FORCE_STATIC_IN_DOCUMENT = True
# sphinx_gallery_end_ignore

# %%
# Create a mesh and enable picking using the default settings.

cube = pv.Cube()

pl = pv.Plotter()
pl.add_mesh(cube, show_edges=True)
pl.enable_surface_point_picking()
pl.show()

# %%
# Enable a callback that creates a cube at the right-clicked point and add a
# label at the point as well it.

def callback(point):
    """Create a cube and a label at the click point."""
    mesh = pv.Cube(center=point, x_length=0.05, y_length=0.05, z_length=0.05)
    pl.add_mesh(mesh, style='wireframe', color='r')
    pl.add_point_labels(point, [f'{point[0]:.2f}, {point[1]:.2f}, {point[2]:.2f}'])

pl = pv.Plotter()
pl.add_mesh(cube, show_edges=True)
pl.enable_surface_point_picking(callback=callback, show_point=False)
pl.show()
# %%
# .. tags:: plot


== Tone.TimelineSignal.Type.Target) {
      var previous = this._events.getEventBefore(before.time);
      var previouVal;
      if (previous === null) {
        previouVal = this._initial;
      } else {
        previouVal = previous.value;
      }
      value = this._exponentialApproach(before.time, previouVal, before.value, before.constant, time);
    } else if (after === null) {
      value = before.value;
    } else if (after.type === Tone.TimelineSignal.Type.Linear) {
      value = this._linearInterpolate(before.time, before.value, after.time, after.value, time);
    } else if (after.type === Tone.TimelineSignal.Type.Exponential) {
      value = this._exponentialInterpolate(before.time, before.value, after.time, after.value, time);
    } else {
      value = before.value;
    }
    return value;
  };
  Tone.TimelineSignal.prototype.connect = Tone.SignalBase.prototype.connect;
  Tone.TimelineSignal.prototype._exponentialApproach = function (t0, v0, v1, timeConstant, t) {
    return v1 + (v0 - v1) * Math.exp(-(t - t0) / timeConstant);
  };
  Tone.TimelineSignal.prototype._linearInterpolate = function (t0, v0, t1, v1, t) {
    return v0 + (v1 - v0) * ((t - t0) / (t1 - t0));
  };
  Tone.TimelineSignal.prototype._exponentialInterpolate = function (t0, v0, t1, v1, t) {
    v0 = Math.max(this._minOutput, v0);
    return v0 * Math.pow(v1 / v0, (t - t0) / (t1 - t0));
  };
  Tone.TimelineSignal.prototype.dispose = function () {
    Tone.Signal.prototype.dispose.call(this);
    Tone.Param.prototype.dispose.call(this);
    this._events.dispose();
    this._events = null;
  };
  return Tone.TimelineSignal;
}(Tone_core_Tone, Tone_signal_Signal);
var env;
env = function () {
  'use strict';
  var p5sound = master;
  var Add = Tone_signal_Add;
  var Mult = Tone_signal_Multiply;
  var Scale = Tone_signal_Scale;
  var TimelineSignal = Tone_signal_TimelineSignal;
  var Tone = Tone_core_Tone;
  Tone.setContext(p5sound.audiocontext);
  /**
   *
Envelopes are pre-defined amplitude distribution over time.
   *  Typically, envelopes are used to control the output volume
   *  of an object, a series of fades referred to as Attack, Decay,
   *  Sustain and Release (
   *  ADSR
   *  ). Envelopes can also control other Web Audio Parameters—for example, a p5.Env can
   *  control an Oscillator's frequency like this: osc.freq(env).

   *
Use setRange to change the attack/release level.
   *  Use setADSR to change attackTime, decayTime, sustainPercent and releaseTime.

   *
Use the play method to play the entire envelope,
   *  the ramp method for a pingable trigger,
   *  or triggerAttack/
   *  trigger


4f1}.custom-control-input-warning:checked~.custom-control-label::before{border-color:#ffc107;background-color:#ffc107}.custom-control-input-warning.custom-control-input-outline:checked[type=checkbox]~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23ffc107' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")!important}.custom-control-input-warning.custom-control-input-outline:checked[type=radio]~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23ffc107'/%3E%3C/svg%3E")!important}.custom-control-input-warning:focus~.custom-control-label::before{box-shadow:inset 0 0 0 transparent,0 0 0 .2rem rgba(255,193,7,.25)}.custom-control-input-warning:focus:not(:checked)~.custom-control-label::before{border-color:#ffe187}.custom-control-input-warning:not(:disabled):active~.custom-control-label::before{background-color:#ffeeba;border-color:#ffeeba}.custom-control-input-danger:checked~.custom-control-label::before{border-color:#dc3545;background-color:#dc3545}.custom-control-input-danger.custom-control-input-outline:checked[type=checkbox]~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23dc3545' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")!important}.custom-control-input-danger.custom-control-input-outline:checked[type=radio]~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23dc3545'/%3E%3C/svg%3E")!important}.custom-control-input-danger:focus~.custom-control-label::before{box-shadow:inset 0 0 0 transparent,0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input-danger:focus:not(:checked)~.custom-control-label::before{border-color:#efa2a9}.custom-control-input-danger:not(:disabled):active~.custom-control-label::before{background-color:#f6cdd1;border-color:#f6cdd1}.custom-control-input-light:checked~.custom-control-label::before{border-color:#f8f9fa;background-color:#f8f9fa}.custom-control-input-light.custom-control-input-outline:checked[type=checkbox]~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f8f9fa' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%


()?.onSurfaceHigh,
            HMSPrebuiltTheme.getDefaults().onsurface_high_emp
        )
    )
    streamEndedSubtitle.setTextColor(
        getColorOrDefault(
            HMSPrebuiltTheme.getColours()?.onSurfaceMedium,
            HMSPrebuiltTheme.getDefaults().onsurface_med_emp
        )
    )
}package com.a10miaomiao.bilimiao.widget.scaffold.behavior

import android.content.Context
import android.view.View
import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.google.android.material.bottomsheet.BottomSheetBehavior
import kotlin.math.min

class MyBottomSheetBehavior(context: Context)
    : BottomSheetBehavior<View>(context, null) {
    override fun onNestedPreScroll(
        coordinatorLayout: CoordinatorLayout,
        child: View,
        target: View,
        dx: Int,
        dy: Int,
        consumed: IntArray,
        type: Int
    ) {
        // 不处理
//        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type)
    }

    override fun onNestedScroll(
        coordinatorLayout: CoordinatorLayout,
        child: View,
        target: View,
        dxConsumed: Int,
        dyConsumed: Int,
        dxUnconsumed: Int,
        dyUnconsumed: Int,
        type: Int,
        consumed: IntArray
    ) {
        // 消费未消费的滚动
        super.onNestedPreScroll(coordinatorLayout, child, target, dxUnconsumed, dyUnconsumed, consumed, type)
    }
}package com.a10miaomiao.bilimiao.comm.network

object BiliHeaders {
    const val Bearer = "Bearer";
    const val Identify = "identify_v1";
    const val FormUrlEncodedContentType = "application/x-www-form-urlencoded";
    const val JsonContentType = "application/json";
    const val GRPCContentType = "application/grpc";
    const val UserAgent = "User-Agent";
    const val Referer = "Referer";
    const val AppKey = "APP-KEY";
    const val RequestedWith = "X-Requested-With"
    const val BiliMeta = "x-bili-metadata-bin";
    const val Authorization = "authorization";
    const val BiliDevice = "x-bili-device-bin";
    const val BiliNetwork = "x-bili-network-bin";
    const val BiliRestriction = "x-bili-restriction-bin";
    const val BiliLocale = "x-bili-locale-bin";
    const val BiliFawkes = "x-bili-fawkes-req-bin";
    const val BiliMid = "x-bili-mid";
    const val GRPCAcceptEncodingKey = "grpc-accept-encoding";
    const val GRPCAcceptEncodingValue = "identity,deflate,gzip";
    const val GRPCTimeOutKey = "grpc-timeout";
    const val GRPCTimeOutValue = "20100m";
    const val Envoriment = "env";
    const val TransferEncodingKey = "Transfer-Encoding";
    const val TransferEncodingValue = "chunked";
    const val TEKey = "TE";
    const val TEValue = "trailers";
    const val Buvid = "buvid"

    // content-encoding
    const val GRPCEncoding = "grpc-encoding"
    const val GRPCEncodingGZIP = "gzip"
}package com.a10miaomiao.bilimiao.comm.network

import android.os.Build
import com.a10miaomiao.bilimiao.comm.BilimiaoCommApp
import java.io.UnsupportedEncodingException
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.*

/**
 * Created by 10喵喵 on 2017/4/9.
 */
object ApiHelper {

    const val BUILD_VERSION = 1450000
    const val BILI_APP_VERSION = "1.45.0"


from textual import on
from textual.app import ComposeResult
from textual.containers import HorizontalGroup, Vertical, VerticalGroup
from textual.widgets import Button

from chezmoi_mousse import (
    AreaName,
    CanvasIds,
    NavBtn,
    OperateBtn,
    TabBtn,
    Tcss,
)

__all__ = ["NavButtonsVertical", "OperateBtnHorizontal", "TabBtnHorizontal"]

class ButtonsHorizontalBase(HorizontalGroup):

    def __init__(
        self,
        *,
        canvas_ids: CanvasIds,
        buttons: tuple[TabBtn, ...] | tuple[OperateBtn, ...],
        area: AreaName,
    ) -> None:
        self.buttons = buttons
        self.area: AreaName = area
        self.canvas_ids: CanvasIds = canvas_ids
        super().__init__(id=self.canvas_ids.buttons_horizontal_id(self.area))

    def compose(self) -> ComposeResult:
        for button_enum in self.buttons:
            with Vertical(classes=Tcss.single_button_vertical.name):
                yield Button(
                    label=button_enum.value,
                    id=self.canvas_ids.button_id(btn=button_enum),
                )

class NavButtonsVertical(VerticalGroup):

    def __init__(
        self, *, canvas_ids: CanvasIds, buttons: tuple[NavBtn, ...]
    ) -> None:
        self.buttons: tuple[NavBtn, ...] = buttons
        self.canvas_ids: CanvasIds = canvas_ids
        super().__init__()

    def compose(self) -> ComposeResult:
        for button_enum in self.buttons:
            yield Button(
                label=button_enum.value,
                variant="primary",
                flat=True,
                classes=Tcss.nav_button.name,
                id=self.canvas_ids.button_id(btn=button_enum),
            )

class OperateBtnHorizontal(ButtonsHorizontalBase):
    def __init__(
        self, *, canvas_ids: CanvasIds, buttons: tuple[OperateBtn, ...]
    ):
        super().__init__(
            canvas_ids=canvas_ids, buttons=buttons, area=AreaName.bottom
        )

    def on_mount(self) -> None:
        for btn in self.query(Button):
            btn.add_class(Tcss.operate_button.name)
        for btn in self.query(Button):
            btn.disabled = True

class TabBtnHorizontal(ButtonsHorizontalBase):
    def __init__(
        self,
        *,
        canvas_ids: CanvasIds,
        buttons: tuple[TabBtn, ...],
        area: AreaName,
    ):
        super().__init__(canvas_ids=canvas_ids, buttons=buttons, area=area)

    def on_mount(self) -> None:
        self.query(Button).add_class(Tcss.tab_button.name)
        self.query_one(
            self.canvas_ids.button_id("#", btn=self.buttons[0])
        ).add_class(Tcss.last_clicked.name)

    @on(Button.Pressed, f".{Tcss.tab_button.name}")
    def update_tab_btn_last_clicked(self, event: Button.Pressed) -> None:
        self.query(Button).remove_class(Tcss.last_clicked.name)
        event.button.add_class(Tcss.last_clicked.name)


spatchedKeyDowns[1])
    }

    @Test
    fun fakeCtrlPress() {
        sendKeyWithMeta(KeyEvent.KEYCODE_A, KeyEvent.META_CTRL_ON)

        assertEquals(XKeySym.XK_Control_L, dispatchedKeyDowns[0])
        assertEquals(XKeySym.XK_a, dispatchedKeyDowns[1])
    }

    @Test
    fun fakeAltPress() {
        sendKeyWithMeta(KeyEvent.KEYCODE_A, KeyEvent.META_ALT_ON)

        assertEquals(XKeySym.XK_Alt_L, dispatchedKeyDowns[0])
        assertEquals(XKeySym.XK_a, dispatchedKeyDowns[1])
    }

    @Test
    fun observerTest() {
        var observedEvent: KeyEvent? = null
        keyHandler.processedEventObserver = { observedEvent = it }
        keyHandler.onKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_F1))

        assertNotNull(observedEvent)
        assertEquals(KeyEvent.KEYCODE_F1, observedEvent?.keyCode)
    }

    /**************************************************************************/
    private val ACCENT_TILDE = 0x02DC
    private val ACCENT_CIRCUMFLEX = 0x02C6

    @Test
    fun diacriticTest_accent() {
        sendAccent(ACCENT_TILDE)
        assertTrue(dispatchedKeyDowns.isEmpty())
    }

    @Test
    fun diacriticTest_twoAccents() {
        sendAccent(ACCENT_TILDE)
        sendAccent(ACCENT_CIRCUMFLEX)
        assertTrue(dispatchedKeyDowns.isEmpty())
    }

    @Test
    fun diacriticTest_sameAccentTwice() {
        sendAccent(ACCENT_TILDE)
        sendAccent(ACCENT_TILDE)
        assertEquals(ACCENT_TILDE + 0x1000000, dispatchedKeyDowns.firstOrNull())
    }

    @Test
    fun diacriticTest_charAfterAccent() {
        sendAccent(ACCENT_TILDE)
        sendKey(KeyEvent.KEYCODE_A, 'a')
        assertEquals('ã'.code, dispatchedKeyDowns.firstOrNull())
    }

    @Test
    fun diacriticTest_charWhileAccentIsDown() {
        sendDown(0, ACCENT_TILDE or KeyCharacterMap.COMBINING_ACCENT)
        sendKey(KeyEvent.KEYCODE_A, 'a')
        sendUp(0, ACCENT_TILDE or KeyCharacterMap.COMBINING_ACCENT)
        assertEquals('ã'.code, dispatchedKeyDowns.firstOrNull())
    }

    @Test
    fun diacriticTest_interMixedUpDowns1() {
        // Here we test key up/down events for accents and characters mixed in
        // non-sequential order. This case can happen when you type quickly.

        sendDown(KeyEvent.KEYCODE_A, 'a'.code)
        sendDown(0, ACCENT_TILDE or KeyCharacterMap.COMBINING_ACCENT)
        sendUp(KeyEvent.KEYCODE_A, 'a'.code)
        sendUp(0, ACCENT_TILDE or KeyCharacterMap.COMBINING_ACCENT)
        sendDown(KeyEvent.KEYCODE_A, 'a'.code)
        sendUp(KeyEvent.KEYCODE_A, 'a'.code)

        assertEquals('a'.code, dispatchedKeyDowns[0]) // First should be normal, as accent was pressed later
        assertEquals('ã'.code, dispatchedKeyDowns[1]) // Second should be accented
    }

    @Test
    fun diacriticTest_interMixedUpDowns2() {
        // Another variation of intermixed up/downs

        sendDown(KeyEvent.KEYCODE_A, 'a'.code)
        sendDown(0, ACCENT_TILDE or KeyCharacterMap.COMBINING_ACCENT)
        sendUp(KeyEvent.KEYCODE_A, 'a'.code)
        sendDown(KeyEvent.KEYCODE_A, 'a'.code)
        sendUp(KeyEvent.KEYCODE_A, 'a'.code)
        sendUp(0, ACCENT_TILDE or Key


 Typography(
    defaultFontFamily = if (Build.MANUFACTURER.equals("Google", ignoreCase = true)) {
        FontFamily(Font(R.font.google_sans, FontWeight.Normal))
    } else {
        FontFamily.Default
    }
)

@Composable
fun MirPayTheme(block: @Composable () -> Unit) {
    MaterialTheme(
        colors = MirPayColors,
        typography = MirPayFonts
    ) {
        block()
    }
}package com.theeasiestway.opusapp.mic

import android.media.*
import android.media.audiofx.AutomaticGainControl
import android.media.audiofx.NoiseSuppressor
import android.util.Log

//
// Created by Loboda Alexey on 21.05.2020.
//

object ControllerAudio {

    private const val TAG = "ControllerAudio"
    private var frameSize: Int = -1
    private lateinit var recorder: AudioRecord
    private var micEnabled = false
    private lateinit var track: AudioTrack
    private var trackReady = false
    private var noiseSuppressor: NoiseSuppressor? = null
    private var automaticGainControl: AutomaticGainControl? = null

    //
    // Record
    //

    fun initRecorder(sampleRate: Int, frameSize: Int, isMono: Boolean) {
        val bufferSize = AudioRecord.getMinBufferSize(sampleRate, if (isMono) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)
        for (i in 0..5) {
            try {
                recorder = AudioRecord(
                    MediaRecorder.AudioSource.MIC,
                    sampleRate,
                    if (isMono) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO,
                    AudioFormat.ENCODING_PCM_16BIT,
                    bufferSize
                )

                ControllerAudio.frameSize = frameSize

                if (NoiseSuppressor.isAvailable()) {
                    try {
                        noiseSuppressor = NoiseSuppressor.create(recorder.audioSessionId)
                        if (noiseSuppressor != null) noiseSuppressor!!.enabled = true
                    } catch (e: Exception) { Log.e(TAG, "[initRecorder] unable to init noise suppressor: $e") }
                }

                if (AutomaticGainControl.isAvailable()) {
                    try {
                        automaticGainControl = AutomaticGainControl.create(recorder.audioSessionId)
                        if (automaticGainControl != null) automaticGainControl!!.enabled = true
                    } catch (e: Exception) { Log.e(TAG, "[initRecorder] unable to init automatic gain control: $e") }
                }
                onMicStateChange(true)
                break
            } catch (e: Exception) { Log.e(TAG, "[initRecorder] error: $e") }
        }
    }

    fun startRecord() {
        if (recorder.state == AudioRecord.STATE_INITIALIZED) {
            recorder.startRecording()
            micEnabled = true
        }
    }

    fun getFrame(): ByteArray? {
        val frame = ByteArray(frameSize)
        var offset = 0
        var remained = frame.size
        while (remained > 0) {
            val read = recorder.read(frame, offset, remained)
            offset += read
            remained -= read
        }
        if (remained <= 0) return frame
        return null
    }

    fun getFrameShort(): ShortArray? {
        val frame = ShortArray(frameSize)
        var offset = 0
        var remained = frame.size
        while (remained > 0) {
            val read = recorder.read(frame, offset, remained)
            offset += read
            remained -= read
        }
        if (remained <= 0) return frame
        return null
    }

    fun onMicStateChange(micEnabled: Boolean) {
        Co


/widget/refreshable_state.dart";
import "package:inventree/widget/snacks.dart";
import "package:inventree/widget/company/supplier_part_list.dart";

/*
 * Widget for displaying detail view of a single Company instance
 */
class CompanyDetailWidget extends StatefulWidget {
  const CompanyDetailWidget(this.company, {Key? key}) : super(key: key);

  final InvenTreeCompany company;

  @override
  _CompanyDetailState createState() => _CompanyDetailState();
}

class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
  _CompanyDetailState();

  int supplierPartCount = 0;

  int outstandingPurchaseOrders = 0;
  int outstandingSalesOrders = 0;

  int attachmentCount = 0;

  @override
  String getAppBarTitle() {
    String title = L10().company;

    if (widget.company.name.isNotEmpty) {
      title += " -  ${widget.company.name}";
    }

    return title;
  }

  @override
  List<Widget> appBarActions(BuildContext context) {
    List<Widget> actions = [];

    if (InvenTreeCompany().canEdit) {
      actions.add(
        IconButton(
          icon: Icon(TablerIcons.edit),
          tooltip: L10().companyEdit,
          onPressed: () {
            editCompany(context);
          },
        ),
      );
    }

    return actions;
  }

  @override
  List<SpeedDialChild> actionButtons(BuildContext context) {
    List<SpeedDialChild> actions = [];

    if (widget.company.isCustomer && InvenTreeSalesOrder().canCreate) {
      actions.add(
        SpeedDialChild(
          child: Icon(TablerIcons.truck),
          label: L10().salesOrderCreate,
          onTap: () async {
            _createSalesOrder(context);
          },
        ),
      );
    }

    if (widget.company.isSupplier && InvenTreePurchaseOrder().canCreate) {
      actions.add(
        SpeedDialChild(
          child: Icon(TablerIcons.shopping_cart),
          label: L10().purchaseOrderCreate,
          onTap: () async {
            _createPurchaseOrder(context);
          },
        ),
      );
    }

    return actions;
  }

  Future<void> _createSalesOrder(BuildContext context) async {
    var fields = InvenTreeSalesOrder().formFields();

    // Cannot set contact until company is locked in
    fields.remove("contact");

    fields["customer"]?["value"] = widget.company.pk;

    InvenTreeSalesOrder().createForm(
      context,
      L10().salesOrderCreate,
      fields: fields,
      onSuccess: (result) async {
        Map<String, dynamic> data = result as Map<String, dynamic>;

        if (data.containsKey("pk")) {
          var order = InvenTreeSalesOrder.fromJson(data);
          order.goToDetailPage(context);
        }
      },
    );
  }

  Future<void> _createPurchaseOrder(BuildContext context) async {
    var fields = InvenTreePurchaseOrder().formFields();

    // Cannot set contact until company is locked in
    fields.remove("contact");

    fields["supplier"]?["value"] = widget.company.pk;

    InvenTreePurchaseOrder().createForm(
      context,
      L10().purchaseOrderCreate,
      fields: fields,
      onSuccess: (result) async {
        Map<String, dynamic> data = result as Map<String, dynamic>;

        if (data.containsKey("pk")) {
          var order = InvenTreePurchaseOrder.fromJson(data);
          order.goToDetailPage(context);
        }
      },
    );
  }

  @override
  Future<void> request(BuildContext context) async {
    final bool result = await widget.company.reload();

    if (!result || wi


/*
 * include/asm-v850/v850e_timer_d.c -- `Timer D' component often used
 *	with V850E CPUs
 *
 *  Copyright (C) 2001,02,03  NEC Electronics Corporation
 *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
 *
 * This file is subject to the terms and conditions of the GNU General
 * Public License.  See the file COPYING in the main directory of this
 * archive for more details.
 *
 * Written by Miles Bader <miles@gnu.org>
 */

#include <linux/kernel.h>

#include <asm/v850e_utils.h>
#include <asm/v850e_timer_d.h>

/* Start interval timer TIMER (0-3).  The timer will issue the
   corresponding INTCMD interrupt RATE times per second.
   This function does not enable the interrupt.  */
void v850e_timer_d_configure (unsigned timer, unsigned rate)
{
	unsigned divlog2, count;

	/* Calculate params for timer.  */
	if (! calc_counter_params (
		    V850E_TIMER_D_BASE_FREQ, rate,
		    V850E_TIMER_D_TMCD_CS_MIN, V850E_TIMER_D_TMCD_CS_MAX, 16,
		    &divlog2, &count))
		printk (KERN_WARNING
			"Cannot find interval timer %d setting suitable"
			" for rate of %dHz.\n"
			"Using rate of %dHz instead.\n",
			timer, rate,
			(V850E_TIMER_D_BASE_FREQ >> divlog2) >> 16);

	/* Do the actual hardware timer initialization:  */

	/* Enable timer.  */
	V850E_TIMER_D_TMCD(timer) = V850E_TIMER_D_TMCD_CAE;
	/* Set clock divider.  */
	V850E_TIMER_D_TMCD(timer)
		= V850E_TIMER_D_TMCD_CAE
		| V850E_TIMER_D_TMCD_CS(divlog2);
	/* Set timer compare register.  */
	V850E_TIMER_D_CMD(timer) = count;
	/* Start counting.  */
	V850E_TIMER_D_TMCD(timer)
		= V850E_TIMER_D_TMCD_CAE
		| V850E_TIMER_D_TMCD_CS(divlog2)
		| V850E_TIMER_D_TMCD_CE;
}


local ipairs = ipairs
local XUiGridEchelonExp = require("XUi/XUiBfrt/XUiGridEchelonExp")
local XUiBfrtPostWarCount = XLuaUiManager.Register(XLuaUi, "UiBfrtPostWarCount")
local ANIMATION_OPEN = "AniBfrtPostWarCountBegin"

function XUiBfrtPostWarCount:OnAwake()
    self:InitAutoScript()
end

function XUiBfrtPostWarCount:OnStart(data)
    self:InitComponentState()
    self:ResetDataInfo()
    self:UpdateDataInfo(data)
    self.GameObject:PlayLegacyAnimation(ANIMATION_OPEN)
end

function XUiBfrtPostWarCount:OnNotify(evt, ...)

    local args = {...}

    if evt == CS.XEventId.EVENT_UI_ALLOWOPERATE and args[1] == self.Ui then
        XDataCenter.FunctionEventManager.UnLockFunctionEvent()
    end
end

function XUiBfrtPostWarCount:OnGetEvents()
    return {CS.XEventId.EVENT_UI_ALLOWOPERATE}
end

function XUiBfrtPostWarCount:InitComponentState()
    self.GridEchelonExp.gameObject:SetActive(false)
end

function XUiBfrtPostWarCount:ResetDataInfo()
    self.RewardGoodsList = {}
    self.GroupId = nil

    self.GridReward.gameObject:SetActive(false)
    self.GridEchelonExp.gameObject:SetActive(false)
end

function XUiBfrtPostWarCount:UpdateDataInfo(data)
    self.RewardGoodsList = data.RewardGoodsList
    self.GroupId = XDataCenter.BfrtManager.GetGroupIdByStageId(data.StageId)

    self:UpdatePanelRewardContent()
    self:UpdatePanelEchelonExpContent()
    self:UpdatePanelPlayer()
end

-- auto
-- Automatic generation of code, forbid to edit
function XUiBfrtPostWarCount:InitAutoScript()
    self:AutoInitUi()
    self.SpecialSoundMap = {}
    self:AutoAddListener()
end

function XUiBfrtPostWarCount:AutoInitUi()
    self.PanelRewardContent = self.Transform:Find("SafeAreaContentPane/PaneReward/RewardList/Viewport/PanelRewardContent")
    self.GridReward = self.Transform:Find("SafeAreaContentPane/PaneReward/RewardList/Viewport/PanelRewardContent/GridReward")
    self.PanelEchelonExpContent = self.Transform:Find("SafeAreaContentPane/PaneEchelonExp/EchelonExpList/Viewport/PanelEchelonExpContent")
    self.GridEchelonExp = self.Transform:Find("SafeAreaContentPane/PaneEchelonExp/EchelonExpList/Viewport/PanelEchelonExpContent/GridEchelonExp")
    self.BtnExit = self.Transform:Find("SafeAreaContentPane/BtnExit"):GetComponent("Button")
    self.BtnClose = self.Transform:Find("SafeAreaContentPane/BtnClose"):GetComponent("Button")
    self.PanelPlayer = self.Transform:Find("SafeAreaContentPane/PanelPlayer")
    self.ImgExp = self.Transform:Find("SafeAreaContentPane/PanelPlayer/ImgExp"):GetComponent("Image")
    self.TxtAddExp = self.Transform:Find("SafeAreaContentPane/PanelPlayer/TxtAddExp"):GetComponent("Text")
    self.TxtLevelA = self.Transform:Find("SafeAreaContentPane/PanelPlayer/TxtLevel"):GetComponent("Text")
end

function XUiBfrtPostWarCount:GetAutoKey(uiNode, eventName)
    if not uiNode then
        return
    end
    return eventName .. uiNode:GetHashCode()
end

function XUiBfrtPostWarCount:RegisterListener(uiNode, eventName, func)
    local key = self:GetAutoKey(uiNode, eventName)
    if not key then
        return
    end
    local list


, &attr_name);
        if ( !ok )
          break;
        // Store the attribute
        set_idcv_attr(idc_var, attr_name.c_str(), v);
      }
      if ( !ok )
        break;
    }
    return ok ? CIP_OK : CIP_FAILED;
  }
  // Dictionary: we convert to an IDC object
  else if ( PyDict_Check(py_var.o) )
  {
    // Create an empty IDC object
    idcv_object(idc_var);

    // Get the dict.items() list
    newref_t py_items(PyDict_Items(py_var.o));

    // Get the size of the list
    qstring key_name;
    bool ok = true;
    Py_ssize_t size = PySequence_Size(py_items.o);
    for ( Py_ssize_t i=0; i < size; i++ )
    {
      // Get item[i] -> (key, value)
      PyObject *py_item = PyList_GetItem(py_items.o, i);

      // Extract key/value
      newref_t key(PySequence_GetItem(py_item, 0));
      newref_t val(PySequence_GetItem(py_item, 1));

      // Get key's string representation
      PyW_ObjectToString(key.o, &key_name);

      // Convert the attribute into an IDC value
      idc_value_t v;
      ok = pyvar_to_idcvar1(val, &v, gvar_sn, visited) >= CIP_OK;
      if ( ok )
      {
        // Store the attribute
        set_idcv_attr(idc_var, key_name.c_str(), v);
      }
      if ( !ok )
        break;
    }
    return ok ? CIP_OK : CIP_FAILED;
  }
  // Possible function?
  else if ( PyCallable_Check(py_var.o) )
  {
    idc_var->clear();
    idc_var->vtype = VT_FUNC;
    idc_var->funcidx = -1; // Does not apply
    return CIP_OK;
  }
  // Objects:
  // - pyidc_cvt objects: int64, byref, opaque
  // - other python objects
  else
  {
    // Get the type
    int cvt_id = get_pyidc_cvt_type(py_var.o);
    switch ( cvt_id )
    {
      //
      // INT64
      //
      case PY_ICID_INT64:
        {
          // Get the value attribute
          ref_t attr(PyW_TryGetAttrString(py_var.o, S_PY_IDCCVT_VALUE_ATTR));
          if ( attr == nullptr )
            return false;
          idc_var->set_int64(PyLong_AsLongLong(attr.o));
          return CIP_OK;
        }
      //
      // BYREF
      //
      case PY_ICID_BYREF:
        {
          // BYREF always require this parameter
          if ( gvar_sn == nullptr )
            return CIP_FAILED;

          // Get the value attribute
          ref_t attr(PyW_TryGetAttrString(py_var.o, S_PY_IDCCVT_VALUE_ATTR));
          if ( attr == nullptr )
            return CIP_FAILED;

          // Create a global variable
          char buf[MAXSTR];
          qsnprintf(buf, sizeof(buf), S_PY_IDC_GLOBAL_VAR_FMT, *gvar_sn);
          idc_value_t *gvar = add_idc_gvar(buf);
          // Convert the python value into the IDC global variable
          bool ok = pyvar_to_idcvar1(attr, gvar, gvar_sn, visited) >= CIP_OK;
          if ( ok )
          {
            (*gvar_sn)++;
            // Create a reference to this global variable
            create_idcv_ref(idc_var, gvar);
          }
          return ok ? CIP_OK : CIP_FAILED;
        }
      //
      // OPAQUE
      //
      case PY_ICID_OPAQUE:


 0px rgba(0, 0, 0, 0.1)',
            '&:after': {
              content: '""',
              position: 'absolute',
              top: 0,
              height: '100%',
              width: '8px',
              backgroundImage:
                'linear-gradient(rgb(167, 171, 185) 5px, rgb(167, 171, 185) 5px)',
              backgroundSize: '8px 8px',
              backgroundPosition: 'top center',
              backgroundRepeat: 'no-repeat',
              zIndex: 2,
              left: 0
            },
            '&:before': {
              content: '""',
              position: 'absolute',
              top: 0,
              height: '100%',
              width: '8px',
              backgroundImage:
                'linear-gradient(rgb(167, 171, 185) 5px, rgb(167, 171, 185) 5px)',
              backgroundSize: '8px 8px',
              backgroundPosition: 'bottom center',
              backgroundRepeat: 'no-repeat',
              zIndex: 2,
              right: 0
            }
          }}
        >
          <img
            src={gameImage || gameImage1}
            alt="game preview"
            sx={{
              position: 'absolute',
              top: 0,
              bottom: 0,
              left: 0,
              objectFit: 'contain',
              objectPosition: 'center',
              imageRendering: 'pixelated',
              width: '100%',
              height: '100%',
              margin: 0,
              padding: 0,
              background: 'white'
            }}
          />
        </Box> */}
        <Box sx={{ display: 'flex', flex: '60% 40%', flexWrap: 'wrap' }}>
          <Text
            as="h3"
            sx={{
              textTransform: 'lowercase',
              textOverflow: 'ellipsis',
              width: '100%',
              overflow: 'hidden',
              color: 'white',
              whiteSpace: 'nowrap',
              margin: '0.8rem 0 0.8rem 0',
              fontSize: '1.4rem',
              fontWeight: '400',
              my: 0,
              lineHeight: '1.4rem'
            }}
          >
            {game?.title}
          </Text>
          <Text
            as="h4"
            sx={{
              fontWeight: '300',
              fontSize: '1.1rem',
              color: 'rgb(151, 166, 187)',
              padding: 0,
              textOverflow: 'ellipsis',
              width: '100%',
              overflow: 'hidden',
              whiteSpace: 'nowrap',
              mt: 0,
              lineHeight: '1rem'
            }}
          >
            by {game?.author}
          </Text>
          <Text
            as="span"
            sx={{
              fontWeight: '300',
              fontSize: '0.8rem',
              color: 'snow',
              padding: 0,
              opacity: 0.3,
              mb: 1
            }}
          >
            <RelativeTime value={game['addedOn']} titleFormat="YYYY-MM-DD" />
          </Text>
        </Box>
      </Box>
    </Box>
  )
}

export default function Sprig({ stars, game, gameImage, gameImage1 }) {
  return (
    <CardModel
      github_link="https://github.com/hackclub/sprig/"
      color="white"
      stars={stars}


ckground.

To ensure that each thread receives the correct parameters (the video file and the model to use), we define a function `run_tracker_in_thread` that accepts these parameters and contains the main tracking loop. This function reads the video frame by frame, runs the tracker, and displays the results.

Two different models are used in this example: `yolov8n.pt` and `yolov8n-seg.pt`, each tracking objects in a different video file. The video files are specified in `video_file1` and `video_file2`.

The `daemon=True` parameter in `threading.Thread` means that these threads will be closed as soon as the main program finishes. We then start the threads with `start()` and use `join()` to make the main thread wait until both tracker threads have finished.

Finally, after all threads have completed their task, the windows displaying the results are closed using `cv2.destroyAllWindows()`.

#### Python

```python
import threading

import cv2
from ultralytics import YOLO

def run_tracker_in_thread(filename, model):
    video = cv2.VideoCapture(filename)
    frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
    for _ in range(frames):
        ret, frame = video.read()
        if ret:
            results = model.track(source=frame, persist=True)
            res_plotted = results[0].plot()
            cv2.imshow("p", res_plotted)
            if cv2.waitKey(1) == ord("q"):
                break

# Load the models
model1 = YOLO("yolov8n.pt")
model2 = YOLO("yolov8n-seg.pt")

# Define the video files for the trackers
video_file1 = "path/to/video1.mp4"
video_file2 = "path/to/video2.mp4"

# Create the tracker threads
tracker_thread1 = threading.Thread(
    target=run_tracker_in_thread, args=(video_file1, model1), daemon=True
)
tracker_thread2 = threading.Thread(
    target=run_tracker_in_thread, args=(video_file2, model2), daemon=True
)

# Start the tracker threads
tracker_thread1.start()
tracker_thread2.start()

# Wait for the tracker threads to finish
tracker_thread1.join()
tracker_thread2.join()

# Clean up and close windows
cv2.destroyAllWindows()
```

This example can easily be extended to handle more video files and models by creating more threads and applying the same methodology.

## Contribute New Trackers

Are you proficient in multi-object tracking and have successfully implemented or adapted a tracking algorithm with Ultralytics YOLO? We invite you to contribute to our Trackers section in [ultralytics/cfg/trackers](https://github.com/ultralytics/ultralytics/tree/main/ultralytics/cfg/trackers)! Your real-world applications and solutions could be invaluable for users working on tracking tasks.

By contributing to this section, you help expand the scope of tracking solutions available within the Ultralytics YOLO framework, adding another layer of functionality and utility for the community.

To initiate your contribution, please refer to our [Contributing Guide](https://docs.ultralytics.com/help/contributing) for comprehensive instructions on submitting a Pull Request (PR) 🛠. We are excited to see what you bring to the table!

Together, let's enhance the tracking capabilities of the Ultralytics YOLO ecosystem 🙏!
# (Advanced) Recursive Alias Type Definitions

A more advanced usage of type aliases includes using recursive self-reference(s) to the alias type in order to define
recursive types. This allows you to define self-similar nested structures of arbitrary (but finite) depth as in the
following example:

```
# TODO(steving) Rewrite this example w/ oneof<int, [IntOrList]> when supported.
alias IntOrList : tuple<boolean, int, [IntOrList]>

print("All of the following values satisfy the type definition for IntOrList:");
var myIntOrList: IntOrList;
myIntOrList = (true, 9, []);
print(myIntOrList); # (true, 9, [])


,
      width = WeakAuras.normalWidth,
      name = L["Limit"],
      min = 0,
      softMax = 20,
      step = 1,
      disabled = function() return not data.useLimit end,
      hidden = function() return data.grow == "CUSTOM" end,
    },
    animate = {
      type = "toggle",
      width = WeakAuras.normalWidth,
      name = L["Animated Expand and Collapse"],
      order = 27
    },
    spacer = {
      type = "description",
      width = WeakAuras.normalWidth,
      name = "",
      order = 27.5
    },
    scale = {
      type = "range",
      control = "WeakAurasSpinBox",
      width = WeakAuras.normalWidth,
      name = L["Group Scale"],
      order = 28,
      min = 0.05,
      softMax = 2,
      max = 10,
      bigStep = 0.05,
      get = function()
        return data.scale or 1
      end,
      set = function(info, v)
        data.scale = data.scale or 1
        local change = 1 - (v/data.scale)
        data.xOffset = data.xOffset/(1-change)
        data.yOffset = data.yOffset/(1-change)
        data.scale = v
        WeakAuras.Add(data);
        OptionsPrivate.ResetMoverSizer();
      end
    },
    alpha = {
      type = "range",
      control = "WeakAurasSpinBox",
      width = WeakAuras.normalWidth,
      name = L["Group Alpha"],
      order = 29,
      min = 0,
      max = 1,
      bigStep = 0.01,
      isPercent = true
    },
    sharedFrameLevel = {
      type = "toggle",
      width = WeakAuras.normalWidth,
      name = L["Flat Framelevels"],
      desc = L["The group and all direct children will share the same base frame level."],
      order = 30,
      set = function(info, v)
        data.sharedFrameLevel = v
        WeakAuras.Add(data)
        for parent in OptionsPrivate.Private.TraverseParents(data) do
          WeakAuras.Add(parent)
        end
      end
    },
    endHeader = {
      type = "header",
      order = 100,
      name = "",
    },
  };

  OptionsPrivate.commonOptions.AddCodeOption(options, data, L["Custom Grow"], "custom_grow", "https://github.com/WeakAuras/WeakAuras2/wiki/Custom-Code-Blocks#grow",
                          2, function() return data.grow ~= "CUSTOM" end, {"customGrow"}, false, { setOnParent = true })
  OptionsPrivate.commonOptions.AddCodeOption(options, data, L["Custom Sort"], "custom_sort", "https://github.com/WeakAuras/WeakAuras2/wiki/Custom-Code-Blocks#custom-sort",
                          21, function() return data.sort ~= "custom" end, {"customSort"}, false, { setOnParent = true })
  OptionsPrivate.commonOptions.AddCodeOption(options, data, L["Custom Anchor"], "custom_anchor_per_unit", "https://github.com/WeakAuras/WeakAuras2/wiki/Custom-Code-Blocks#group-by-frame",
                          1.7, function() return not(data.grow ~= "CUSTOM" and data.useAnchorPerUnit and data.anchorPerUnit == "CUSTOM") end, {"customAnchorPerUnit"}, false, { setOnParent = true })

  local borderHideFunc = function() return data.useAnchorPerUnit end
  local disableSelfPoint = function() return data.grow ~= "CUSTOM" and data.grow ~= "GRID" and not data.useAnchorPerUnit end

  for k, v in pairs(OptionsPrivate.commonOptions.BorderOptions(id, data, nil, borderHideFunc, 70)) do
    options[k] = v
  end

  return {
    dynamicgroup = options,
    position = OptionsPrivate.commonOptions.PositionOptions(id, data, nil,


/*
obs-midi-mg
Copyright (C) 2022-2024 nhielost <nhielost@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>
*/

#ifndef MMG_ACTION_DISPLAY_H
#define MMG_ACTION_DISPLAY_H

#include "../mmg-utils.h"
#include "mmg-number-display.h"
#include "mmg-string-display.h"

class MMGActionDisplay : public QWidget {
	Q_OBJECT

public:
	MMGActionDisplay(QWidget *parent);
	~MMGActionDisplay() { reset(); };

	MMGStringDisplay *stringDisplay(int index) const { return string_fields.at(index); };
	MMGNumberDisplay *numberDisplay(int index) const { return number_fields.at(index); };

	MMGStringDisplay *addNew(MMGUtils::MMGString *storage, const QStringList &bounds = QStringList());
	MMGNumberDisplay *addNew(MMGUtils::MMGNumber *storage);
	void hideAll();

	void setFields(QWidget *widget);
	void reset();

private:
	QScrollArea *scroll_area;
	QWidget *scroll_widget;
	QVBoxLayout *layout;

	QList<MMGStringDisplay *> string_fields;
	QList<MMGNumberDisplay *> number_fields;
	QWidget *fields = nullptr;
};

#endif // MMG_ACTION_DISPLAY_H


ck > span {
	color: #372D2A;
}

div#maximenuck90 ul.maximenuck li.maximenuck ul.maximenuck2 li.maximenuck li:hover > a,
div#maximenuck90 ul.maximenuck2 li.maximenuck li.maximenuck:hover > a,
div#maximenuck90 ul.maximenuck2 li.maximenuck li.maximenuck:hover > span.separator,
div#maximenuck90 ul.maximenuck2 ul.maximenuck2:hover > a,
div#maximenuck90 ul.maximenuck2 ul.maximenuck2 li.maximenuck:hover > span.separator,
div#maximenuck90 ul.maximenuck li ul.maximenuck2 li.maximenuck li.maximenuck.openck > a ,
div#maximenuck90 ul.maximenuck li ul.maximenuck2 li.maximenuck li.maximenuck.clickedck > a {
	color: #bfa69a;
}

div#maximenuck90 ul.maximenuck li.level1.parent ul.maximenuck2 li.maximenuck.nodropdown li.maximenuck > a,
div#maximenuck90 ul.maximenuck li.level1.parent ul.maximenuck2 li.maximenuck.maximenuflatlistck.level3 > a,
div#maximenuck90 .maxipushdownck ul.maximenuck2 li.maximenuck.nodropdown li.maximenuck > a {
    text-indent: 5px;
	padding: 5px 16px;
	font-size: 0.9em;
}

/* link image style */
div#maximenuck90 li.maximenuck > a img {
    margin : 3px;
    border : none;
}

/* img style without link (in separator) */
div#maximenuck90 li.maximenuck img {
    border : none;
}

/* item title */
div#maximenuck90 span.titreck {
    text-decoration : none;
    /*min-height : 17px;*/
    float : none !important;
    float : left;
	margin: 0;
}

/* item description */
div#maximenuck90 span.descck {
    display : block;
    text-transform : none;
    font-size : 10px;
    text-decoration : none;
    height : 12px;
    line-height : 12px;
    float : none !important;
    float : left;
}

/*--------------------------------------------
---		Submenus						------
---------------------------------------------*/

/* submenus container */
div#maximenuck90 div.floatck {
	position : absolute;
	display: none;
	filter: none;
	border: 0px solid transparent; /* needed for IE */
	padding : 0;
    margin : 0;
	filter: none;
    background : #372D2A;
	/*width : 180px;*/ /* default width */
	text-align:left;
	box-shadow: none;
	cursor: auto;
}

div#maximenuck90 div.maxidrop-main {
	width : 180px; /* default width */
}

/* vertical menu */
div#maximenuck90.maximenuckv div.floatck {
	/*margin : -39px 0 0 90%;*/
}

div#maximenuck90 .maxipushdownck div.floatck {
	margin: 0;
}

/* child blocks position (from level2 to n) */
div#maximenuck90 ul.maximenuck li.maximenuck div.floatck div.floatck {
	margin : -46px 0 0 180px;
	background: #fff;
	box-shadow: none;
}

/**
** Show/hide sub menu if mootools is off - horizontal style
**/
div#maximenuck9


charData = char, start = x, end = x1)                      //计算每个字的左右位置
                    x = x1
                }
                textLines.add(textLine)
            }
            height = ChapterProvider.visibleHeight.toFloat()
            Logger.e("TextPage::format::textLines is empty and visibleWidth[${ChapterProvider.visibleWidth}] > 0 and text.size=${text.length}")
        }
        return this
    }

    fun removePageAloudSpan(): TextPage {
        textLines.forEach { textLine ->
            textLine.isReadAloud = false
        }
        return this
    }

    fun upPageAloudSpan(pageStart: Int) {
        removePageAloudSpan()
        var lineStart = 0
        for ((index, textLine) in textLines.withIndex()) {
            if (pageStart > lineStart && pageStart < lineStart + textLine.text.length) {
                for (i in index - 1 downTo 0) {
                    if (textLines[i].text.endsWith("\n")) {
                        break
                    } else {
                        textLines[i].isReadAloud = true
                    }
                }
                for (i in index until textLines.size) {
                    if (textLines[i].text.endsWith("\n")) {
                        textLines[i].isReadAloud = true
                        break
                    } else {
                        textLines[i].isReadAloud = true
                    }
                }
                break
            }
            lineStart += textLine.text.length
        }
    }

    /***
     * 用于显示的阅读进度
     */
    val readProgress: String
        get() {
            val df = DecimalFormat("0.0%")
            if (chapterSize == 0 || pageSize == 0 && chapterIndex == 0) {
                return "0.0%"
            } else if (pageSize == 0) {
                return df.format((chapterIndex + 1.0f) / chapterSize.toDouble())
            }
            var percent =
                df.format(chapterIndex * 1.0f / chapterSize + 1.0f / chapterSize * (index + 1) / pageSize.toDouble())
            if (percent == "100.0%" && (chapterIndex + 1 != chapterSize || index + 1 != pageSize)) {
                percent = "99.9%"
            }
            return percent
        }
}/*
 *  ---license-start
 *  eu-digital-green-certificates / dgca-wallet-app-android
 *  ---
 *  Copyright (C) 2021 T-Systems International GmbH and all other contributors
 *  ---
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  ---license-end
 *
 *  Created by osarapulov on 8/25/21 4:40 PM
 */

package dgca.wallet.app.android.inputrecognizer.urlschema

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.navigation.fragment.navArgs
import dgca.wallet.app.android.inputrecognizer.InputRecognizerDataHandlerFragment
import dagger.hilt.android.AndroidEntryPoint
import dgca.wallet.app.android.databinding.FragmentUrlSchemaBinding

/**
 * To launch Url Schema fragment use command:
 * adb shell am start -n dgca.wallet.app.android/dgca.wallet.app.android.ui.MainActivity -a dgca.wallet.app.android.INTENT -e "DATA_PARAM" DCC
 */
@AndroidEntryPoint
class UrlSchemaFragment : InputRecognizerDataHandlerFragment<Frag


ct location only, and trailing slashes are only added to directory indexes.
     */
    TrailingSlashBehaviorUnspecified: "TRAILING_SLASH_BEHAVIOR_UNSPECIFIED",
    /**
     * Trailing slashes are _added_ to directory indexes as well as to any URL path not ending in a file extension.
     */
    Add: "ADD",
    /**
     * Trailing slashes are _removed_ from directory indexes as well as from any URL path not ending in a file extension.
     */
    Remove: "REMOVE",
} as const;

/**
 * Defines how to handle a trailing slash in the URL path.
 */
export type ServingConfigTrailingSlashBehavior = (typeof ServingConfigTrailingSlashBehavior)[keyof typeof ServingConfigTrailingSlashBehavior];

export const VersionStatus = {
    /**
     * The default status; should not be intentionally used.
     */
    VersionStatusUnspecified: "VERSION_STATUS_UNSPECIFIED",
    /**
     * The version has been created, and content is currently being added to the version.
     */
    Created: "CREATED",
    /**
     * All content has been added to the version, and the version can no longer be changed.
     */
    Finalized: "FINALIZED",
    /**
     * The version has been deleted.
     */
    Deleted: "DELETED",
    /**
     * The version was not updated to `FINALIZED` within 12 hours and was automatically deleted.
     */
    Abandoned: "ABANDONED",
    /**
     * The version is outside the site-configured limit for the number of retained versions, so the version's content is scheduled for deletion.
     */
    Expired: "EXPIRED",
    /**
     * The version is being cloned from another version. All content is still being copied over.
     */
    Cloning: "CLONING",
} as const;

/**
 * The deploy status of the version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
 */
export type VersionStatus = (typeof VersionStatus)[keyof typeof VersionStatus];
/* eslint-disable @typescript-eslint/ban-types */
import * as appConfig from "electron-settings";
import * as createMainWindow from "./create-main-window";
import { restoreMainWindow } from "./restore-main-window";

jest.mock("electron-settings", () => {
  return {
    get: () => "http://localhost:9609",
    set: () => "data",
    has: () => true,
    unset: () => {},
    __esModule: true,
  };
});

jest.mock("electron", () => {
  return {
    app: {
      getVersion: () => "99.99.99",
      getPath: () => "tmp",
      getLocale: () => "en",
      on: () => "en",
      __esModule: true,
    },
    // eslint-disable-next-line object-shorthand, func-names, @typescript-eslint/no-unused-vars
    BrowserWindow: function (_x:object, _y: number, _w: number, _h: number, _s: boolean, _w2: object) {
      return {
        loadFile: jest.fn(),
        id: 103,
        webContents: {
          userAgent: "test",
          on: (_: string, func: Function) => {
            return func();
          }
        },
        once: (_: string, func: Function) => {
          return func();
        },
        show: jest.fn(),
        on: (_


 0),
		tournamentList:  make([]*Leaderboard, 0),
	}

	if err := l.RefreshAllLeaderboards(ctx); err != nil {
		startupLogger.Fatal("Error loading leaderboard cache from database", zap.Error(err))
	}

	return l
}

func (l *LocalLeaderboardCache) RefreshAllLeaderboards(ctx context.Context) error {
	leaderboards := make(map[string]*Leaderboard)
	tournamentList := make([]*Leaderboard, 0, 100)
	leaderboardList := make([]*Leaderboard, 0, 100)
	allList := make([]*Leaderboard, 0, 100)

	const limit = 10_000

	var createTime pgtype.Timestamptz
	var id string
	for {
		query := `
SELECT id, authoritative, sort_order, operator, reset_schedule, metadata, create_time,
category, description, duration, end_time, join_required, max_size, max_num_score, title, start_time, enable_ranks
FROM leaderboard`
		params := make([]interface{}, 0, 3)
		params = append(params, limit)
		if id != "" {
			query += " WHERE (create_time, id) > ($2, $3)"
			params = append(params, createTime, id)
		}
		query += " ORDER BY create_time ASC, id ASC LIMIT $1"

		rows, err := l.db.QueryContext(ctx, query, params...)
		if err != nil {
			l.logger.Error("Error loading leaderboard cache from database", zap.Error(err))
			return err
		}

		var count int
		for rows.Next() {
			var authoritative bool
			var sortOrder int
			var operator int
			var resetSchedule sql.NullString
			var metadata string
			var category int
			var description string
			var duration int
			var endTime pgtype.Timestamptz
			var joinRequired bool
			var maxSize int
			var maxNumScore int
			var title string
			var startTime pgtype.Timestamptz
			var enableRanks bool

			err = rows.Scan(&id, &authoritative, &sortOrder, &operator, &resetSchedule, &metadata, &createTime,
				&category, &description, &duration, &endTime, &joinRequired, &maxSize, &maxNumScore, &title, &startTime, &enableRanks)
			if err != nil {
				_ = rows.Close()
				l.logger.Error("Error parsing leaderboard cache from database", zap.Error(err))
				return err
			}

			leaderboard := &Leaderboard{
				Id:            id,
				Authoritative: authoritative,
				SortOrder:     sortOrder,
				Operator:      operator,

				Metadata:     metadata,
				CreateTime:   createTime.Time.Unix(),
				Category:     category,
				Description:  description,
				Duration:     duration,
				EndTime:      0,
				JoinRequired: joinRequired,
				MaxSize:      maxSize,
				MaxNumScore:  maxNumScore,
				Title:        title,
				StartTime:    startTime.Time.Unix(),
				EnableRanks:  enableRanks,
			}
			if resetSchedule.Valid {
				expr, err := cronexpr.Parse(resetSchedule.String)
				if err != nil {
					_ = rows.Close()
					l.logger.Error("Error parsing leaderboard reset schedule from database", zap.Error(err))
					return err
				}
				leaderboard.ResetScheduleStr = resetSchedule.String
				leaderboard.ResetSchedule = expr
			}
			if endTime.Valid {
				leaderboard.EndTime = endTime.Time.Unix()
			}

			count++
			leaderboards[id] = leaderboard

			allList = append(allList, leaderboard)
			if leaderboard.IsTournament() {
				tournamentList = append(tourname


atic struct synaptics_rmi4_exp_fn test_module = {
	.fn_type = RMI_TEST_REPORTING,
	.init = synaptics_rmi4_test_init,
	.remove = synaptics_rmi4_test_remove,
	.reset = synaptics_rmi4_test_reset,
	.reinit = NULL,
	.early_suspend = NULL,
	.suspend = NULL,
	.resume = NULL,
	.late_resume = NULL,
	.attn = synaptics_rmi4_test_attn,
};

static int __init rmi4_test_module_init(void)
{
	synaptics_rmi4_new_function(&test_module, true);

	return 0;
}

static void __exit rmi4_test_module_exit(void)
{
	synaptics_rmi4_new_function(&test_module, false);

	wait_for_completion(&test_remove_complete);

	return;
}

module_init(rmi4_test_module_init);
module_exit(rmi4_test_module_exit);

MODULE_AUTHOR("Synaptics, Inc.");
MODULE_DESCRIPTION("Synaptics DSX Test Reporting Module");
MODULE_LICENSE("GPL v2");


UseProxy: value as bool?),
      SettingsKeys.autoCheckin => copyWith(autoCheckin: value as bool?),
      SettingsKeys.showUnreadNoticeBadge => copyWith(showUnreadNoticeBadge: value as bool?),
      SettingsKeys.showUnreadPersonalMessageBadge => copyWith(showUnreadPersonalMessageBadge: value as bool?),
      SettingsKeys.showUnreadBroadcastMessageBadge => copyWith(showUnreadBroadcastMessageBadge: value as bool?),
      SettingsKeys.autoSyncNoticeSeconds => copyWith(autoSyncNoticeSeconds: value as int?),
      SettingsKeys.enableDebugOperations => copyWith(enableDebugOperations: value as bool?),
      SettingsKeys.fontFamily => copyWith(fontFamily: value as String?),
      SettingsKeys.enableEditorBBCodeParser => copyWith(enableEditorBBCodeParser: value as bool?),
      SettingsKeys.enableUpdateCheckOnStartup => copyWith(enableUpdateCheckOnStartup: value as bool?),
      SettingsKeys.editorRecentUsedCustomColors => copyWith(editorRecentUsedCustomColors: value as List<int>?),
      SettingsKeys.useDetectedProxyWhenStartup => copyWith(useDetectedProxyWhenStartup: value as bool?),
      SettingsKeys.enableAutoClearImageCache => copyWith(enableAutoClearImageCache: value as bool?),
      SettingsKeys.autoClearImageCacheDuration => copyWith(autoClearImageCacheDuration: value as int?),
      SettingsKeys.collapseAppBarWhenScroll => copyWith(collapseAppBarWhenScroll: value as bool?),
    };
  }
}
part of 'schema.dart';

/// Table recording fate rate template.
///
/// Each template stores a series of kinds of credits to rate users.
///
/// Most columns in this is not going to change so we do not use English words to name them because the fields in
/// database is far much better to be consist through time, not like variable names or translations.
@DataClassName('FastRateTemplateEntity')
class FastRateTemplate extends Table {
  /// Name of the template.
  TextColumn get name => text()();

  /// Attr 威望
  IntColumn get ww => integer()();

  /// Attr 天使币
  IntColumn get tsb => integer()();

  /// Attr 宣传
  IntColumn get xc => integer()();

  /// Attr 天然
  IntColumn get tr => integer()();

  /// Attr 腹黑
  IntColumn get fh => integer()();

  /// Attr 精灵
  IntColumn get jl => integer()();

  /// The special attribute changes through time.
  IntColumn get special => integer()();

  /// The time last used this template.
  DateTimeColumn get lastUsedTime => dateTime()();

  @override
  Set<Column<Object>> get primaryKey => {name};
}
part of 'dao.dart';

/// DAO for table [Cookie].
@DriftAccessor(tables: [Cookie])
final class CookieDao extends DatabaseAccessor<AppDatabase> with _$CookieDaoMixin {
  /// Constructor.
  CookieDao(super.db);

  /// Get all cookies.
  Future<List<CookieEntity>> selectAll() async {
    return select(cookie).get();
  }

  /// Get cookie by [username].
  Future<CookieEntity?> selectCookieByUsername(String username) async {
    return (select(cookie)..where((e) => e.username.equals(username))).getSingleOrNull();
  }

  /// Get cookie by [uid].
  Future<CookieEntity?> selectCookieByUid(int uid) async {
    return (select(cookie)..where((e) => e.uid.equals(uid))).getSingleOrNull();
  }

  /// Watch the stream of all u


” – Greg Wilson’s dad

Vectors are everywhere

Your garden variety R object is a vector. A single piece of info that you regard as a scalar is just a vector of length 1 and R will cheerfully let you add stuff to it. Square brackets are used for isolating elements of a vector for inspection, modification, etc. This is often called indexing. Go through the following code carefully, as it’s really rather surprising. BTW, indexing begins at 1 in R, unlike many other languages that index from 0.

x <- 3 * 4
x
#> [1] 12
is.vector(x)
#> [1] TRUE
length(x)
#> [1] 1
x[2] <- 100
x
#> [1]  12 100
x[5] <- 3
x
#> [1]  12 100  NA  NA   3
x[11]
#> [1] NA
x[0]
#> numeric(0)

R is built to work with vectors. Many operations are vectorized, i.e. by default they will happen component-wise when given a vector as input. Novices often don’t internalize or exploit this and they write lots of unnecessary for loops.

x <- 1:4
## which would you rather write and read?
## the vectorized version ...
(y <- x^2)
#> [1]  1  4  9 16
## or the for loop version?
z <- vector(mode = mode(x), length = length(x))
for(i in seq_along(x)) {
  z[i] <- x[i]^2
}
identical(y, z)
#> [1] TRUE

When reading function documentation, keep your eyes peeled for arguments that can be vectors. You’ll be surprised how common they are. For example, the mean and standard deviation of random normal variates can be provided as vectors.

set.seed(1999)
rnorm(5, mean = 10^(1:5))
#> [1]     10.73267     99.96217   1001.20301  10001.46980 100000.13369
round(rnorm(5, sd = 10^(0:4)), 2)
#> [1]     0.52    -5.49  -118.56 -1147.28 11607.42

This could be awesome in some settings, but dangerous in others, i.e. if you exploit this by mistake and get no warning. This is one of the reasons it’s so important to keep close tabs on your R objects: are they what you expect in terms of their flavor and length or dimensions? Check early and check often.

Notice that R also recycles vectors, if they are not the necessary length. You will get a warning if R suspects recycling is unintended, i.e. when one length is not an integer multiple of another, but recycling is silent if it seems like you know what you’re doing. Can be a beautiful thing when you’re doing this deliberately, but devasting when you don’t.

Question: is there a way to turn recycling off? Not that I know of.

(y <- 1:3)
#> [1] 1 2 3
(z <- 3:7)
#> [1] 3 4 5 6 7


etup wi struct */
	wi = wi_alloc(sizeof(*pf));
	if (!wi)
		return NULL;

	wi->wi_read		= file_read;
	wi->wi_write		= file_write;
	wi->wi_set_channel	= file_set_channel;
	wi->wi_get_channel	= file_get_channel;
        wi->wi_set_rate    	= file_set_rate;
	wi->wi_get_rate    	= file_get_rate;
	wi->wi_close		= file_close;
	wi->wi_fd		= file_fd;
	wi->wi_get_mac		= file_get_mac;
	wi->wi_get_monitor	= file_get_monitor;

        pf = wi_priv(wi);

	fd = open(iface + 7, O_RDONLY);
	if (fd == -1)
		err(1, "open()");

	pf->pf_fd = fd;

	if ((rc = read(fd, &pfh, sizeof(pfh))) != sizeof(pfh))
		goto __err;

	if (pfh.magic != TCPDUMP_MAGIC)
		goto __err;

	if (pfh.version_major != PCAP_VERSION_MAJOR
	    || pfh.version_minor != PCAP_VERSION_MINOR)
		goto __err;

	pf->pf_dtl = pfh.linktype;

	return wi;

__err:
	wi_close(wi);
	return (struct wif*) -1;
}


// SPDX-License-Identifier: GPL-2.0

#include "vmlinux.h"
#include "bpf_experimental.h"
#include <bpf/bpf_helpers.h>
#include "bpf_misc.h"
#include "../bpf_testmod/bpf_testmod_kfunc.h"

char _license[] SEC("license") = "GPL";

SEC("raw_tp/sys_enter")
__success
int iter_next_trusted(const void *ctx)
{
	struct task_struct *cur_task = bpf_get_current_task_btf();
	struct bpf_iter_task_vma vma_it;
	struct vm_area_struct *vma_ptr;

	bpf_iter_task_vma_new(&vma_it, cur_task, 0);

	vma_ptr = bpf_iter_task_vma_next(&vma_it);
	if (vma_ptr == NULL)
		goto out;

	bpf_kfunc_trusted_vma_test(vma_ptr);
out:
	bpf_iter_task_vma_destroy(&vma_it);
	return 0;
}

SEC("raw_tp/sys_enter")
__failure __msg("Possibly NULL pointer passed to trusted arg0")
int iter_next_trusted_or_null(const void *ctx)
{
	struct task_struct *cur_task = bpf_get_current_task_btf();
	struct bpf_iter_task_vma vma_it;
	struct vm_area_struct *vma_ptr;

	bpf_iter_task_vma_new(&vma_it, cur_task, 0);

	vma_ptr = bpf_iter_task_vma_next(&vma_it);

	bpf_kfunc_trusted_vma_test(vma_ptr);

	bpf_iter_task_vma_destroy(&vma_it);
	return 0;
}

SEC("raw_tp/sys_enter")
__success
int iter_next_rcu(const void *ctx)
{
	struct task_struct *cur_task = bpf_get_current_task_btf();
	struct bpf_iter_task task_it;
	struct task_struct *task_ptr;

	bpf_iter_task_new(&task_it, cur_task, 0);

	task_ptr = bpf_iter_task_next(&task_it);
	if (task_ptr == NULL)
		goto out;

	bpf_kfunc_rcu_task_test(task_ptr);
out:
	bpf_iter_task_destroy(&task_it);
	return 0;
}

SEC("raw_tp/sys_enter")
__failure __msg("Possibly NULL pointer passed to trusted arg0")
int iter_next_rcu_or_null(const void *ctx)
{
	struct task_struct *cur_task = bpf_get_current_task_btf();
	struct bpf_iter_task task_it;
	struct task_struct *task_ptr;

	bpf_iter_task_new(&task_it, cur_task, 0);

	task_ptr = bpf_iter_task_next(&task_it);

	bpf_kfunc_rcu_task_test(task_ptr);

	bpf_iter_task_destroy(&task_it);
	return 0;
}

SEC("raw_tp/sys_enter")
__failure __msg("R1 must be referenced or trusted")
int iter_next_rcu_not_trusted(const void *ctx)
{
	struct task_struct *cur_task = bpf_get_current_task_btf();
	struct bpf_iter_task task_it;
	struct task_struct *task_ptr;

	bpf_iter_task_new(&task_it, cur_task, 0);

	task_ptr = bpf_iter_task_next(&task_it);
	if (task_ptr == NULL)
		goto out;

	bpf_kfunc_trusted_task_test(task_ptr);
out:
	bpf_iter_task_destroy(&task_it);
	return 0;
}

SEC("raw_tp/sys_enter")
__failure __msg("R1 cannot write into rdonly_mem")
/* Message should not be 'R1 cannot write into rdonly_trusted_mem' */
int iter_next_ptr_mem_not_trusted(const void *ctx)
{
	struct bpf_iter_num num_it;
	int *num_ptr;

	bpf_iter_num_new(&num_it, 0, 10);

	num_ptr = bpf_iter_num_next(&num_it);
	if (num_ptr == NULL)
		goto out;

	bpf_kfunc_trusted_num_test(num_ptr);
out:
	bpf_iter_num_destroy(&num_it);
	return 0;
}


 override void Dispose(bool disposing)
        {
            if (disposing)
            {
                var viewPager = this.FindViewById<ViewPager2>(Resource.Id.carousel_view_pager);
                if (viewPager != null)
                {
                    viewPager.UnregisterOnPageChangeCallback(onPageChangeCallback);
                    viewPager.SystemUiVisibilityChange -= ViewPagerOnSystemUiVisibilityChange;
                    viewPager.ScrollChange -= ViewPagerOnScrollChange;
                    viewPager.LayoutChange -= ViewPagerOnLayoutChange;

                    RecyclerView recyclerView = (RecyclerView) viewPager.GetChildAt(0);
                    recyclerView.Touch -= RecyclerViewOnTouch;
                }

                onMapViewMapTappedSubscription?.Dispose();
                onPageChangeCallback?.Dispose();
            }

            base.Dispose(disposing);
        }
    }
}


rack model for rendering
 *  @ingroup graphicmodint
 *  @param[in] track Track structure
 */
typedef int (*tfGraphicInitTrack)(tTrack* track);

/** @brief Load and set up car models for rendering
 *  @ingroup graphicmodint
 *  @param[in] s Situation containing list with cars
 */
typedef int (*tfGraphicInitCars)(struct Situation* s);

/** @brief Init viewport for rendering
 *  @ingroup graphicmodint
 *  @param[in] x X position of viewport
 *  @param[in] y Y position of viewport
 *  @param[in] width Width of viewport
 *  @param[in] height Height of viewport
 *  @param[in] flag Currently unused
 *  @param[in] screen Screen (tGfuiScreen)
 *  @return 0, unused
 *  @see ReScreenInit
 */
typedef int (*tfGraphicInitView)(int x, int y, int width, int height, int flag, void * screen);

/** @brief Render scene based on given situation
 *  @ingroup graphicmodint
 *  @param[in] s Situation
 *  @return 0, unsued
 */
typedef int (*tfGraphicRefresh)(struct Situation *);

/** @brief Shut down and release car models
 *  @ingroup graphicmodint
 */
typedef void (*tfGraphicShutdwnCars)(void);

/** @brief Shut down and release track model
 *  @ingroup graphicmodint
 */
typedef void (*tfGraphicShutdwnTrack)(void);

/** @brief Set output audio gain to 0 to mute sound, used for menus during race, tfGraphicRefresh will reset the gain to normal level
 *  @ingroup graphicmodint
 */
typedef void (*tGraphicMuteForMenu)(void);

class ssgEntity;
typedef void (*tfGraphicBendCar) (int /*index*/, sgVec3 /*poc*/, sgVec3 /*force*/, int /*cnt*/);

/** @brief Interface Structure for Graphic Renering Module
 *  @ingroup graphicmodint
 */
typedef struct {
	tfGraphicInitTrack	    inittrack;
	tfGraphicInitView       initview;
	tfGraphicInitCars	    initcars;
	tfGraphicRefresh	    refresh;
	tfGraphicShutdwnCars    shutdowncars;
	tfGraphicShutdwnTrack   shutdowntrack;
	tGraphicMuteForMenu		muteformenu;
	//tfGraphicBendCar        bendcar;
} tGraphicItf;

#endif /* _GRAPHV1_H_ */


s | Bug 修复

- 调整提示框默认样式的最小高度为100px ([fe2b19b](https://github.com/oh-my-live2d/oh-my-live2d/commit/fe2b19b622df945cc413eb1eaa35557630ea73b9)) by Hacxy
- 调整舞台样式选项由简单配置选项修改为可通过完整的CSS对象配置 ([f05eca7](https://github.com/oh-my-live2d/oh-my-live2d/commit/f05eca712a0fc7b26610af70c862517d9efddf2c)) by Hacxy
- 修复wordTheDayData类型缺失, 调整提示框样式参数, 从之前只能简单配置修改为可配置完整的CSS对象 ([8db8397](https://github.com/oh-my-live2d/oh-my-live2d/commit/8db8397621c543ff7fd385f901ccc6f6b359a423)) by Hacxy
- 修改默认主题色为:[#58b0fc](https://github.com/oh-my-live2d/oh-my-live2d/issues/58b0fc) ([0ad6507](https://github.com/oh-my-live2d/oh-my-live2d/commit/0ad6507d00597fdf39622b7da6900567de972741)), closes [#58b0](https://github.com/oh-my-live2d/oh-my-live2d/issues/58b0) by Hacxy
- fixed选项标记为已弃用 ([126f2d2](https://github.com/oh-my-live2d/oh-my-live2d/commit/126f2d2c9478bfaed91e8d2f8dd09166455370e4)) by Hacxy
- **status-bar:** 修复了状态条加载时和加载完成时显示异常 ([ca1fd28](https://github.com/oh-my-live2d/oh-my-live2d/commit/ca1fd2868b3bcd4f2748b90fbf5941213b385169)) by Hacxy
- **tips:** 新增消息行数限制选项messageLine, 超出则在末尾追加省略号 ([46ef487](https://github.com/oh-my-live2d/oh-my-live2d/commit/46ef48713bddb92814d48c310c7bdfbe1e860a58)) by Hacxy

## [0.9.0](https://github.com/oh-my-live2d/oh-my-live2d/compare/v0.8.2...v0.9.0) (2024-03-09)

### ✨ Features | 新功能

- 新增点击触发模型动作, 现在点击模型将会播放对应动作和声音 ([40033fa](https://github.com/oh-my-live2d/oh-my-live2d/commit/40033fae668670e5c79732e267db3433fbe7d61a)) by Hacxy
- **model:** 模型选项加入动作预加载策略 ([7493d9b](https://github.com/oh-my-live2d/oh-my-live2d/commit/7493d9bd786857c8b51e07aff95db22c40fd762c)) by Hacxy
- **model:** 现在您可以通过showHitAreaFrames选项来查看模型的所有可被点击区域, 所有可点击区域被点击时


.FromMilliseconds(100));
        }
        public override void Stop()
        {
            if (_Timer != null)
            {
                _Timer.Cancel();
                _Timer = null;
            }
            base.Stop();
        }

        protected override void Loop()
        {
        }
        public override bool IsAlive
        {
            get
            {
                return true;
            }
        }
        private void timerElapsedHandler(ThreadPoolTimer timer)
        {
#if DEBUG
            return;
#else
            foreach (WorkerBase wb in _Workers)
            {
                if (!wb.IsAlive)
                {
                    wb.Stop();
                    //TODO AD Add watchdog log
                    wb.Start();
                }
            }
#endif
        }

    }
}


ion + 1) {
        throw new ParseException(
            "Failed to parse timestamp: invalid trailing data \""
                + value.substring(timezoneOffsetPosition)
                + "\"",
            0);
      }
    } else {
      String offsetValue = value.substring(timezoneOffsetPosition + 1);
      long offset = parseTimezoneOffset(offsetValue);
      if (value.charAt(timezoneOffsetPosition) == '+') {
        seconds -= offset;
      } else {
        seconds += offset;
      }
    }
    try {
      return normalizedTimestamp(seconds, nanos);
    } catch (IllegalArgumentException e) {
      throw new ParseException("Failed to parse timestamp: timestamp is out of range.", 0);
    }
  }

  /** Create a Timestamp from the number of seconds elapsed from the epoch. */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static Timestamp fromSeconds(long seconds) {
    return normalizedTimestamp(seconds, 0);
  }

  /**
   * Convert a Timestamp to the number of seconds elapsed from the epoch.
   *
   *
The result will be rounded down to the nearest second. E.g., if the timestamp represents
   * "1969-12-31T23:59:59.999999999Z", it will be rounded to -1 second.
   */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static long toSeconds(Timestamp timestamp) {
    return checkValid(timestamp).getSeconds();
  }

  /** Create a Timestamp from the number of milliseconds elapsed from the epoch. */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static Timestamp fromMillis(long milliseconds) {
    return normalizedTimestamp(
        milliseconds / MILLIS_PER_SECOND,
        (int) (milliseconds % MILLIS_PER_SECOND * NANOS_PER_MILLISECOND));
  }

  /**
   * Convert a Timestamp to the number of milliseconds elapsed from the epoch.
   *
   *
The result will be rounded down to the nearest millisecond. E.g., if the timestamp
   * represents "1969-12-31T23:59:59.999999999Z", it will be rounded to -1 millisecond.
   */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static long toMillis(Timestamp timestamp) {
    checkValid(timestamp);
    return checkedAdd(
        checkedMultiply(timestamp.getSeconds(), MILLIS_PER_SECOND),
        timestamp.getNanos() / NANOS_PER_MILLISECOND);
  }

  /** Create a Timestamp from the number of microseconds elapsed from the epoch. */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static Timestamp fromMicros(long microseconds) {
    return normalizedTimestamp(
        microseconds / MICROS_PER_SECOND,
        (int) (microseconds % MICROS_PER_SECOND * NANOS_PER_MICROSECOND));
  }

  /**
   * Convert a Timestamp to the number of microseconds elapsed from the epoch.
   *
   *
The result will be rounded down to the nearest microsecond. E.g., if the timestamp
   * represents "1969-12-31T23:59:59.999999999Z", it will be rounded to -1 microsecond.
   */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static long toMicros(Timestamp timestamp) {
    checkValid(timestamp);
    return checkedAdd(
        checkedMultiply(timestamp.getSeconds(), MICROS_PER_SECOND),
        timestamp.getNanos() / NANOS_PER_MICROSECOND);
  }

  /** Create a Timestamp from the number of nanoseconds elapsed from the epoch. */
  @SuppressWarnings("GoodTime") // this is a legacy conversion API
  public static Timestamp fromNanos(long nanoseconds) {
    return normalizedTimestamp(
        nanoseconds / NANOS