/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef nsServiceManagerUtils_h__
#define nsServiceManagerUtils_h__

#include "nsIServiceManager.h"
#include "nsCOMPtr.h"

inline
const nsGetServiceByCID
do_GetService(const nsCID& aCID)
{
    return nsGetServiceByCID(aCID);
}

inline
const nsGetServiceByCIDWithError
do_GetService(const nsCID& aCID, nsresult* error)
{
    return nsGetServiceByCIDWithError(aCID, error);
}

inline
const nsGetServiceByContractID
do_GetService(const char* aContractID)
{
    return nsGetServiceByContractID(aContractID);
}

inline
const nsGetServiceByContractIDWithError
do_GetService( const char* aContractID, nsresult* error)
{
    return nsGetServiceByContractIDWithError(aContractID, error);
}

class nsGetServiceFromCategory : public nsCOMPtr_helper
{
 public:
    nsGetServiceFromCategory(const char* aCategory, const char* aEntry,
                             nsresult* aErrorPtr)
        : mCategory(aCategory),
        mEntry(aEntry),
        mErrorPtr(aErrorPtr)
        {
            // nothing else to do
        }

    virtual nsresult NS_FASTCALL operator()( const nsIID&, void** ) const;
 protected:
    const char*                 mCategory;
    const char*                 mEntry;
    nsresult*                   mErrorPtr;
};

inline
const nsGetServiceFromCategory
do_GetServiceFromCategory( const char* category, const char* entry,
                           nsresult* error = 0)
{
    return nsGetServiceFromCategory(category, entry, error);
}

NS_COM_GLUE nsresult
CallGetService(const nsCID &aClass, const nsIID &aIID, void **aResult);

NS_COM_GLUE nsresult
CallGetService(const char *aContractID, const nsIID &aIID, void **aResult);

// type-safe shortcuts for calling |GetService|
template <class DestinationType>
inline
nsresult
CallGetService( const nsCID &aClass,
                DestinationType** aDestination)
{
    NS_PRECONDITION(aDestination, "null parameter");

    return CallGetService(aClass,
                          NS_GET_TEMPLATE_IID(DestinationType),
                          reinterpret_cast<void**>(aDestination));
}

template <class DestinationType>
inline
nsresult
CallGetService( const char *aContractID,
                DestinationType** aDestination)
{
    NS_PRECONDITION(aContractID, "null parameter");
    NS_PRECONDITION(aDestination, "null parameter");

    return CallGetService(aContractID,
                          NS_GET_TEMPLATE_IID(DestinationType),
                          reinterpret_cast<void**>(aDestination));
}

#endif


ngTier

The [**D3D12DDI_VIEW_INSTANCING_TIER**](./ne-d3d12umddi-d3d12ddi_view_instancing_tier.md) value.

### -field BarycentricsSupported

Set TRUE when Barycentric coordinates are supported; otherwise, set FALSE.

### -field ReservedBufferPlacementSupported

Set TRUE when buffer placement is supported (only 64KB aligned MSAA support); otherwise, set FALSE.

### -field Deterministic64KBUndefinedSwizzle

Set TRUE when deterministic 64KB undefined swizzle is supported; otherwise, set FALSE.

### -field SRVOnlyTiledResourceTier3

Set TRUE when the hardware supports SRV-only sparse volume textures; otherwise, set FALSE.

### -field RenderPassTier

The [**D3D12DDI_RENDER_PASS_TIER**](ne-d3d12umddi-d3d12ddi_render_pass_tier.md) that the hardware supports.

### -field RaytracingTier

The [**D3D12DDI_RAYTRACING_TIER**](ne-d3d12umddi-d3d12ddi_raytracing_tier.md) that the hardware supports.

### -field VariableShadingRateTier

The [**D3D12DDI_VARIABLE_SHADING_RATE_TIER**](ne-d3d12umddi-d3d12ddi_variable_shading_rate_tier.md) that the hardware supports.

### -field PerPrimitiveShadingRateSupportedWithViewportIndexing

Set TRUE when per primitive shading rate is supported with viewport indexing; otherwise, set FALSE.

### -field AdditionalShadingRatesSupported

Set TRUE if additional shading rates are supported; otherwise, set FALSE.

### -field ShadingRateImageTileSize

The tile size of the screen-space image.

### -field BackgroundProcessingSupported

Set TRUE when the driver supports background processing; otherwise, set FALSE.

### -field MeshShaderTier

The [**D3D12DDI_MESH_SHADER_TIER**](./ne-d3d12umddi-d3d12ddi_mesh_shader_tier.md) that the device supports.

### -field SamplerFeedbackTier

The [**D3D12DDI_SAMPLER_FEEDBACK_TIER**](./ne-d3d12umddi-d3d12ddi_mesh_shader_tier.md) that the device supports.

### -field DriverManagedShaderCachePresent

Set TRUE when the driver supports shader cache  management. When set TRUE, the driver must provide a non-NULL [**PFND3D12DDI_IMPLICITSHADERCACHECONTROL_0080**](nc-d3d12umddi-pfnd3d12ddi_implicitshadercachecontrol_0080.md) callback function.
---
UID: NS:d3d12umddi.D3D12DDI_COMMAND_LIST_FUNCS_3D_0032
title: D3D12DDI_COMMAND_LIST_FUNCS_3D_0032 (d3d12umddi.h)
description: The D3D12DDI_COMMAND_LIST_FUNCS_3D_0032 structure contains command list functions for 3D.
old-location: display\d3d12ddi-command-list-funcs-3d-0032.htm
ms.date: 05/10/2018
keywords: ["D3D12DDI_COMMAND_LIST_FUNCS_3D_0032 structure"]
ms.keywords: D3D12DDI_COMMAND_LIST_FUNCS_3D_0032, D3D12DDI_COMMAND_LIST_FUNCS_3D_0032 structure [Display Devices], d3d12umddi/D3D12DDI_COMMAND_LIST_FUNCS_3D_0032, display.d3d12ddi-command-list-funcs-3d-0032
req.header: d3d12umdd


 to "Angela", "" to "Bob",
                    "" to "Elon", "" to "Mark", "" to "Samantha", "" to "Alice", "" to "Michael",
                    "" to "Andy", "" to "Tamara",
                ), "Howdy Tamara!"),
                Triple("Howdy {1,1}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy {1,1}!"),
                Triple("Howdy {1.1}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy {1.1}!"),
                Triple("Howdy {00}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy {00}!"),
                Triple("Howdy {01}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy {01}!"),
                Triple("Howdy {0} and {0}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy Alex and Alex!"),
                Triple("Howdy {0} and {1}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy Alex and Emily!"),
                Triple("Howdy {1} and {0}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy Emily and Alex!"),
                Triple("Howdy {1} and {1}!", arrayOf("" to "Alex", "" to "Emily"), "Howdy Emily and Emily!"),
            ).forEach { (inputStr, args, formattedStr) ->
                "`$inputStr` with args ${args.contentToString()} should return `$formattedStr`" {
                    inputStr.curlyFormat(*args) shouldBe formattedStr
                }
            }
        }
    }

    "Test String.curlyFormat (arg factory with dictionary)" - {
        val dict = listOf(
            "app_name" to "UnitTestApp",
            "test_label" to "Test Label",
        )
        listOf(
            Pair("Welcome to {app_name}", "Welcome to UnitTestApp"),
            Pair("Welcome to {app_name} and {file_name}", "Welcome to UnitTestApp and {file_name}"),
            Pair("{ Curly {test_label} }", "{ Curly Test Label }"),
        ).forEach { (inputStr, formattedStr) ->
            "`$inputStr` should return `$formattedStr`" {
                inputStr.curlyFormat { key ->
                    dict.find { it.first == key }?.second
                } shouldBe formattedStr
            }
        }
    }
})
*/
/*
 * Copyright (C) 2021-2025 The FlorisBoard 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.
 */

package dev.patrickgold.florisboard.lib

import androidx.compose.runtime.Stable
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.unit.IntOffset
import kotlin.math.absoluteValue
import kotlin.math.max
import kotlin.math.min

class FlorisRect private constructor(
    var left: Float,
    var top: Float,
    var right: Float,
    var bottom: Float,
) {
    companion object {
        fun empty() = FlorisRect(0.0f, 0.0f, 0.0f, 0.0f)

        fun new(
            left: Float = 0.0f,
            top: Float = 0.0f,
            right: Float = 0.0f,
            bottom: Float = 0.0f,
        ) = FlorisRect(left, top, right, bottom)

        fun new(
            width: Float,
            height: Float,
        ) = FlorisR


f
buffers. When an application requests zero buffers, drivers should
just return the current setting rather than the minimum or an error
code. For details see Section 3.1.

__u32	reserved[4]	Reserved for future extensions. Drivers and
applications must set the array to zero.

Table 4. Streaming Parameters Capabilites

<COL
WIDTH="38%"
TITLE="C1"><COL
WIDTH="12%"
TITLE="C2"><COL
WIDTH="50%"
TITLE="C3">

V4L2_CAP_TIMEPERFRAME	0x1000	The frame skipping/repeating controlled by the
timeperframe field is supported.

Table 5. Capture Parameters Flags

<COL
WIDTH="38%"
TITLE="C1"><COL
WIDTH="12%"
TITLE="C2"><COL
WIDTH="50%"
TITLE="C3">

V4L2_MODE_HIGHQUALITY	0x0001
High quality imaging mode. High quality mode
is intended for still imaging applications. The idea is to get the
best possible image quality that the hardware can deliver. It is not
defined how the driver writer may achieve that; it will depend on the
hardware and the ingenuity of the driver writer. High quality mode is
a different mode from the the regular motion video capture modes. In
high quality mode:

The driver may be able to capture higher
resolutions than for motion capture.

The driver may support fewer pixel formats
than motion capture (eg; true color).

The driver may capture and arithmetically
combine multiple successive fields or frames to remove color edge
artifacts and reduce the noise in the video data.

The driver may capture images in slices like
a scanner in order to handle larger format images than would otherwise
be possible.

An image capture operation may be
significantly slower than motion capture.

Moving objects in the image might have
excessive motion blur.

Capture might only work through the
read() call.

Return Value

On success 0 is returned, on error -1 and the errno variable is set appropriately:

<DIV
CLASS="VARIABLE


.e-gantt .e-gantt-chart .e-gantt-parent-taskbar-inner-div{background-color:#777;border:1px solid #555;border-radius:4px}.e-gantt .e-gantt-chart .e-gantt-parent-progressbar-inner-div{background-color:#555;border:1px solid #555}.e-gantt .e-gantt-chart .e-gantt-child-progressbar-inner-div{background-color:#2929ff;border:1px solid #2929ff}.e-gantt .e-gantt-chart .e-gantt-child-manualtaskbar{background-color:#7538c9;border:1px solid #572a96}.e-gantt .e-gantt-chart .e-gantt-unscheduled-taskbar.e-gantt-child-manualtaskbar{background:linear-gradient(to right,rgba(63,81,181,.2),#7538c9 30%,#7538c9 70%,#7538c9 70%,rgba(63,81,181,.2) 100%)}.e-gantt .e-gantt-chart .e-gantt-child-manualprogressbar{background-color:#572a96;border:0}.e-gantt .e-gantt-chart .e-holiday{background:#eee}.e-gantt .e-gantt-chart .e-holiday .e-span{color:#333;font-size:13px}.e-gantt .e-gantt-chart .e-weekend{background:#f8f8f8}.e-gantt .e-gantt-chart .e-weekend-header-cell{background:#f8f8f8}.e-gantt .e-gantt-chart .e-event-markers{border-left-color:#7575ff}.e-gantt .e-gantt-chart .e-event-markers .e-span-label{background-color:#8a6d3b;color:#fcf8e3;font-size:12px}.e-gantt .e-gantt-chart .e-event-markers .e-gantt-right-arrow{border-right-color:#8a6d3b}.e-gantt .e-gantt-chart .e-gantt-unscheduled-taskbar{background:linear-gradient(to right,rgba(117,117,255,.2),#7575ff 30%,#7575ff 70%,#7575ff 70%,rgba(117,117,255,.2) 100%);background-color:rgba(117,117,255,.2);border:0;border-radius:4px}.e-gantt .e-gantt-chart .e-unscheduled-milestone-top{border-bottom-color:#555}.e-gantt .e-gantt-chart .e-unscheduled-milestone-bottom{border-top-color:#555}.e-gantt .e-gantt-chart .e-progress-resize-gripper .e-progressbar-handler{background:#222;border-color:#fff}.e-gantt .e-gantt-chart .e-progress-resize-gripper .e-progressbar-handler-element{border-bottom-color:#fff}.e-gantt .e-gantt-chart .e-progress-resize-gripper .e-progressbar-handler-after{border-bottom-color:#222}.e-gantt .e-gantt-chart .e-gantt-dependency-view-container{display:block;z-index:5}.e-gantt .e-gantt-chart .e-line{border-color:#2929ff}.e-gantt .e-gantt-chart .e-connector-line-right-arrow{border-left-color:#2929ff}.e-gantt .e-gantt-chart .e-connector-line-left-arrow{border-right-color:#2929ff}.e-gantt .e-gantt-chart .


ivers.try_into())
    }
}

impl TryFrom<Vec<Receiver>> for Address {
    type Error = ParseError;

    fn try_from(receivers: Vec<Receiver>) -> Result<Self, Self::Error> {
        let mut typecodes = HashSet::with_capacity(receivers.len());
        for receiver in &receivers {
            let t = receiver.typecode();
            if typecodes.contains(&t) {
                return Err(ParseError::DuplicateTypecode(t));
            } else if (t == Typecode::P2pkh && typecodes.contains(&Typecode::P2sh))
                || (t == Typecode::P2sh && typecodes.contains(&Typecode::P2pkh))
            {
                return Err(ParseError::BothP2phkAndP2sh);
            } else {
                typecodes.insert(t);
            }
        }

        if typecodes.iter().all(|t| t.is_transparent()) {
            Err(ParseError::OnlyTransparent)
        } else {
            // All checks pass!
            Ok(Address(receivers))
        }
    }
}

impl Address {
    /// Returns the raw encoding of this Unified Address.
    pub(crate) fn to_bytes(&self) -> Vec<u8> {
        let encoded: Vec<_> = self
            .0
            .iter()
            .flat_map(|receiver| {
                let addr = receiver.addr();
                // Holds by construction.
                assert!(addr.len() < 256);

                iter::empty()
                    .chain(Some(receiver.typecode().into()))
                    .chain(Some(addr.len() as u8))
                    .chain(addr.iter().cloned())
            })
            .chain(iter::repeat(0).take(PADDING_LEN))
            .collect();

        f4jumble::f4jumble(&encoded).unwrap()
    }

    /// Returns the receivers contained within this address, sorted in preference order.
    pub fn receivers(&self) -> Vec<Receiver> {
        let mut receivers = self.0.clone();
        // Unstable sorting is fine, because all receivers are guaranteed by construction
        // to have distinct typecodes.
        receivers.sort_unstable_by_key(|r| r.typecode());
        receivers
    }

    /// Returns the receivers contained within this address, in the order they were
    /// parsed from the string encoding.
    ///
    /// This API is for advanced usage; in most cases you should use `Address::receivers`.
    pub fn receivers_as_parsed(&self) -> &[Receiver] {
        &self.0
    }
}

#[cfg(test)]
mod tests {
    use std::convert::TryFrom;

    use proptest::{
        array::{uniform11, uniform20, uniform32},
        prelude::*,
    };

    use super::{Address, ParseError, Receiver, Typecode};

    prop_compose! {
        fn uniform43()(a in uniform11(0u8..), b in uniform32(0u8..)) -> [u8; 43] {
            let mut c = [0; 43];
            c[..11].copy_from_slice(&a);
            c[11..].copy_from_slice(&b);
            c
        }
    }

    fn arb_shielded_receiver() -> BoxedStrategy<Receiver> {
        prop_oneof![
            uniform43().prop_map(Receiver::Sapling),
            uniform43().prop_map(Receiver::Orchard),
        ]
        .boxed()
    }

    fn arb_transparent_receiver() -> BoxedStrategy<Receiver> {
        prop_oneof![
            uniform20(0u8..).prop_map(Receiver::P2pkh),
            uniform20(0u8..).prop_map(Receiver::P2sh),
        ]
        .boxed()
    }

    prop_compose! {
        fn arb_unified_address()(


in_y + tileheight - 1;

					/* neighboring grid squares can add to this one */
					can_add_to_existing = 1;
				}

				/* if we can add to the previous rect, just expand its width */
				else
					rect->max_x += tilewidth;
			}

			/* once we hit a non-dirty square, we can no longer add on */
			else
				can_add_to_existing = 0;
		}
	}
}

/*---------------------------------------------------------------
    atarimo_render: Render the motion objects to the
    destination bitmap.
---------------------------------------------------------------*/

UINT16 *atarimo_render(int map, const rectangle *cliprect, struct atarimo_rect_list *rectlist)
{
	atarimo_data *mo = &atarimo[map];
	int startband, stopband, band, i;
	rectangle *rect;

	/* if the graphics info has changed, recompute */
	if (mo->gfxchanged)
	{
		mo->gfxchanged = 0;
		for (i = 0; i < round_to_powerof2(mo->gfxmask.mask); i++)
			init_gfxelement(mo, mo->gfxlookup[i]);
	}

	/* compute start/stop bands */
	startband = ((cliprect->min_y + mo->yscroll - mo->slipoffset) & mo->bitmapymask) >> mo->slipshift;
	stopband = ((cliprect->max_y + mo->yscroll - mo->slipoffset) & mo->bitmapymask) >> mo->slipshift;
	if (startband > stopband)
		startband -= mo->bitmapheight >> mo->slipshift;
	if (!mo->slipshift)
		stopband = startband;

	/* erase the dirty grid */
	erase_dirty_grid(mo, cliprect);

	/* loop over SLIP bands */
	for (band = startband; band <= stopband; band++)
	{
		atarimo_entry **first, **current, **last;
		rectangle bandclip = *cliprect;
		int link = 0;
		int step;

		/* otherwise, grab the SLIP and compute the bandrect */
		if (mo->slipshift != 0)
		{
			link = (mo->slipram[band & mo->sliprammask] >> mo->linkmask.shift) & mo->linkmask.mask;

			/* compute minimum Y and wrap around if necessary */
			bandclip.min_y = ((band << mo->slipshift) - mo->yscroll + mo->slipoffset) & mo->bitmapymask;
			if (bandclip.min_y >= nScreenHeight)
				bandclip.min_y -= mo->bitmapheight;

			/* maximum Y is based on the minimum */
			bandclip.max_y = bandclip.min_y + (1 << mo->slipshift) - 1;

			/* keep within the cliprect */
		    sect_rect(&bandclip, cliprect);
		}

		/* if this matches the last link, we don't need to re-process the list */
		if (link != mo->last_link)
			build_active_list(mo, link);

		/* set the start and end points */
		if (mo->reverse)
		{
			first = mo->activelast - 1;
			last = mo->activelist - 1;
			step = -1;
		}
		else
		{
			first = mo->activelist;
			last = mo->activelast;
			step = 1;
		}

		/* initialize the parameters */
		mo->next_xpos = 123456;

		/* render the mos */
		for (current = first; current != last; current += step)
			mo_render_object(mo, *current, &bandclip);
	}

	/* convert the dirty grid to a rectlist */
	convert_dirty_grid_to_rects(mo, cliprect, rectlist);

	/* clip the rectlist */
	for (i = 0, rect = rectlist->rect; i < rectlist->numrects; i++, rect++)
		sect_rect(rect, cliprect);

	/* return the bitmap */
	return mo->bitmap;
}

void AtariMoRender(INT32 map, struct at


px 2px;margin-left:98px;z-index:9}.o_lp_tree.o_tree.o_path li div a.o_tree_oc_l6{left:99px}.o_lp_tree.o_tree.o_path li div span.o_tree_l6{padding:10px 2px 10px 2px;margin-left:113px;z-index:9}.o_lp_tree.o_tree.o_path li div a.o_tree_oc_l7{left:114px}.o_lp_tree.o_tree.o_path li div span.o_tree_l7{padding:10px 2px 10px 2px;margin-left:128px;z-index:9}.o_lp_tree.o_tree.o_path li div a.o_tree_oc_l8{left:129px}.o_lp_tree.o_tree.o_path li div span.o_tree_l8{padding:10px 2px 10px 2px;margin-left:143px;z-index:9}.o_lp_tree.o_tree.o_path li div a.o_tree_oc_l9{left:144px}.o_lp_tree.o_tree.o_path li div span.o_tree_l9{padding:10px 2px 10px 2px;margin-left:158px;z-index:9}.o_lp_tree.o_tree.o_path li div a.o_tree_oc_l10{left:159px}.o_lp_tree.o_tree.o_path li div span.o_tree_l10{padding:10px 2px 10px 2px;margin-left:173px;z-index:9}.o_lp_tree.o_tree.o_path li div a.o_tree_oc_l11{left:174px}.o_lp_tree.o_tree.o_path li div span.o_tree_l11{padding:10px 2px 10px 2px;margin-left:188px;z-index:9}.o_lp_tree.o_tree.o_path li.o_lp_status:before{content:" ";position:absolute;top:26px;left:8.5px;height:28px;width:2px}.o_lp_tree.o_tree.o_path li.o_lp_status:after{left:3px;background-color:unset;border-radius:unset}.o_lp_tree.o_tree.o_path li.o_lp_status.o_lp_in_review:after{border-radius:50%}.o_lp_tree.o_tree.o_path li.o_last_node:before{border:none}.o_lp_tree.o_tree.o_path li.o_lp_not_in_sequence:not(:last-child):not(.o_last_node):before,.o_lp_tree.o_tree.o_path li.o_lp_contains_no_sequence.children_visible:not(.o_last_node):before,.o_lp_tree.o_tree.o_path li.o_lp_contains_no_sequence.children_visible:not(.o_last_node) li.o_lp_not_in_sequence:not(.o_last_node):before{border-left:2px solid #888}.o_lp_list i.o_status.o_lp_not_accessible{color:#737373}.o_lp_list i.o_status.o_lp_not_accessible:before{content:"";font-weight:800}.o_lp_list i.o_status.o_lp_ready{color:#737373}.o_lp_list i.o_status.o_lp_ready:before{content:"";font-weight:400}.o_lp_list i.o_status.o_lp_in_progress{color:#fcca46}.o_lp_list i.o_status.o_lp_in_progress:before{content:"";font-weight:400}.o_lp_list i.o_status.o_lp_in_review{color:#3c763d}.o_lp_list i.o_status.o_lp_in_review:before{content:"";font-weight:800}.o_lp_list i.o_status.o_lp_done{color:#3c763d}.o_lp_list i.o_status.o_lp_done:before{content:"";


open,.view-action[aria-label] svg.lucide-book-open{-webkit-mask-image:url("data:image/svg+xml,%3Csvg id='Layer_1' height='100%25' viewBox='0 0 24 24' width='100%25' xmlns='http://www.w3.org/2000/svg' data-name='Layer 1'%3E%3Cpath d='m20 0a4 4 0 0 0 -4 4 1 1 0 0 0 2 0 2 2 0 0 1 4 0v11.026a4.948 4.948 0 0 0 -3-1.026 5 5 0 0 0 -4.145 2.207 3.98 3.98 0 0 0 -5.71 0 5 5 0 0 0 -4.145-2.207 4.948 4.948 0 0 0 -3 1.026v-11.026a2 2 0 0 1 4 0 1 1 0 0 0 2 0 4 4 0 0 0 -8 0v15a5 5 0 0 0 10 0 2 2 0 0 1 4 0 5 5 0 0 0 10 0v-15a4 4 0 0 0 -4-4zm-15 22a3 3 0 1 1 3-3 3 3 0 0 1 -3 3zm14 0a3 3 0 1 1 3-3 3 3 0 0 1 -3 3z'/%3E%3C/svg%3E")}.nav-action-button svg.lucide-chevrons-down-up{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' id='Layer_1' data-name='Layer 1' viewBox='0 0 24 24' width='100%25' height='100%25'%3E%3Cpath d='M10,11c.552,0,1,.448,1,1s-.448,1-1,1-1-.448-1-1,.448-1,1-1Zm-8,0c-.552,0-1,.448-1,1s.448,1,1,1,1-.448,1-1-.448-1-1-1Zm11,1c0,.552,.448,1,1,1s1-.448,1-1-.448-1-1-1-1,.448-1,1Zm-7-1c-.552,0-1,.448-1,1s.448,1,1,1,1-.448,1-1-.448-1-1-1Zm12,0c-.552,0-1,.448-1,1s.448,1,1,1,1-.448,1-1-.448-1-1-1Zm4,0c-.552,0-1,.448-1,1s.448,1,1,1,1-.448,1-1-.448-1-1-1Zm-11.414-2.586c.39,.39,.902,.585,1.414,.585s1.024-.195,1.414-.585l3.293-3.293c.391-.391,.391-1.023,0-1.414s-1.023-.391-1.414,0l-2.293,2.293V1c0-.553-.448-1-1-1s-1,.447-1,1V6l-2.293-2.293c-.391-.391-1.023-.391-1.414,0s-.391,1.023,0,1.414l3.293,3.293Zm2.828,7.172c-.779-.779-2.049-.779-2.828,0l-3.293,3.293c-.391,.391-.391,1.023,0,1.414s1.023,.391,1.414,0l2.293-2.293v5c0,.553,.448,1,1,1s1-.447,1-1v-5l2.293,2.293c.195,.195,.451,.293,.707,.293s.512-.098,.707-.293c.391-.391,.391-1.023,0-1.414l-3.293-3.293


  }

    public logout(){
        this.localStorageSvc.clear('username')
    }

}import { Atomizer } from '../src';

const testThemeObject = {
  space: [0, 4, 8, 16, 32, 64],
  fontSizes: [12, 14, 16, 20],
  fontWeights: {
    normal: '400',
    bold: 'bold',
  },
  colors: {
    blues: ['#004170', '#006fbe', '#2d8fd5', '#5aa7de'],
    green: '#0fa',
    red: {
      100: 'red',
      200: 'darkred',
    },
  },
  fonts: {
    serif: 'Helvetica',
  },
};

const myAtomizer = new Atomizer(testThemeObject);
const css = myAtomizer.convertToCss();

describe('Atomizer', () => {
  describe('Spaces', () => {
    it('should have created a bunch of padding classes', () => {
      testThemeObject.space.forEach((value, index) => {
        expect(css).toMatch(`.pa${index} { padding: ${value}px; }`);
        expect(css).toMatch(`.pt${index} { padding-top: ${value}px; }`);
        expect(css).toMatch(`.pb${index} { padding-bottom: ${value}px; }`);
        expect(css).toMatch(`.pl${index} { padding-left: ${value}px; }`);
        expect(css).toMatch(`.pr${index} { padding-right: ${value}px; }`);
      });
    });

    it('should have created a bunch of margin classes', () => {
      testThemeObject.space.forEach((value, index) => {
        expect(css).toMatch(`.ma${index} { margin: ${value}px; }`);
        expect(css).toMatch(`.mt${index} { margin-top: ${value}px; }`);
        expect(css).toMatch(`.mb${index} { margin-bottom: ${value}px; }`);
        expect(css).toMatch(`.ml${index} { margin-left: ${value}px; }`);
        expect(css).toMatch(`.mr${index} { margin-right: ${value}px; }`);
      });
    });
  });

  describe('Font-Sizes', () => {
    it('should have created a bunch of font size classes', () => {
      testThemeObject.fontSizes.forEach((value, index) => {
        expect(css).toMatch(`.f${index + 1} { font-size: ${value}px; }`);
      });
    });
  });

  describe('Colors', () => {
    it('should handle color array class generation', () => {
      testThemeObject.colors.blues.forEach((value, index) => {
        expect(css).toMatch(`.blues-${index} { color: ${value}; }`);
        expect(css).toMatch(
          `.bg-blues-${index} { background-color: ${value}; }`
        );
      });
    });

    it('should handle nested object class generation', () => {
      expect(css).toMatch(
        `.red-100 { color: ${testThemeObject.colors.red[100]}; }`
      );
      expect(css).toMatch(
        `.red-200 { color: ${testThemeObject.colors.red[200]}; }`
      );
      expect(css).toMatch(
        `.bg-red-100 { background-color: ${testThemeObject.colors.red[100]}; }`
      );
      expect(css).toMatch(
        `.bg-red-200 { background-color: ${testThemeObject.colors.red[200]}; }`
      );
    });

    it('should handle straight up key value pairs', () => {
      expect(css).toMatch(`.green { color: ${testThemeObject.colors.green}; }`);
      expect(css).toMatch(
        `.bg-green { background-color: ${testThemeObject.colors.green}; }`
      );
    });
  });
});
import { DisplayObject } from 'pixi.


writeCaretBrush : inactiveOverwriteCaretBrush;
			drawingContext.DrawGeometry(caretGeometry.IsOverwriteMode ? overwriteCaretBrush : caretBrush, null, geo);
		}

		void InitializeBrushes(out Brush brush, out Brush overwriteBrush, VSTC.IClassificationType classificationType) {
			var props = classificationFormatMap.GetTextProperties(classificationType);
			if (!props.BackgroundBrushEmpty)
				brush = props.BackgroundBrush;
			else {
				Debug.Assert(!classificationFormatMap.DefaultTextProperties.ForegroundBrushEmpty);
				brush = classificationFormatMap.DefaultTextProperties.ForegroundBrush;
				if (classificationFormatMap.DefaultTextProperties.ForegroundBrushEmpty)
					brush = Brushes.Black;
			}
			if (brush.CanFreeze)
				brush.Freeze();

			overwriteBrush = brush.Clone();
			overwriteBrush.Opacity = 0.5;
			if (overwriteBrush.CanFreeze)
				overwriteBrush.Freeze();
		}

		sealed class CaretGeometry {
			public bool IsOverwriteMode { get; private set; }
			public Rect Rect => rect;

			public Geometry? Geometry {
				get {
					if (!visible) {
						Debug2.Assert(geometry is null);
						return null;
					}
					if (geometry i


cfg_two_step_ra_r16_s::msg_pwr_offset_group_b_e_");
}

// PathlossReferenceRS-r16 ::= SEQUENCE
SRSASN_CODE pathloss_ref_rs_r16_s::pack(bit_ref& bref) const
{
  HANDLE_CODE(pack_integer(bref, srs_pathloss_ref_rs_id_r16, (uint8_t)0u, (uint8_t)63u));
  HANDLE_CODE(pathloss_ref_rs_r16.pack(bref));

  return SRSASN_SUCCESS;
}
SRSASN_CODE pathloss_ref_rs_r16_s::unpack(cbit_ref& bref)
{
  HANDLE_CODE(unpack_integer(srs_pathloss_ref_rs_id_r16, bref, (uint8_t)0u, (uint8_t)63u));
  HANDLE_CODE(pathloss_ref_rs_r16.unpack(bref));

  return SRSASN_SUCCESS;
}
void pathloss_ref_rs_r16_s::to_json(json_writer& j) const
{
  j.start_obj();
  j.write_int("srs-PathlossReferenceRS-Id-r16", srs_pathloss_ref_rs_id_r16);
  j.write_fieldname("pathlossReferenceRS-r16");
  pathloss_ref_rs_r16.to_json(j);
  j.end_obj();
}

// PDSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE
SRSASN_CODE pdsch_time_domain_res_alloc_r16_s::pack(bit_ref& bref) const
{
  bref.pack(ext, 1);
  HANDLE_CODE(bref.pack(k0_r16_present, 1));
  HANDLE_CODE(bref.pack(repeat_num_r16_present, 1));

  if (k0_r16_present) {
    HANDLE_CODE(pack_integer(bref, k0_r16, (uint8_t)0u, (uint8_t)32u));
  }
  HANDLE_CODE(map_type_r16.pack(bref));
  HANDLE_CODE(pack_integer(bref, start_symbol_and_len_r16, (uint8_t)0u, (uint8_t)127u));
  if (repeat_num_r16_present) {
    HANDLE_CODE(repeat_num_r16.pack(bref));
  }

  if (ext) {
    ext_groups_packer_guard group_flags;
    group_flags[0] |= k0_v1710_present;
    group_flags[1] |= repeat_num_v1730_present;
    group_flags.pack(bref);

    if (group_flags[0]) {
      varlength_field_pack_guard varlen_scope(bref, false);

      HANDLE_CODE(bref.pack(k0_v1710_present, 1));
      if (k0_v1710_present) {
        HANDLE_CODE(pack_integer(bref, k0_v1710, (uint8_t)33u, (uint8_t)128u));
      }
    }
    if (group_flags[1]) {
      varlength_field_pack_guard varlen_scope(bref, false);

      HANDLE_CODE(bref.pack(repeat_num_v1730_present, 1));
      if (repeat_num_v1730_present) {
        HANDLE_CODE(repeat_num_v1730.pack(bref));
      }
    }
  }
  return SRSASN_SUCCESS;
}
SRSASN_CODE pdsch_time_domain_res_alloc_r16_s::unpack(cbit_ref& bref)
{
  bref.unpack(ext, 1);
  HANDLE_CODE(bref.unpack(k0_r16_present, 1));
  HANDLE_CODE(bref.unpack(re


[] = "\x80\x00\x00\x00\x20grpc-status:0\r\ngrpc-message:ok\r\n";
const size_t TRAILERS_SIZE = sizeof(TRAILERS) - 1;
constexpr uint64_t MAX_BUFFERED_PLAINTEXT_LENGTH = 16384;

} // namespace

class GrpcWebFilterTest : public testing::TestWithParam<std::tuple<std::string, std::string>> {
public:
  GrpcWebFilterTest() : grpc_context_(*symbol_table_), filter_(grpc_context_) {
    filter_.setDecoderFilterCallbacks(decoder_callbacks_);
    filter_.setEncoderFilterCallbacks(encoder_callbacks_);
  }

  ~GrpcWebFilterTest() override { filter_.onDestroy(); }

  const std::string& requestContentType() const { return std::get<0>(GetParam()); }

  const std::string& requestAccept() const { return std::get<1>(GetParam()); }

  bool isTextRequest() const {
    return requestContentType() == Http::Headers::get().ContentTypeValues.GrpcWebText ||
           requestContentType() == Http::Headers::get().ContentTypeValues.GrpcWebTextProto;
  }

  bool isBinaryRequest() const {
    return requestContentType() == Http::Headers::get().ContentTypeValues.GrpcWeb ||
           requestContentType() == Http::Headers::get().ContentTypeValues.GrpcWebProto;
  }

  bool acceptTextResponse() const {
    return requestAccept() == Http::Headers::get().ContentTypeValues.GrpcWebText ||
           requestAccept() == Http::Headers::get().ContentTypeValues.GrpcWebTextProto;
  }

  bool acceptBinaryResponse() const {
    return requestAccept() == Http::Headers::get().ContentTypeValues.GrpcWeb ||
           requestAccept() == Http::Headers::get().ContentTypeValues.GrpcWebProto;
  }

  bool doStatTracking() const { return filter_.doStatTracking(); }

  void expectErrorResponse(const Http::Code& expected_code, const std::string& expected_message) {
    EXPECT_CALL(decoder_callbacks_, encodeHeaders_(_, _))
        .WillOnce(Invoke([=](Http::ResponseHeaderMap& headers, bool) {
          uint64_t code;
          ASSERT_TRUE(absl::SimpleAtoi(headers.getStatusValue(), &code));
          EXPECT_EQ(static_cast<uint64_t>(expected_code), code);
        }));
    EXPECT_CALL(decoder_callbacks_, encodeData(_, _))
        .WillOnce(Invoke(
            [=](Buffer::Instance& data, bool) { EXPECT_EQ(expected_message, data.toString()); }));
  }

  void expectRequiredGrpcUpstreamHeaders(const Http::TestRequestHeaderMapImpl& request_headers) {
    EXPECT_EQ(Http::Headers::get().ContentTypeValues.Grpc, request_headers.getContentTypeValue());
    // Ensure we never send content-length upstream
    EXPECT_EQ(nullptr, request_headers.ContentLength());
    EXPECT_EQ(Http::Headers::get().TEValues.Trailers, request_headers.getTEValue());
    EXPECT_EQ(Http::CustomHeaders::get().GrpcAcceptEncodingValues.Default,
              request_headers.get_(Http::CustomHeaders::get().GrpcAcceptEncoding));
  }

  bool isProtoEncodedGrpcWebContentType(const std::string& content_type) {
    Http::TestRequestHeaderMapImpl request_headers{{":path", "/"}};
    if (!content_type.empty()) {
      request_headers.addCopy(Http::Headers::get().ContentType, content_type);
    }
    return filter_.hasProtoEncodedGrpcWebContentType(request_headers);
  }

  bool isProtoEncodedGrpcWebResponseHeaders(const Http::ResponseHeaderMap& headers) {
    return filter_.isProtoEncodedGrpcWebResponseHeaders(headers);
  }

  void expectMergedAndLimitedResponseData(Buffer::Instance* encoded_buffer,
                                          Buffer::Instance* last_data,


"""passlib.tests.tox_support - helper script for tox tests"""
#=============================================================================
# init script env
#=============================================================================
import os, sys
root_dir = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
sys.path.insert(0, root_dir)

#=============================================================================
# imports
#=============================================================================
# core
import re
import logging; log = logging.getLogger(__name__)
# site
# pkg
from passlib.utils.compat import print_
# local
__all__ = [
]

#=============================================================================
# main
#=============================================================================
TH_PATH = "passlib.tests.test_handlers"

def do_hash_tests(*args):
    """return list of hash algorithm tests that match regexes"""
    if not args:
        print(TH_PATH)
        return
    suffix = ''
    args = list(args)
    while True:
        if args[0] == "--method":
            suffix = '.' + args[1]
            del args[:2]
        else:
            break
    from passlib.tests import test_handlers
    names = [TH_PATH + ":" + name + suffix for name in dir(test_handlers)
             if not name.startswith("_") and any(re.match(arg,name) for arg in args)]
    print_("\n".join(names))
    return not names

def do_preset_tests(name):
    """return list of preset test names"""
    if name == "django" or name == "django-hashes":
        do_hash_tests("django_.*_test", "hex_md5_test")
        if name == "django":
            print_("passlib.tests.test_ext_django")
    else:
        raise ValueError("unknown name: %r" % name)

def do_setup_gae(path, runtime):
    """write fake GAE ``app.yaml`` to current directory so nosegae will work"""
    from passlib.tests.utils import set_file
    set_file(os.path.join(path, "app.yaml"), """\
application: fake-app
version: 2
runtime: %s
api_version: 1
threadsafe: no

handlers:
- url: /.*
  script: dummy.py

libraries:
- name: django
  version: "latest"
""" % runtime)

def main(cmd, *args):
    return globals()["do_" + cmd](*args)

if __name__ == "__main__":
    import sys
    sys.exit(main(*sys.argv[1:]) or 0)

#=============================================================================
# eof
#=============================================================================


List<core.String>? consoleUris;

  /// Steps to resolve violation via cloud console
  core.List<core.String>? steps;

  $Console({this.additionalLinks, this.consoleUris, this.steps});

  $Console.fromJson(core.Map json_)
    : this(
        additionalLinks:
            (json_['additionalLinks'] as core.List?)
                ?.map((value) => value as core.String)
                .toList(),
        consoleUris:
            (json_['consoleUris'] as core.List?)
                ?.map((value) => value as core.String)
                .toList(),
        steps:
            (json_['steps'] as core.List?)
                ?.map((value) => value as core.String)
                .toList(),
      );

  core.Map<core.String, core.dynamic> toJson() => {
    if (additionalLinks != null) 'additionalLinks': additionalLinks!,
    if (consoleUris != null) 'consoleUris': consoleUris!,
    if (steps != null) 'steps': steps!,
  };
}

/// Used by:
///
/// - displayvideo:v3 : ContactInfo
/// - displayvideo:v4 : ContactInfo
class $ContactInfo {
  /// Country code of the member.
  ///
  /// Must also be set with the following fields: * hashed_first_name *
  /// hashed_last_name * zip_codes
  core.String? countryCode;

  /// A list of SHA256 hashed email of the member.
  ///
  /// Before hashing, remove all whitespace and make sure the string is all
  /// lowercase.
  core.List<core.String>? hashedEmails;

  /// SHA256 hashed first name of the member.
  ///
  /// Before hashing, remove all whitespace and make sure the string is all
  /// lowercase. Must also be set with the following fields: * country_code *
  /// hashed_last_name * zip_codes
  core.String? hashedFirstName;

  /// SHA256 hashed last name of the member.
  ///
  /// Before hashing, remove all whitespace and make sure the string is all
  /// lowercase. Must also be set with the following fields: * country_code *
  /// hashed_first_name * zip_codes
  core.String? hashedLastName;

  /// A list of SHA256 hashed phone numbers of the member.
  ///
  /// Before hashing, all phone numbers must be formatted using the \[E.164
  /// format\](//en.wikipedia.org/wiki/E.164) and include the country calling
  /// code.
  core.List<core.String>? hashedPhoneNumbers;

  /// A list of zip codes of the member.
  ///
  /// Must also be set with the following fields: * country_code *
  /// hashed_first_name * hashed_last_name
  core.List<core.String>? zipCodes;

  $ContactInfo({
    this.countryCode,
    this.hashedEmails,
    this.hashedFirstName,
    this.hashedLastName,
    this.hashedPhoneNumbers,
    this.zipCodes,
  });

  $ContactInfo.fromJson(core.Map json_)
    : this(
        countryCode: json_['countryCode'] as core.String?,
        hashedEmails:
            (json_['hashedEmails'] as core.List?)
                ?.map((value) => value as core.String)
                .toList(),
        hashedFirstName: json_['hashedFirstName'] as core.String?,
        hashedLastName: json_['hashedLastName'] as core.String?,
        hashedPhoneNumbers:
            (json_['hashedPhoneNumbers'] as core.List?)
                ?.map((value) => value as core.String)
                .toList(),
        zipCodes:
            (json_['zipCodes'] as core.List?)
                ?.map((value) => value as core.String)
                .toList


nstant großen Blöcken mit wenig wirtschaftlichem Nutzen führen. Bitcoin löst dieses Problem, indem es die Blockgröße künstlich einschränkt und dadurch einen Gebührenmarkt schafft. Spam-Angreifer müssten die anderen Nutzer mit Gebühren übertreffen, und das ist nicht mehr billig. Aber das bedeutet, dass die Blöcke voll werden und einige Transaktionen warten, wie oben erwähnt.
\n\n
Wie kann Monero also dynamische Blockgrößen haben und gleichzeitig Spam-Angriffe vermeiden? Die Antwort ist einfach, aber clever. Es wird ein Malus auf die Blockbelohnung eingeführt, wenn ein Block größer als normal ist. Wenn ein Miner die Blockgröße erhöhen möchte, ist die Belohnung, die er für das Finden dieses Blocks erhält, geringer als die, die er sonst erhalten würde. Er wird die Blockgröße also nur dann erhöhen, wenn die von den Nutzern gezahlten Transaktionsgebühren den verlorenen Teil der Blockbelohnung aufwiegen. Wenn der Miner beispielsweise 0,5 XMR verlieren würde, wenn er die Blockgröße erhöht, und die Summe der gezahlten Transaktionsgebühren 0,4 XMR betragen würde, dann gäbe es einen Nettoverlust von 0,1 XMR, wenn er die Größe erhöhen würde, also würde er es nicht tun. Umgekehrt, wenn sich die gesamten Transaktionsgebühren auf 0,7 XMR summieren würden, dann gäbe es einen Nettogewinn von 0,2 XMR, obwohl sie die 0,5 XMR aus der Blockbelohnung verlieren, also wird der Miner die Größe erhöhen.
\n\n
Diese dynamischen Blöcke ermöglichen es dem Netzwerk, organisch zu wachsen, ohne die Blockgröße künstlich einzuschränken, um einen erzwungenen Gebührenmarkt zu schaffen, und gleichzeitig Spam-Angriffe zu vermeiden. Es gibt noch einige weitere Blickwinkel, aus denen wir diese Idee betrachten können, und weitere Gründe, warum es nicht möglich wäre, Bitcoin hinzuzufügen, aber für den Moment hoffen wir, dass der Leser ein Verständnis dafür hat, wie Monero einige der Probleme in Bitcoin und seinen Derivaten umgeht und wie es plant, seinen Durchsatz in der Zukunft zu skalieren.
';

  @override
  String get knowledge250Sbblocks250Sbdescription => 'Wann immer Personen Probleme mit Blockchain diskutieren, wird eines der ersten Wörter, die auftauchen, „Skalierbarkeit“ sein. Monero zeichnet sich durch die Lösung dieses Problems aus.';

  @override
  String get knowledge250Sbblocks250Sbtitle => 'Wie Monero das Blockgrößenproblem löste, das Bitcoin plagt';

  @override
  String get knowledge250Sbbtc250Sb0250Sbtext => '
Monero ist eine Kryptowährung, die die Privatsphäre über alles andere stellt. Was die meisten Menschen jedoch nicht verstehen, ist, dass die Privatsphäre, die durch die Verwendung von Monero gewährt wird, weder kugelsicher noch in bestimmten Situationen absolut ist. Machen Sie keinen Fehler, Monero ist so privat, wie es im vertrauenslosen Bereich nur sein kann, aber es gibt einige Überlegungen, die Benutzer anstellen müssen, um sicherzustellen, dass ihre Privatsphäre stark bleibt.
\n\n
Das Gleiche g


tErr:      "not allowed access to any",
		},
		"only wildcard allowed due to deny rules": {
			db:               genericDB,
			allowedDBUsers:   []string{"*", "rootDBUser"},
			allowedDBNames:   []string{"*", "rootDBName"},
			expectErr:        "please provide",
			expectDBUserHint: "[*] except [rootDBUser]",
			expectDBNameHint: "[*] except [rootDBName]",
		},
		"has multiple db users": {
			db:               genericDB,
			allowedDBUsers:   []string{"alice", "bob"},
			allowedDBNames:   []string{"dev", "prod"},
			expectErr:        "please provide",
			expectDBUserHint: "[alice bob]",
			expectDBNameHint: "[dev prod]",
		},
	}

	for name, test := range tests {
		t.Run(name, func(t *testing.T) {
			role := &types.RoleV6{
				Metadata: types.Metadata{Name: "test-role", Namespace: apidefaults.Namespace},
				Spec: types.RoleSpecV6{
					Allow: types.RoleConditions{
						Namespaces:     []string{apidefaults.Namespace},
						DatabaseLabels: types.Labels{"*": []string{"*"}},
						DatabaseUsers:  test.allowedDBUsers,
						DatabaseNames:  test.allowedDBNames,
					},
					Deny: types.RoleConditions{
						Namespaces:    []string{apidefaults.Namespace},
						DatabaseUsers: []string{"rootDBUser"},
						DatabaseNames: []string{"rootDBName"},
					},
				},
			}
			accessChecker := services.NewAccessCheckerWithRoleSet(&services.AccessInfo{}, "clustername", services.NewRoleSet(role))
			dbUser, err := getDefaultDBUser(test.db, accessChecker)
			if test.expectErr != "" {
				require.ErrorContains(t, err, test.expectErr)
				if test.expectDBUserHint != "" {
					require.ErrorContains(t, err, fmt.Sprintf("allowed database users for test-db: %v", test.expectDBUserHint))
				}
				return
			}
			require.NoError(t, err)
			require.Equal(t, test.expectDBUser, dbUser)
			dbName, err := getDefaultDBName(test.db, accessChecker)
			if test.expectErr != "" {
				require.ErrorContains(t, err, test.expectErr)
				if test.expectDBNameHint != "" {
					require.ErrorContains(t, err, fmt.Sprintf("allowed database names for test-db: %v", test.expectDBNameHint))
				}
				return
			}
			require.NoError(t, err)
			require.Equal(t, test.expectDBName, dbName)
		})
	}
}

func TestResourceSelectors(t *testing.T) {
	t.Parallel()
	t.Run("formatting", testResourceSelectorsFormatting)
	t.Run("IsEmpty", testResourceSelectorsIsEmpty)
}

func testResourceSelectorsIsEmpty(t *testing.T) {
	t.Parallel()
	tests := []struct {
		desc      string
		selectors resourceSelectors
		wantEmpty bool
	}{
		{
			desc:      "no fields set",
			selectors: resourceSelectors{},
			wantEmpty: true,
		},
		{
			desc:      "kind field set",
			selectors: resourceSelectors{kind: "x"},
			wantEmpty: true,
		},
		{
			desc:      "name field set",
			selectors: resourceSelectors{name: "x"},
		},
		{
			desc:      "labels field set",
			selectors: resourceSelectors{labels: "x"},
		},
		{
			desc:      "query field set",
			selectors: resourceSelectors{query: "x"},
		},
	}


es="has-text-centered">

{"Likes"}

{"789"}

                </ybc::LevelItem>
            </ybc::Level>
        }
    }

    fn view_page() -> Html {
        html! {
            <>
            <ybc::Hero size={HeroSize::Medium} classes="is-primary"
                body=html!{
                    <ybc::Container fluid=true>

{"Hero Section"}

{"Basic Layout Skeleton using Bulma CSS Framework"}

                    </ybc::Container>
                }
            />
            <ybc::Section classes="has-background-white-bis">
                <ybc::Container fluid=true>

{"Section Example"}

{"A simple container to divide your page into "}{"sections"}{",like the one you're currently reading"}

                </ybc::Container>
            </ybc::Section>

            <ybc::Section size={SectionSize::Medium}>
                <ybc::Container fluid=true>

{"Levels Example"}

                {HomePage::view_levels()}
                </ybc::Container>
            </ybc::Section>

            <ybc::Section classes="has-background-white-er">
                <ybc::Container fluid=true classes="pb-6">

{"Tiles Example"}

                    {HomePage::view_tiles()}
                </ybc::Container>
            </ybc::Section>
            </>
        }
    }
}

impl Component for HomePage {
    type Properties = ();
    type Message = ();
    fn create(_: Self::Properties, _: ComponentLink<Self>) -> Self {
        Self
    }

    fn update(&mut self, _: Self::Message) -> ShouldRender {
        true
    }

    fn change(&mut self, _props: Self::Properties) -> ShouldRender {
        true
    }
    /* .. snip .. */
    fn view(&self) -> Html {
        html! {
          <>
          {HomePage::view_page()}
        </>
        }
    }
}
<filename>src/strings/distance.rs
use std::cmp::{max, min};

fn levenshtein_distance(it_a: &mut dyn Iterator<Item=A>, it_b: &mut dyn Iterator<Item=A>) -> usize {
    let vec_a: Vec<_> = it_a.collect();
    let vec_b: Vec<_> = it_b.collect();
    match (vec_a.len(), vec_b.len()) {
        (0, b) => b,
        (a, 0) => a,
        (a, b) => {
            if a <= b {
                levenshtein(vec_a, vec_b)
            } else {
                levenshtein(vec_b, vec_a)
            }
        }
    }
}

fn levenshtein(vec_a: Vec, vec_b: Vec) -> usize {
    let (mut left, mut top, mut across);
    let m= vec_a.len();
    let mut cache: Vec<usize> = Vec::with_capacity(m);
    (0..m).for_each(|i| cache.push(i + 1));
    for (i, item_b) in vec_b.iter().enumerate() {
        left = i + 1;
        across = left - 1;
        for (j, item_a) in vec_a.iter().enumerate() {
            top = cache[j];
            if item_a.eq(item_b) {
                cache[j] = across;
            } else {
                cache[j] = min_3(left, across, top) + 1;
            }
            across = top;
            left = cache[j];
        }
    }
    cache[


ct.keys(dictionary).find(_symbol => aliases.includes(_symbol));
    if (!symbol) {
      console.log(`no voicings found for chord "${chordSymbol}"`);
      return [];
    }
    let notes;
    if (!lastVoicing?.length) {
      //notes = voicings[Math.ceil(voicings.length / 2)]; // pick middle voicing..
      notes = voicings[0]; // pick lowest voicing..
    } else {
      // calculates the distance between the last note and the given voicings top note
      // sort voicings with differ
      notes = voiceLeading(voicings, lastVoicing);
    }
    return notes;
  },
  // returns all possible voicings of the given chord, as defined in the dictionary, inside the given range
  search: (chord, range = ['D3', 'A4'], dictionary = VoicingDictionary.triads): string[][] => {
    let [tonic, symbol] = Chord.tokenize(chord);
    if (!dictionary[symbol]) {
      const { aliases } = Chord.get(chord);
      if (!!aliases.length) {
        symbol = Object.keys(dictionary).find(_symbol => aliases.includes(_symbol)) || null;
      }
    }
    // find equivalent symbol that is used as a key in dictionary:
    if (!symbol || !dictionary[symbol]) {
      return [];
    }
    // resolve array of interval arrays for the wanted symbol
    const voicings = dictionary[symbol].map(intervals => intervals.split(' '));
    const notesInRange = Range.chromatic(range) // gives array of notes inside range
    return voicings.reduce((voiced: string[][], voicing: string[]) => {
      // transpose intervals relative to first interval (e.g. 3m 5P > 1P 3M)
      const relativeIntervals = voicing.map(interval => Interval.substract(interval, voicing[0]));
      // get enharmonic correct pitch class the bottom note
      const bottomPitchClass = Note.transpose(tonic, voicing[0]);
      // get all possible start notes for voicing
      const starts = notesInRange
        // only get the start notes:
        .filter(note => Note.chroma(note) === Note.chroma(bottomPitchClass))
        // filter out start notes that will overshoot the top end of the range
        .filter(note => Note.midi(Note.transpose(note, relativeIntervals[relativeIntervals.length - 1])) <= Note.midi(range[1]))
        // replace Range.chromatic notes with the correct enharmonic equivalents
        .map(note => enharmonicEquivalent(note, bottomPitchClass))
      // render one voicing for each start note
      const notes = starts.map(start => relativeIntervals.map(interval => Note.transpose(start, interval)));
      return voiced.concat(notes);
    }, [])
  },
  // voices all given chords, using the specified voiceLeading function between each
  sequence: (chords, range?, dictionary?, voiceLeading?, lastVoicing?) => {
    const { voicings } = chords.reduce(
      ({ voicings, lastVoicing }, chord) => {
        const voicing = Voicing.get(chord, range, dictionary, voiceLeading, lastVoicing);
        lastVoicing = voicing;
        voicings.push(voicing)
        return { voicings, lastVoicing }
      }, { voicings: [], lastVoicing }
    )


="YOUR_COLLECTION_NAME"  # The name of the collection to grant access to. Use "*" to grant access to all collections.
)
<button class="copy-code-btn"></button>

GrantPrivilegeReq grantPrivilegeReq = GrantPrivilegeReq.builder()
        .roleName("roleName")
        .objectName("CollectionName") // The name of the collection to grant access to. Use "*" to grant access to all collections.
        .objectType("Collection") // Valid value: Global, Collection or User.
        .privilege("CreateIndex") // See the table below for valid privilege names and relevant API descriptions.
        .build();
client.grantPrivilege(grantPrivilegeReq);
<button class="copy-code-btn"></button>

milvusClient.grantPrivilege({
   roleName: 'roleName',
   object: 'Collection',  // Valid value: Global, Collection or User.
   objectName: 'CollectionName', // The name of the collection to grant access to. Use "*" to grant access to all collections.
   privilegeName: 'CreateIndex' // See the table below for valid privilege names and relevant API descriptions.
 })
<button class="copy-code-btn"></button>

Para obter mais informações sobre APIs relacionadas a privilégios, consulte grant_privilege e revoke_privilege.

Para obter mais informações sobre APIs relacionadas a privilégios, consulte grantPrivilege e revokePri


�于有关法律规定的可以拒绝提供刑事司法协助情形的，可以不予协助。

第四百九十三条 人民法院请求外国提供司法协助的，应当层报最高人民法院，经最高人民法院审核同意后交由有关对外联系机关及时向外国提出请求。

外国法院请求我国提供司法协助，有关对外联系机关认为属于人民法院职权范围的，经最高人民法院审核同意后转有关人民法院办理。

第四百九十四条 人民法院请求外国提供司法协助的请求书，应当依照刑事司法协助条约的规定提出；没有条约或者条约没有规定的，应当载明法律规定的相关信息并附相关材料。请求书及其所附材料应当以中文制作,并附有被请求国官方文字的译本。

外国请求我国法院提供司法协助的请求书，应当依照刑事司法协助条约的规定提出；没有条约或者条约没有规定的，应当载明我国法律规定的相关信息并附相关材料。请求书及所附材料应当附有中文译本。

第四百九十五条 人民法院向在中华人民共和国领域外居住的当事人送达刑事诉讼文书，可以采用下列方式：

（一）根据受送达人所在国与中华人民共和国缔结或者共同参加的国际条约规定的方式送达；

（二）通过外交途径送达;

（三）对中国籍当事人，所在国法律允许或者经所在国同意的，可以委托我国驻受送达人所在国的使领馆代为送达；

（四）当事人是自诉案件的自诉人或者附带民事诉讼原告人的，可以向有权代其接受送达的诉讼代理人送达；

（五）当事人是外国单位的，可以向其在中华人民共和国领域内设立的代表机构或者有权接受送达的分支机构、业务代办人送达；

（六）受送达人所在国法律允许的，可以邮寄送达；自邮寄之日起满三个月，送达回证未退回，但根据各种情况足以认定已经送达的，视为送达；

（七）受送达人所在国法律允许的，可以采用传真、电子邮件等能够确认受送


from model import BRC
from generator import Generator
import glob
import os
from keras.optimizers import Adam
from random import shuffle
from keras.callbacks import ModelCheckpoint, TensorBoard,EarlyStopping
import matplotlib.pyplot as plt

def process(paths):

	# Get the model
	model = BRC()
	model.model.summary()

	# Get the generator
	img_list = glob.glob(os.path.join(paths,'*.jpg'))
	shuffle(img_list)
	split = int(0.8*len(img_list))
	print("split value",split)
	train = Generator(img_list[0:split],8)
	valid = Generator(img_list[split:],8).__getitem__(5)

	# Compile model then run
	optimizer = Adam(lr = 0.002)
	model.model.compile(loss = 'mean_squared_error',optimizer = optimizer)

	# Define Callbacks (save model, validation etc)
	ckpt = ModelCheckpoint('model.h5',save_best_only=True,mode = 'min')
	tsb = TensorBoard(log_dir=os.path.join( os.getcwd(),'logs' ),write_graph=True,histogram_freq=1)
	early_stop_cb = EarlyStopping(monitor='val_loss',min_delta=0.001,patience=3,mode='min',verbose=1)
	callback = [ckpt,tsb,early_stop_cb]

	# Train the model
	run_hist_2=model.model.fit_generator(generator = train,steps_per_epoch = 5,epochs = 5,verbose = 1,validation_data = valid,callbacks = callback)

	fig = plt.figure()
	plt.plot(run_hist_2.history["loss"],'r', marker='.', label="Train Loss")
	plt.plot(run_hist_2.history["val_loss"],'b', marker='.', label="Validation Loss")
	plt.title("Train loss and validation error with dropouts")
	plt.legend()
	plt.grid()
	fig.savefig('TrainLoss.png')
	plt.pause(5)
	plt.show(block=False)
	plt.close()


	.regstk	1, 0, 0, 0

// The mutex call parameter isnt used at all in assembly...

	.global ia64_cpuid
	.proc	ia64_cpuid
	.align	32

ia64_cpuid:

	{	.mfi
		alloc			at0 = ar.pfs, 1,0,0,0
		nop			0x0
		nop			0x0
	}
	;;
	{	.mfb
		mov                     r8 = cpuid[in0]
		nop			0x0
		br.ret.sptk.few		rp
	}
	;;

	.endp	 ia64_cpuid


# Cloud Build Remote Build Step

## Introduction

![Architecture Diagram](docs/arch.png)

Some continuous integration workloads require special builder types. You may
require things like:

1. High CPU/Memory machines
1. Custom image
1. GPUs attached
1. Fast or large disks
1. Machines in a particular network
1. Pre-emptibility

In these cases you can leverage Container Builder to trigger your builds and
manage their workflow but run the actual build steps on an instance with
exactly the configuration you need.

## How?

When using the remote-builder image, the following will happen:

1. A temporary SSH key will be created in your Container Builder workspace
1. A instance will be launched with your configured flags
1. The workpace will be copied to the remote instance
1. Your command will be run inside that instance's workspace
1. The workspace will be copied back to your Container Builder workspace

## Usage

In order to use this step, first build the builder:

```
gcloud builds submit --config=cloudbuild.yaml .
```

Then, create an appropriate IAM role with permissions to create and destroy
Compute Engine instances in this project:

```
export PROJECT=$(gcloud info --format='value(config.project)')
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')
export CB_SA_EMAIL=$PROJECT_NUMBER@cloudbuild.gserviceaccount.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable compute.googleapis.com
gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$CB_SA_EMAIL --role='roles/iam.serviceAccountUser' --role='roles/compute.instanceAdmin.v1' --role='roles/iam.serviceAccountActor'
```

Then, configure your build step as follows:

```
steps:
- name: gcr.io/$PROJECT_ID/remote-builder
  env:
    - COMMAND=ls -la
```

This will launch an instance with the default parameters and then run the
command `ls -la` inside the instance's workspace.

## Configuration

The following options are configurable via environment variables passed to the
build step in the `env` parameter:

| Options       | Description   | Default |
| ------------- | ------------- | ------- |
| GCLOUD | The expression to use as the `gcloud` command-line utility. Can be set to `gcloud alpha` or `gcloud beta`, as examples. | `gcloud` |
| COMMAND | Command to run inside the remote workspace | None, must be set |
| USERNAME  | Username to use when logging into the instance via SSH  | `admin` |
| REMOTE_WORKSPACE  | Location on remote host to use as workspace | `/home/${USERNAME}/workspace/` |
| INSTANCE_NAME  | Name of the instance that is launched  | `builder-$UUID` |
| ZONE  | Compute zone to launch the instance in | `us-central1-f` |
| INSTANCE_ARGS| Parameters to the instance creation command. For a full list run `gcloud compute instances create --help` | `--preemptible` |
| SSH_ARGS| Parameters to the ssh and scp commands. This can be useful to run ssh though a IAP tunnel with ```--tunnel-though-iap``` | None |
| RETRIES| The number of retries to wait for the instance to start accepting SSH connections | `10` |

To give it a try, see the [examples directory](https://github.com/GoogleCloudPlatform/cloud-builders-community/tree/master/remote-builder/examples).

This is not an official Google product.

## Trade-offs

1. Paying for builder + VM
2. Spin up time of VM increases build time

# Cancelot

Cancelot (thank you Twitter for the name :D) allows you to cancel previous builds running for the same branch,
when you are using VCS triggered builds.

# Purpose

Cancelot was built because there is no out of the box solution by CloudBuild, in order to cancel a previous running
build upon a new commit in the same branch. This can save a lot of build minutes


USH(TEXT("editor/icon_umg_kantanpiechart_16x"), Icon16x16));
	//Style->Set("ClassIcon.SimplePieChart", new IMAGE_BRUSH(TEXT("editor/icon_umg_kantanpiechart_16x"), Icon16x16));
	Style->Set("ClassIcon.CartesianPlot", new IMAGE_BRUSH(TEXT("editor/icon_umg_kantancartesianchart_16x"), Icon16x16));
	Style->Set("ClassIcon.SimpleCartesianPlot", new IMAGE_BRUSH(TEXT("editor/icon_umg_kantancartesianchart_16x"), Icon16x16));
	Style->Set("ClassIcon.TimeSeriesPlot", new IMAGE_BRUSH(TEXT("editor/icon_umg_kantantimeseriesplot_16x"), Icon16x16));
	Style->Set("ClassIcon.SimpleTimeSeriesPlot", new IMAGE_BRUSH(TEXT("editor/icon_umg_kantantimeseriesplot_16x"), Icon16x16));
	Style->Set("ClassIcon.KantanChartLegend", new IMAGE_BRUSH(TEXT("editor/icon_umg_chartlegend_16x"), Icon16x16));

	return Style;
}

#undef IMAGE_BRUSH
#undef BOX_BRUSH
#undef BORDER_BRUSH
#undef TTF_FONT
#undef OTF_FONT

void FKantanChartsStyleSet::ReloadTextures()
{
	FSlateApplication::Get().GetRenderer()->ReloadTextureResources();
}

const ISlateStyle& FKantanChartsStyleSet::Get()
{
	// @TODO: Temp workaround for monolithic build initialization order issue.
	// UObject CDOs are getting constructed before a module that their own module has a
	// dependency on is initialized...
	if (!StyleInstance.IsValid())
	{
		Initialize();
	}
	//

	return *StyleInstance;
}

// Copyright (C) 2015-2018 Cameron Angus. All Rights Reserved.

#include "SimpleTimeSeriesPlot.h"

#include "Blueprint/WidgetTree.h"

#define LOCTEXT_NAMESPACE "KantanCharts"

USimpleTimeSeriesPlot::USimpleTimeSeriesPlot(FObjectInitializer const& OI) : Super(OI)
{

}

void USimpleTimeSeriesPlot::BP_AddSeriesWithId(
	bool& bSuccess,
	FName Id,
	FText Name,
	bool bEnabled,
	bool bShowPoints,
	bool bShowLines
	)
{
	bSuccess = AddSeries(Id, Name);
	if (bSuccess)
	{
		EnableSeries(Id, bEnabled);
		ConfigureSeries(Id, bShowPoints, bShowLines);
	}
}

void USimpleTimeSeriesPlot::BP_AddSeries(
	FName& SeriesId,
	FText Name,
	bool bEnabled,
	bool bShowPoints,
	bool bShowLines)
{
	SeriesId = AddSeries(Name);
	EnableSeries(SeriesId, bEnabled);
	ConfigureSeries(SeriesId, bShowPoints, bShowLines);
}

void USimpleTimeSeriesPlot::BP_RemoveSeries(FName Id, bool& bSuccess)
{
	bSuccess = RemoveSeries(Id);
}

void USimpleTimeSeriesPlot::BP_RemoveAllSeries()
{
	RemoveAllSeries();
}

void USimpleTimeSeriesPlot::BP_AddDatapoint(FName SeriesId, FVector2D const& Point, bool& bSuccess)
{
	bSuccess = AddDatapoint(SeriesId, Point);
}

void USimpleTimeSeriesPlot::BP_AddDatapointNow(FName SeriesId, float Value, bool& bSuccess)
{
	// Our outer is the UWidgetTree, and that has access to the UWorld (via UUserWidget, which is its outer)
	auto const World = Cast< UWidgetTree >(GetOuter())->GetWorld();
	auto const Time = World->GetTimeSeconds();
	auto const Point = FVector2D(Time, Value);
	bSuccess = AddDatapoint(SeriesId, Point);
}

void USimpleTimeSeriesPlot::BP_SetDatapointLimit(int32 Limit /*= 0*/)
{
	SetDatapointLimit(FMath::Max(


),
			Vector3d(x, 0.0, z),
			Vector3d(-x, 0.0, -z),
			Vector3d(x, 0.0, -z),
			Vector3d(0.0, z, x),
			Vector3d(0.0, z, -x),
			Vector3d(0.0, -z, x),
			Vector3d(0.0, -z, -x),
			Vector3d(z, x, 0.0),
			Vector3d(-z, x, 0.0),
			Vector3d(z, -x, 0.0),
			Vector3d(-z, -x, 0.0)
		)

		// these points are already pretty close to the unit sphere, but project them just to be sure
		vertices.forEach { it.normalize() }

		// create the faces
		add(Face(vertices[1], vertices[6], vertices[10]))
		add(Face(vertices[1], vertices[10], vertices[8]))
		add(Face(vertices[1], vertices[8], vertices[4]))
		add(Face(vertices[1], vertices[4], vertices[0]))
		add(Face(vertices[1], vertices[0], vertices[6]))

		add(Face(vertices[6], vertices[7], vertices[10]))
		add(Face(vertices[10], vertices[3], vertices[8]))
		add(Face(vertices[8], vertices[5], vertices[4]))
		add(Face(vertices[4], vertices[9], vertices[0]))
		add(Face(vertices[0], vertices[11], vertices[6]))

		add(Face(vertices[10], vertices[7], vertices[3]))
		add(Face(vertices[8], vertices[3], vertices[5]))
		add(Face(vertices[4], vertices[5], vertices[9]))
		add(Face(vertices[0], vertices[9], vertices[11]))
		add(Face(vertices[6], vertices[11], vertices[7]))

		add(Face(vertices[7], vertices[2], vertices[3]))
		add(Face(vertices[3], vertices[2], vertices[5]))
		add(Face(vertices[5], vertices[2], vertices[9]))
		add(Face(vertices[9], vertices[2], vertices[11]))
		add(Face(vertices[11], vertices[2], vertices[7]))
	}

	var subdivisions: Int = 0
		private set

	fun subdivide(times: Int) {
		for (i in 0 until times) {
			subdivide()
		}
	}

	fun subdivide() {

		val newFaces = ArrayList<Face>(faces.size*4)

		for (face in faces) {

			// get the vertices
			val a = face.vertices[0]
			val b = face.vertices[1]
			val c = face.vertices[2]

			// bisect the edges and project the midpoints to the unit sphere
			fun midpoint(s: Vector3d, t: Vector3d) =
				Vector3d(s)
					.add(t)
					.normalize()

			val ab = midpoint(a, b)
			val bc = midpoint(b, c)
			val ca = midpoint(c, a)

			// construct the new faces
			newFaces.add(Face(a, ab, ca))
			newFaces.add(Face(ab, bc, ca))
			newFaces.add(Face(ab, b, bc))
			newFaces.add(Face(ca, bc, c))
		}

		faces = newFaces
		subdivisions += 1
	}

	constructor (subdivisions: Int) : this() {
		subdivide(subdivisions)
	}

	override fun iterator(): Iterator<Vector3d> =
		faces.map { it.midpoint }.iterator()
}

// tool to generate sphere grids for use in e.g. the ambient occlusion shader
fun main() {

	// def


 Time step
internal const val dampen: Float = .9995f // Dampening factor

internal const val straight = .5f // Length of straight edge
internal val diagonal = kotlin.math.sqrt(straight * straight + straight * straight) // Length of diagonal edge

internal val D = 2 // Dimensionality

/**
 * Create vertices given [s], the number of vertices on the side of the square.
 */
fun makeVertices(s: Int): List<Vertex> {
    return List(s * s) { id ->
        Vertex(id % s * straight + -.75f, id / s * straight + 1f,
            mass
        )
    }
}

/**
 * Create edges given [s], the number of vertices on the side of the square.
 */
fun makeEdges(s: Int): List<Edge> {
    val N = s * s
    return (0 until N).flatMap { x ->
        listOf(
            Edge(x, x + 1, straight),
            Edge(x, x + s, straight),
            Edge(x + 1, x + s, diagonal),
            Edge(x, x + s + 1, diagonal)
        ).mapNotNull { (start, end, len) ->
            if (end >= N || (start % s == s - 1 && end % s == 0) || (start % s == 0 && end % s == s - 1))
                null else Edge(start, end, len)
        }
    }
}
/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

package examples.utils.visualization

import examples.hookeanSpring.softbody.Edge
import examples.hookeanSpring.softbody.Vertex
import org.diffkt.*
import org.openrndr.MouseButton
import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.math.Vector2

private const val WINDOW_SIZE = 1000
private const val CENTER = WINDOW_SIZE / 2
private const val SCALING_FACTOR = 150.0
private const val DEFAULT_RADIUS = 20.0

/**
 * Scale coordinate to be approximately centered for visualization.
 *
 * This assumes that the vertices are somewhat centered around (0,0).
 */
private fun DTensor.toVector(): Vector2 {
    require(this is FloatTensor)
    require(this.shape == Shape(2))
    return Vector2(
        (CENTER + this.at(0) * SCALING_FACTOR),
        (CENTER - this.at(1) * SCALING_FACTOR)
    )
}

private fun Vector2.toTensor(): DTensor {
    return tensorOf(
        ((this.x - CENTER) / SCALING_FACTOR).toFloat(),
        ((- this.y + CENTER) / SCALING_FACTOR).toFloat()
    )
}

/**
 * Animates 2D vertices and edges.
 */
fun animate(
    name: String,
    init: FloatTensor, update: (DTensor) -> DTensor,
    edges: List<Pair<Int, Int>>? = null,
    radii: List<Double>? = null,
    interval: Int
) {
    require(init.shape[1] == 2) { "Animation is for 2D vertices only." }
    var vertices = init

    // Get the ith vertex position to draw.
    fun getVertexCoordinates(i: Int): Vector2 {
        return vertices[i].toVector()
    }

    application {
        configure {
            title = name
            width = WINDOW_SIZE
            height = WINDOW_SIZE
            windowResizable = true
        }

        program {
            var downPos: Vector2? = null
            mouse.buttonDown.listen { if (it.button == MouseButton.LEFT) downPos = it.position }

            var dragPos: Vector2? = null
            mouse.dragged.listen { if (it.button == MouseButton.LEFT) dragPos = it.position }

            var releasePos: Vector2? = null
            mouse.buttonUp.listen { if (it.button == MouseButton.LEFT) releasePos = it.position }

            var selectedVertexId: Int? = null

            extend {
                // Update xTensor before displaying.
                repeat(interval) { vertices = update(vertices) as Flo


/* { dg-do run } */
/* { dg-options "-fdump-tree-crc-details -w" } */
/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-g" "-Os" "-flto" } } */

#include <stdlib.h>

typedef unsigned char ee_u8;

__attribute__ ((noinline,optimize(0)))
ee_u8 crcu8_O0(ee_u8 data, ee_u8 crc) {
  ee_u8 i = 0, x16 = 0, carry = 0;
  for (i = 0; i < 8; i++) {
      x16 = ((data & 1) ^ (crc & 1));
      data >>= 1;
      if (x16 == 1) {
	  crc ^= 0x40;
	  carry = 1;
	} else
	carry = 0;
      crc >>= 1;
      if (carry)
	crc |= 0x80;
      else
	crc &= 0x7f;
    }
  return crc;
}

ee_u8 crcu8(ee_u8 data, ee_u8 crc) {
  ee_u8 i = 0, x16 = 0, carry = 0;
  for (i = 0; i < 8; i++) {
      x16 = ((data & 1) ^ (crc & 1));
      data >>= 1;
      if (x16 == 1) {
	  crc ^= 0x40;
	  carry = 1;
	} else
	carry = 0;
      crc >>= 1;
      if (carry)
	crc |= 0x80;
      else
	crc &= 0x7f;
    }
  return crc;
}

int main ()
{
  ee_u8 crc = 0;
  for (ee_u8 i = 0; i < 0xff; i++)
    {
      ee_u8 res1 = crcu8_O0 (i, crc);
      ee_u8 res2 = crcu8 (i, crc);
      if (res1 != res2)
	abort ();
      crc = res1;
    }
}
/* { dg-final { scan-tree-dump "function maybe contains CRC calculation." "crc" } } */
/* { dg-final { scan-tree-dump "Loop iteration number is 7" "crc" } } */
/* { dg-final { scan-tree-dump "Bit reversed" "crc" } } */
/* { dg-final { scan-tree-dump "calculates CRC!" "crc" } } */


常。</exception>
    public int Size(TKey lo, TKey hi)
    {
        if (lo == null)
            throw new ArgumentNullException(nameof(lo), "first argument to Size() is null");
        if (hi == null)
            throw new ArgumentNullException(nameof(hi), "second argument to Size() is null");

        if (lo.CompareTo(hi) > 0)
            return 0;
        if (Contains(hi))
            return Rank(hi) - Rank(lo) + 1;
        return Rank(hi) - Rank(lo);
    }

    /// <summary>
    /// 为符号表重新分配空间。
    /// </summary>
    /// <param name="capacity">重新分配的大小。</param>
    /// <exception cref="ArgumentOutOfRangeException">当 <paramref name="capacity"/> <see cref="_n"/> 时抛出该异常。</exception>
    private void Resize(int capacity)
    {
        if (capacity < _n)
            throw new ArgumentOutOfRangeException(nameof(capacity), "分配容量不能小于表中元素数量。");
        var tempKeys = new TKey[capacity];
        var tempValues = new TValue?[capacity];
        for (var i = 0; i < _n; i++)
        {
            tempKeys[i] = _keys[i]!;
            tempValues[i] = _value


 "error.cant.open", "\u65E0\u6CD5\u6253\u5F00: {0}" },
            { "error.create.dir", "{0}: \u65E0\u6CD5\u521B\u5EFA\u76EE\u5F55" },
            { "error.create.tempfile", "\u65E0\u6CD5\u521B\u5EFA\u4E34\u65F6\u6587\u4EF6" },
            { "error.hash.dep", "\u6B63\u5728\u5BF9\u6A21\u5757 {0} \u7684\u88AB\u4F9D\u8D56\u5BF9\u8C61\u6267\u884C\u6563\u5217\u5904\u7406, \u5728\u6A21\u5757\u8DEF\u5F84\u4E2D\u627E\u4E0D\u5230\u6A21\u5757 {1}" },
            { "error.illegal.option", "\u975E\u6CD5\u9009\u9879: {0}" },
            { "error.incorrect.length", "\u5904\u7406\u65F6\u9047\u5230\u4E0D\u6B63\u786E\u7684\u957F\u5EA6: {0}" },
            { "error.invalid.versioned.module.attribute", "\u65E0\u6548\u7684\u6A21\u5757\u63CF\u8FF0\u7B26\u5C5E\u6027 {0}" },
            { "error.missing.arg", "\u9009\u9879{0}\u9700\u8981\u53C2\u6570" },
            { "error.missing.provider", "\u672A\u627E\u5230\u670D\u52A1\u63D0\u4F9B\u65B9: {0}" },
            { "error.module.descriptor.not.found", "\u627E\u4E0D\u5230\u6A21\u5757\u63CF\u8FF0\u7B26" },
            { "error.module.options.without.info", "--module-version \u6216 --hash-modules \u4E4B\u4E00\u6CA1\u6709 module-info.class" },
            { "error.multiple.main.operations", "\u4E0D\u80FD\u6307\u5B9A\u591A\u4E2A '-cuxtid' \u9009\u9879" },
            { "error.no.operative.descriptor", "\u6CA1\u6709\u53D1\u884C\u7248\u7684\u6709\u6548\u63CF\u8FF0\u7B26: {0}" },
            { "error.no.root.descriptor", "\u6CA1\u6709\u6839\u6A21\u5757\u63CF\u8FF0\u7B26, \u8BF7\u6307\u5B9A --release" },
            { "error.nosuch.fileordir", "{0}: \u6CA1\u6709\u8FD9\u4E2A\u6587\u4EF6\u6216\u76EE\u5F55" },
            { "error.release.unexpected.versioned.entry", "\u53D1\u884C\u7248 {1} \u5B58\u5728\u610F\u5916\u7684\u7248\u672C\u5316\u6761\u76EE {0}" },
            { "error.release.value.notnumber", "\u53D1\u884C\u7248 {0} \u65E0\u6548" },
            { "error.release.value.toosmall", "\u53D1\u884C\u7248 {0} \u65E0\u6548, \u5FC5\u987B >= 9" },
            { "error.unable.derive.automodule", "\u65E0\u6CD5\u6D3


/*
** FamiTracker - NES/Famicom sound tracker
** Copyright (C) 2005-2014  Jonathan Liss
**
** 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
** Library General Public License for more details.  To obtain a
** copy of the GNU Library General Public License, write to the Free
** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
** Any permitted reproduction of these routines, in whole or in part,
** must bear this legend.
*/

/*
 * Triangle wave generation
 *
 */

#ifndef TRIANGLE_H
#define TRIANGLE_H

#include "Channel.h"

class CTriangle : public CChannel {
public:
	CTriangle(CMixer *pMixer, int ID);
	~CTriangle();

	void	Reset();
	void	Write(uint16 Address, uint8 Value);
	void	WriteControl(uint8 Value);
	uint8	ReadControl();
	void	Process(uint32 Time);

	void	LengthCounterUpdate();
	void	LinearCounterUpdate();

private:
	static const uint8 TRIANGLE_WAVE[];

private:
	uint8	m_iLoop, m_iLinearLoad, m_iHalt;
	uint16	m_iLinearCounter;
	int8	m_iStepGen;
};

#endif /* TRIANGLE_H */


:xlink="http://www.w3.org/1999/xlink" width="16" height="16" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M2.873 1.1c.335.136.602.398.745.73.072.17.109.352.107.537a1.34 1.34 0 01-.61 1.135 1.359 1.359 0 01-.753.223A1.355 1.355 0 011 2.362a1.355 1.355 0 01.83-1.256A1.37 1.37 0 012.873 1.1zm-.298 1.765a.551.551 0 00.332-.5.548.548 0 10-.332.5zM6.43 1.109 1.11 6.43l.686.687 5.32-5.32-.686-.687zM11.5 9h1v2.5H15v1h-2.5V15h-1v-2.5H9v-1h2.5V9zm-5.732.525.707.707L4.707 12l1.768 1.768-.707.707L4 12.707l-1.768 1.768-.707-.707L3.293 12l-1.768-1.768.707-.707L4 11.293l1.768-1.768zm1.35-4.195a1.353 1.353 0 00-1.256-.83 1.355 1.355 0 00-1.256.83 1.362 1.362 0 001.257 1.895A1.358 1.358 0 007.118 5.33zm-.753.745a.553.553 0 01-.289.29.547.547 0 01-.599-.117.529.529 0 01-.117-.173.544.544 0 01.716-.715.565.565 0 01.173.116.549.549 0 01.116.599zM14 3h-4v1h4V3z" clip-rule="evenodd"/></svg>';
  static const String symbol_parameter =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M11 6h-1v-.5a.5.5 0 00-.5-.5H8.479v5.5a.5.5 0 00.5.5h.5v1h-3v-1h.5a.5.5 0 00.5-.5V5H6.5a.5.5 0 00-.5.5V6H5V4h6v2zm2.914 2.048-1.462-1.462.707-.707 1.816 1.816v.707l-1.768 1.767-.707-.707 1.414-1.414zM3.548 9.462 2.086 8 3.5 6.586l-.707-.707-1.768 1.767v.708l1.816 1.815.707-.707z" clip-rule="evenodd"/></svg>';
  static const String symbol_property =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"><path fill="currentColor" d="M2.807 14.975a1.75 1.75 0 01-1.255-.556 1.684 1.684 0 01-.544-1.1A1.72 1.72 0 011.36 12.1c1.208-1.27 3.587-3.65 5.318-5.345a4.257 4.257 0 01.048-3.078 4.095 4.095 0 011.665-1.969 4.259 4.259 0 014.04-.36l.617.268-2.866 2.951


return function()
	local MenuTileRoot = script.Parent
	local Tile = MenuTileRoot.Parent
	local App = Tile.Parent
	local UIBlox = App.Parent
	local Packages = UIBlox.Parent

	local Roact = require(Packages.Roact)
	local Images = require(App.ImageSet.Images)
	local MenuTile = require(MenuTileRoot.MenuTile)

	local mockStyleComponent = require(UIBlox.Utility.mockStyleComponent)

	local function onActivatedDummy() end

	describe("mount/unmount", function()
		it("should mount and unmount with default properties", function()
			local menuTileWithStyle = mockStyleComponent({
				MenuTileTest = Roact.createElement(MenuTile, {
					-- required
					icon = Images["icons/menu/shop_large"],
					onActivated = onActivatedDummy,
					title = "Shop",
				})
			})
			local handle = Roact.mount(menuTileWithStyle)
			expect(handle).to.be.ok()
			Roact.unmount(handle)
		end)

		it("should mount and unmount with valid properties", function()
			local menuTileWithStyle = mockStyleComponent({
				MenuTileTest = Roact.createElement(MenuTile, {
					-- required
					icon = Images["icons/menu/shop_large"],
					onActivated = onActivatedDummy,
					title = "Shop",
					-- optional
					badgeValue = "0",
					layoutOrder = 2,
					position = UDim2.new(0, 50, 0,100),
					size = UDim2.new(1, 30, 1, 50),


Size().height)
      .isEqualTo(requestAdaptiveAdSize.getHeightInPixels(context))
    verify(vungleAdConfig).setWatermark(TEST_WATERMARK)
  }

  @Test
  fun loadRtbBannerAd_withoutAppId_callsLoadFailure() {
    val bannerAdLoadCallback =
      mock<MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback>>()

    adapter.loadRtbBannerAd(
      createMediationBannerAdConfiguration(
        context = context,
        serverParameters = bundleOf(KEY_PLACEMENT_ID to TEST_PLACEMENT_ID),
        bidResponse = TEST_BID_RESPONSE,
        watermark = TEST_WATERMARK,
      ),
      bannerAdLoadCallback,
    )

    val expectedAdError =
      AdError(
        ERROR_INVALID_SERVER_PARAMETERS,
        "Failed to load bidding banner ad from Liftoff Monetize. " +
          "Missing or invalid App ID configured for this ad source instance " +
          "in the AdMob or Ad Manager UI.",
        ERROR_DOMAIN,
      )
    verify(bannerAdLoadCallback).onFailure(argThat(AdErrorMatcher(expectedAdError)))
  }

  @Test
  fun loadRtbBannerAd_withoutPlacementId_callsLoadFailure() {
    val bannerAdLoadCallback =
      mock<MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback>>()

    adapter.loadRtbBannerAd(
      createMediationBannerAdConfiguration(
        context = context,
        serverParameters = bundleOf(KEY_APP_ID to TEST_APP_ID_1),
        bidResponse = TEST_BID_RESPONSE,
        watermark = TEST_WATERMARK,
      ),
      bannerAdLoadCallback,
    )

    val expectedAdError =
      AdError(
        ERROR_INVALID_SERVER_PARAMETERS,
        "Failed to load bidding banner ad from Liftoff Monetize. " +
          "Missing or Invalid Placement ID configured for this ad source instance " +
          "in the AdMob or Ad Manager UI.",
        ERROR_DOMAIN,
      )
    verify(bannerAdLoadCallback).onFailure(argThat(AdErrorMatcher(expectedAdError)))
  }

  @Test
  fun loadRtbBannerAd_onLiftoffSdkInitializationError_callsLoadFailure() {
    val liftoffSdkInitError =
      AdError(
        SDKError.Reason.UNKNOWN_ERROR_VALUE,
        "Liftoff Monetize SDK initialization failed.",
        VungleMediationAdapter.VUNGLE_SDK_ERROR_DOMAIN,
      )
    doAnswer { invocation ->
        val args: Array<Any> = invocation.arguments
        (args[2] as VungleInitializationListener).onInitializeError(liftoffSdkInitError)
      }
      .whenever(mockVungleInitializer)
      .initialize(any(), any(), any())
    val bannerAdLoadCallback =
      mock<MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback>>()
    mockStatic(VungleInitializer::class.java).use {
      whenever(getInstance()) doReturn mockVungleInitializer

      adapter.loadRtbBannerAd(
        createMediationBannerAdConfiguration(
          context = context,
          serverParameters =
            bundleOf(KEY_APP_ID to TEST_APP_ID_1, KEY_PLACEMENT_ID to TEST_PLACEMENT_ID),
          bidResponse = TEST_BID_RESPONSE,
          watermark = TEST_WATERMARK,
        ),
        bannerAdLoadCallback,
      )
    }

    verify(bannerAdLoadCallback).onFailure(liftoffSdkInitError)
  }

  @Test
  fun loadRtbInterstitialAd_updatesCoppaStatus() {
    mockStatic(VungleInitializer::class.java).use {
      whenever(getInstance()) doReturn mockVungleInitializer

      adapter.loadRtbInterstitialAd(
        createMediationInterstitialAdConfiguration(context = context),
        moc


 name;
    case ExposureStrategy.WINDOW:
        return buildArrayExposureFunction(['window']);
    }
};

const buildArrayExposureFunction = (paths: string[]): ExposureFunction => (name) => [...paths, name].join('.');

export const resolveExposureFunction = (exposureStrategy: SafeDefinePluginOptions['exposureStrategy']): ExposureFunction => {
    if (exposureStrategy instanceof Function) {
        return exposureStrategy;
    }

    if (Array.isArray(exposureStrategy)) {
        return buildArrayExposureFunction(exposureStrategy);
    }

    return buildExposureFunction(exposureStrategy);
};
import { useEffect, useState } from 'react';

export const useCtrl = () => {
    const [ctrl, setCtrl] = useState(0);

    const update = (value: boolean) => {
        const newValue = value ? Math.random() + 1 : 0;
        setCtrl(newValue);
    }

    useEffect(() => {
        document.addEventListener("keydown", (e) => {
            if (e.key == "Control") {
                update(true);
            }
        });
        document.addEventListener("keyup", (e) => {
            if (e.key == "Control") {
                update(false);
            }
        });
    }, []);

    return { ctrl: ctrl > 0 };
}import { mat4, quat, vec3, vec4 } from 'gl-matrix';
import {
    defaultMaterial,
    Armature,
    Face,
    GeometryNode,
    Model,
    Node,
    RenderObject,
    WorkingGeometry
} from '../../src/calder';
import '../glMatrix';

const bone = Armature.define((root: Node) => {
    root.createPoint('base', { x: 0, y: 0, z: 0 });
    root.createPoint('tip', { x: 0, y: 1, z: 0 });
});

describe('Node', () => {
    describe('globalToLocalTransform', () => {
        it('does nothing if there is no transform', () => {
            const node = bone();
            const point = vec4.fromValues(1, 0, 0, 1);
            vec4.transformMat4(point, point, node.globalToLocalTransform());

            expect(point).toEqualVec4(vec4.fromValues(1, 0, 0, 1));
        });

        it('respects translations', () => {
            const node = bone();
            node.setPosition({ x: 1, y: 1, z: 1 });

            const point = vec4.fromValues(1, 0, 0, 1);
            vec4.transformMat4(point, point, node.globalToLocalTransform());

            expect(point).toEqualVec4(vec4.fromValues(0, -1, -1, 1));
        });

        it('respects rotations', () => {
            const node = bone();
            node.setRotation(mat4.fromQuat(mat4.create(), quat.fromEuler(quat.create(), 0, 90, 0)));

            const point = vec4.fromValues(1, 0, 0, 1);
            vec4.transformMat4(point, point, node.globalToLocalTransform());

            expect(point).toEqualVec4(vec4.fromValues(0, 0, 1, 1));
        });

        it('respects scale', () => {
            const node = bone();
            node.setScale(mat4.fromScaling(mat4.create(), vec3.fromValues(2, 1, 1)));

            const point = vec4.fromValues(1, 0, 0, 1);
            vec4.transformMat4(point, point, node.globalToLocalTransform());

            expect(point).toEqualVec4(vec4.fromValues(0.5, 0, 0, 1));
        });

        it('works with nested bones', () => {
            const parent = bone();
            const node = bone();
            node.point('base').stickTo(parent.point('tip'));

            const point = vec4.fromValues(1, 0, 0, 1);
            vec4.transformMat4(point, point, node.globalToLocalTransform());

            expect(point)


Body .AXGridFoot .gridFootTable{table-layout:fixed}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td{padding:0;background:url(images/dx-grid-body-border.png) 100% 0 repeat-y;vertical-align:top;border-bottom:1px solid #c8c8c8}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td.fixedLine{background:url(images/dx-grid-fixed-body-border.png) 100% 0 repeat-y}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td.selected{background-color:#D2D9DF;box-shadow:inset 0 0 2px #000}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr:last-child td{border-bottom:none}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr.noListTr td{vertical-align:middle;height:100px;background:#f7f7f7}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr.line0 td{background-color:#d2d9df}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr.line1 td{background-color:#f7f8f9}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr.selected td{background-color:#bdccd7}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr.hover td{background-color:#d7dde3}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td.bodyNullTd{background-image:none}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td .bodyNode{position:relative;padding:0}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td .bodyTdText{position:relative;line-height:20px;min-height:20px;padding:5px 8px;color:#5e5e5e;text-shadow:0 1px 0 #fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td .bodyTdHtml{padding:0 1px 0 0}.AXGrid .AXgridScrollBody .AXGridFoot .gridFootTable tbody tr td .bodyTdCheckBox{line-height:20px;height:20px;padding:5px 1px 5px 0}.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon{float:left;position:relative;border:1px solid #ccc;margin:5px 0 0 5px;box-shadow:0 0 3px #ccc;border-radius:5px;background:#f3f3f3;cursor:pointer}.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon .gridViewIconThumbnail{position:absolute;border:1px solid #eee}.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon .gridViewIconDescription,.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon .gridViewIconLabel{position:absolute;padding:0;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon .gridViewIconbuttons{position:absolute;padding:0;margin:0}.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon:hover{background-color:#e7f1fa}.AXGrid .AXgridScrollBody .gridBodyDiv .viewIcon.selected{background-color:#f1efea}.AXGrid .AXgridPageBody{position:relative;height:29px;background:url(images/dx-grid-page-bg.png) repeat-x;border-bottom:1px solid #b1b1b1;border-left:1px solid #b1b1b1;border-right:1px solid #b1b1b1}.AXGrid .AXgridPageBody .AXg


了。”

   王力讲：“现在大家都回来了，究竟干什么呢？……这就是：全国全面地展开阶级斗争的一年，（高呼：毛主席万岁！）我们将在工业战线上，农业战线上，商业战线上以及全国的各条战线上，更加深入地、全面地展开无产阶级文化大革命！”他提议：“在经过这一段斗争以后，同志们很好地进行一次总结，把自己提高一下，学习毛主席的【关于纠正党内的错误思想】这一篇文章，【反对自由主义】这一篇文章，【三大纪律八项注意】这一篇文章；再学习【老三篇】这三篇，再学习【学习与时局】这几篇，再加上最近前些时候，党中央工作会议上林彪同志的讲话、陈伯达同志的讲话。”

    鲍长康等50人，今晨动身去武汉揪两面派王任重回校还账。

   目前已有大批同学下厂或准备长征，据消息，目前长征介绍信已经开了1000多张了。《看今朝》贴出了【把清华园‘斗批改’的旗帜高高举起】。

   《184》战斗队贴出【右倾思潮是目前我校运动的主要危险】。文章中认为，从整风开始一直到现在存在一股右倾思潮。认为“12.25行动”好得很，即使有人不理解，我们也要干。

   中共中央、国务院发出【关于制止大搞所谓“红海洋：的通知】。

    12月31日

   总理与我校一部分同学座谈，讲毛主席不同意揪王光美回清华，建议让她作书面检查。

   校内出现了一些发牢骚的大字报：如《雄鹰展翅》认为【“12.25行动”是运动群众】，《巴黎公社》的【踢开分部拉出战斗队】，《红光》的【蒯司令快…快快派活】。《几个即将堕落为××派的〈八.八〉派》贴出严正声明：【坚决拥护以蒯


 = new(string)
		**out = **in
	}
	if in.Status != nil {
		in, out := &in.Status, &out.Status
		*out = new(string)
		**out = **in
	}
	if in.Tags != nil {
		in, out := &in.Tags, &out.Tags
		*out = make(map[string]*string, len(*in))
		for key, val := range *in {
			var outVal *string
			if val == nil {
				(*out)[key] = nil
			} else {
				inVal := (*in)[key]
				in, out := &inVal, &outVal
				*out = new(string)
				**out = **in
			}
			(*out)[key] = outVal
		}
	}
	if in.TagsAll != nil {
		in, out := &in.TagsAll, &out.TagsAll
		*out = make(map[string]*string, len(*in))
		for key, val := range *in {
			var outVal *string
			if val == nil {
				(*out)[key] = nil
			} else {
				inVal := (*in)[key]
				in, out := &inVal, &outVal
				*out = new(string)
				**out = **in
			}
			(*out)[key] = outVal
		}
	}
	if in.WebserverAccessMode != nil {
		in, out := &in.WebserverAccessMode, &out.WebserverAccessMode
		*out = new(string)
		**out = **in
	}
	if in.WebserverURL != nil {
		in, out := &in.WebserverURL, &out.WebserverURL
		*out = new(string)
		**out = **in
	}
	if in.WebserverVPCEndpointService != nil {
		in, out := &in.WebserverVPCEndpointService, &out.WebserverVPCEndpointService
		*out = new(string)
		**out = **in
	}
	if in.WeeklyMaintenanceWindowStart != nil {
		in, out := &in.WeeklyMaintenanceWindowStart, &out.WeeklyMaintenanceWindowStart
		*out = new(string)
		**out = **in
	}
	if in.WorkerReplacementStrategy != nil {
		in, out := &in.WorkerReplacementStrategy, &out.WorkerReplacementStrategy
		*out = new(string)
		**out = **in
	}
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvironmentObservation.
func (in *EnvironmentObservation) DeepCopy() *EnvironmentObservation {
	if in == nil {
		return nil
	}
	out := new(EnvironmentObservation)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *EnvironmentParameters) DeepCopyInto(out *EnvironmentParameters) {
	*out = *in
	if in.AirflowConfigurationOptionsSecretRef != nil {
		in, out := &in.AirflowConfigurationOptionsSecretRef, &out.AirflowConfigurationOptionsSecretRef
		*out = new(v1.SecretReference)
		**out = **in
	}
	if in.AirflowVersion != nil {
		in, out := &in.AirflowVersion, &out.AirflowVersion
		*out = new(string)
		**out = **in
	}
	if in.DagS3Path != nil {
		in, out := &in.DagS3Path, &out.DagS3Path
		*out = new(string)
		**out = **in
	}
	if in.EndpointManagement != nil {
		in, out := &in.EndpointManagement, &out.EndpointManagement
		*out = new(string)
		**out = **i


224c59c: @ 224c59c :thumb
	ldr     r0, [sp, #0x14]
	.hword  0x1c7f @ add r7, r7, #0x1
	cmp     r7, r0
	blt     branch_224c556
.thumb
branch_224c5a4: @ 224c5a4 :thumb
	ldr     r0, [sp, #0x8]
	add     r1, r0, #0x1
	ldr     r0, [sp, #0x18]
	str     r1, [sp, #0x8]
	cmp     r1, r0
	blt     branch_224c546
.thumb
branch_224c5b0: @ 224c5b0 :thumb
	mov     r0, #0x7
	str     r0, [r5, #0x8]
	add     sp, #0x1c
	pop     {r4-r7,pc}
@ 0x224c5b8

.word 0x21e8 @ 0x224c5b8
.word 0x21b4 @ 0x224c5bc
.word 0x21d4 @ 0x224c5c0

/* Input:
r0: MainBattleData
r1: BattleData
*/
thumb_func_start BattleFunction_7
BattleFunction_7: @ 224c5c4 :thumb TODO
	push    {r3-r7,lr}
	add     sp, #-0x8
	mov     r4, r1
	mov     r1, #0x0
	str     r0, [sp, #0x0]
	str     r1, [sp, #0x4]

	bl      GetMainBattleData_NrOfBattleTextPtrs
	mov     r7, r0
branch_224c5d6: @ 224c5d6 :thumb
	ldr     r0, [r4, #BattleData_28]
	cmp     r0, #0x3
	bls     branch_224c5de
	b       branch_224c6f0

branch_224c5de: @ 224c5de :thumb
	add     r0, r0, r0
	add     r0, pc
	ldrh    r0, [r0, #0x6]
	lsl     r0, r0, #16
	asr     r0, r0, #16
	add     pc, r0
@ 0x224c5ea

Jumppoints_224c5ea:
.hword branch_224c5f2 - Jumppoints_224c5ea - 2
.hword branch_224c68c - Jumppoints_224c5ea - 2
.hword branch_224c6ca - Jumppoints_224c5ea - 2
.hword branch_224c6e8 - Jumppoints_224c5ea - 2

.thumb
branch_224c5f2: @ 224c5f2 :thumb
	ldr     r0, [r4, #BattleData_2c]
	cmp     r0, r7
	bge     branch_224c680
	mov     r6, r4
	add     r6, #BattleData_2c
branch_224c5fc: @ 224c5fc :thumb
	add     r1, r4, r0
	ldr     r0, =BattleData_21e8
	ldrb    r5, [r1, r0]
	mov     r0, r5
	bl      Function_20787cc
	ldr     r1, =BattleData_3108
	ldrb    r1, [r4, r1]
	tst     r0, r1
	ldr     r0, [r6, #0x0]
	beq     branch_224c618
	.hword  0x1c40 @ add r0, r0, #0x1
	str     r0, [r6, #0x0]
	b       branch_224c67a

branch_224c618: @ 224c618 :thumb
	.hword  0x1


 */
	S4(ulong, bc_filter_area_len)	/* RO: Length of area, in bytes */
	S4(long, bc_filter_cmd)		/* RW: Filter command, see below */
	S4(ulong, bc_filter_len)	/* RW: Actual length of filter */
	S4(ulong, bc_filter_port)	/* RW: Port # for filter 0..6 */
	S4(ulong, bc_filter_num)	/* RW: Filter #, 0=input, 1=output */

	/* more SNMP agent addresses */
	S1A(uchar, bc_iptrap, 4) /* IP address for SNMP */

	S4A(long, bc_spare, 2)	/* spares */
END_STRUCT(bios_comm)

#define	bc	VMO(struct bios_comm, 0xa3000100)

/*
 *	bc_status values
 */
#define	BC_INIT	0
#define	BC_RUN	100

/*
 *	bc_host values
 */
#define	BC_DIAGS	-1
#define BC_SASWITCH	0
#define	BC_SWITCH	1
#define	BC_MULTINIC	2

/*
 *	Values for spew (debugging)
 */
#define	BC_SPEW_ENABLE	0x80000000

/*
 *	filter commands
 */
#define	BC_FILTER_ERR	-1
#define	BC_FILTER_OK	0
#define	BC_FILTER_SET	1
#define	BC_FILTER_CLR	2


                   findedNodes[0].EnsureVisible();
                    selectedNodePrevColor = findedNodes[0].BackColor;
                    findedNodes[0].BackColor = Color.Coral;
                }
            }
            if (Visible && e.KeyCode == Keys.Escape)
            {
                Close();
                e.Handled = true;
            }
        }

        private void searchPrev_Click(object sender, EventArgs e)
        {
            searchNext.Enabled = true;
            if (findedNodes[searchResultIndex].BackColor == Color.Coral)
                findedNodes[searchResultIndex].BackColor = selectedNodePrevColor;
            selectedNodePrevColor = findedNodes[--searchResultIndex].BackColor;
            findedNodes[searchResultIndex].BackColor = Color.Coral;
            findedNodes[searchResultIndex].EnsureVisible();
            ParentTreeView.SelectedNode = null;
            resultLabel.Text = "Result: " + (searchResultIndex + 1) + " / " + findedNodes.Count;
            if (searchResultIndex == 0)
                searchPrev.Enabled = false;
        }

        private void searchNext_Click(object sender, EventArgs e)
        {
            searchPrev.Enabled = true;
            if (findedNodes[searchResultIndex].BackColor == Color.Coral)
                findedNodes[searchResultIndex].BackColor = selectedNodePrevColor;
            selectedNodePrevColor = findedNodes[++searchResultIndex].BackColor;
            findedNodes[searchResultIndex].BackColor = Color.Coral;
            findedNodes[searchResultIndex].EnsureVisible();
            ParentTreeView.SelectedNode = null;
            resultLabel.Text = "Result: " + (searchResultIndex + 1) + " / " + findedNodes.Count;

            if (searchResultIndex == findedNodes.Count - 1)
                searchNext.Enabled = false;
        }

        private void searchClose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void searchButton_Click(object sender, EventArgs e)
        {
            searchBox_KeyDown(searchBox, new KeyEventArgs(Keys.Enter));
        }

        private void Close()
        {
            if (Visible)
            {
                Visible = false;
                ColorizeNodes(ParentTreeView.Nodes, ParentTreeView.ForeColor, ParentTreeView.BackColor);
            }

            resultLabel.Enabled = false;
            searchNext.Enabled = false;
            searchPrev.Enabled = false;
            findedNodes.Clear();
            searchResultIndex = -1;
            resultLabel.Text = "Results: - / -";
        }
    }
}


0x1c
/* 803B8194 003B3DF4  7C 7D 02 14 */	add r3, r29, r0
/* 803B8198 003B3DF8  80 03 02 D4 */	lwz r0, 0x2d4(r3)
/* 803B819C 003B3DFC  64 00 04 00 */	oris r0, r0, 0x400
/* 803B81A0 003B3E00  90 03 02 D4 */	stw r0, 0x2d4(r3)
lbl_803B81A4:
/* 803B81A4 003B3E04  80 9D 00 6C */	lwz r4, 0x6c(r29)
/* 803B81A8 003B3E08  54 80 30 32 */	slwi r0, r4, 6
/* 803B81AC 003B3E0C  7C 7D 02 14 */	add r3, r29, r0
/* 803B81B0 003B3E10  80 03 01 D4 */	lwz r0, 0x1d4(r3)
/* 803B81B4 003B3E14  54 00 57 FF */	rlwinm. r0, r0, 0xa, 0x1f, 0x1f
/* 803B81B8 003B3E18  40 82 00 18 */	bne lbl_803B81D0
/* 803B81BC 003B3E1C  1C 04 00 1C */	mulli r0, r4, 0x1c
/* 803B81C0 003B3E20  7C 7D 02 14 */	add r3, r29, r0
/* 803B81C4 003B3E24  80 03 02 D4 */	lwz r0, 0x2d4(r3)
/* 803B81C8 003B3E28  54 00 37 FF */	rlwinm. r0, r0, 6, 0x1f, 0x1f
/* 803B81CC 003B3E2C  41 82 00 6C */	beq lbl_803B8238
lbl_803B81D0:
/* 803B81D0 003B3E30  1C 64 00 C0 */	mulli r3, r4, 0xc0
/* 803B81D4 003B3E34  80 1D 21 44 */	lwz r0, 0x2144(r29)
/* 803B81D8 003B3E38  7C 7D 1A 14 */	add r3, r29, r3
/* 803B81DC 003B3E3C  80 63 2D 8C */	lwz r3, 0x2d8c(r3)
/* 803B81E0 003B3E40  7C 00 1A 15 */	add. r0, r0, r3
/* 803B81E4 003B3E44  41 81 00 54 */	bgt lbl_803B8238
/* 803B81E8 003B3E48  38 63 FF FF */	addi r3, r3, -1
/* 803B81EC 003B3E4C  80 1D 00 6C */	lwz r0, 0x6c(r29)
/* 803B81F0 003B3E50  7C 63 00 D0 */	neg r3, r3
/* 803B81F4 003B3E54  54 00 30 32 */	slwi r0, r0, 6
/* 803B81F8 003B3E58  90 7D 21 44 */	stw r3, 0x2144(r29)
/* 803B81FC 003B3E5C  7C 7D 02 14 */	add r3, r29, r0
/* 803B8200 003B3E60  80 03 01 D4 */	lwz r0, 0x1d4(r3)
/* 803B8204 003B3E64  54 00 57 FF */	rlwinm. r0, r0, 0xa, 0x1f


 'Amount')
    ..a<$core.double>(4, _omitFieldNames ? '' : 'SeedBonus', $pb.PbFieldType.OF,
        protoName: 'SeedBonus')
    ..hasRequiredFields = false;

  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
  VipResponse clone() => VipResponse()..mergeFromMessage(this);
  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
  VipResponse copyWith(void Function(VipResponse) updates) =>
      super.copyWith((message) => updates(message as VipResponse))
          as VipResponse;

  @$core.override
  $pb.BuilderInfo get info_ => _i;

  @$core.pragma('dart2js:noInline')
  static VipResponse create() => VipResponse._();
  @$core.override
  VipResponse createEmptyInstance() => create();
  static $pb.PbList<VipResponse> createRepeated() => $pb.PbList<VipResponse>();
  @$core.pragma('dart2js:noInline')
  static VipResponse getDefault() => _defaultInstance ??=
      $pb.GeneratedMessage.$_defaultFor<VipResponse>(create);
  static VipResponse? _defaultInstance;

  @$pb.TagNumber(1)
  $core.bool get success => $_getBF(0);
  @$pb.TagNumber(1)
  set success($core.bool value) => $_setBool(0, value);
  @$pb.TagNumber(1)
  $core.bool hasSuccess() => $_has(0);
  @$pb.TagNumber(1)
  void clearSuccess() => $_clearField(1);

  @$pb.TagNumber(2)
  $core.String get type => $_getSZ(1);
  @$pb.TagNumber(2)
  set type($core.String value) => $_setString(1, value);
  @$pb.TagNumber(2)
  $core.bool hasType() => $_has(1);
  @$pb.TagNumber(2)
  void clearType() => $_clearField(2);

  @$pb.TagNumber(3)
  $core.double get amount => $_getN(2);
  @$pb.TagNumber(3)
  set amount($core.double value) => $_setFloat(2, value);
  @$pb.TagNumber(3)
  $core.bool hasAmount() => $_has(2);
  @$pb.TagNumber(3)
  void clearAmount() => $_clearField(3);

  @$pb.TagNumber(4)
  $core.double get seedBonus => $_getN(3);
  @$pb.TagNumber(4)
  set seedBonus($core.double value) => $_setFloat(3, value);
  @$pb.TagNumber(4)
  $core.bool hasSeedBonus() => $_has(3);
  @$pb.TagNumber(4)
  void clearSeedBonus() => $_clearField(4);
}

class BonusRequest extends $pb.GeneratedMessage {
  factory BonusRequest({
    $core.int? amountInGB,
  }) {
    final result = create();
    if (amountInGB != null) result.amountInGB = amountInGB;
    return result;
  }

  BonusRequest._();

  factory BonusRequest.fromBuffer($core.List<$core.int> data,
          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
      create()..mergeFromBuffer(data, registry);
  factory BonusRequest.fromJson($core.String json,
          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
      create()..mergeFromJson(json, registry);

  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
      _omitMessageNames ? '' : 'BonusRequest',
      package: const $pb.PackageName(_omitMessageNames ? '' : 'mam.v1'),
      createEmptyInstance: create)
    ..a<$core.int>(1, _omitFieldNames ? '' : 'amountInGB', $pb.