.invoke(result, "testRecordFieldBindingPatternsWithIdentifierEscapes");
    }

    @Test
    public void testReadOnlyRecordWithMappingBindingPattern() {
        BRunUtil.invoke(result, "testReadOnlyRecordWithMappingBindingPatternInVarDecl");
    }

    @Test
    public void testRecordVariableWithAnonymousType() {
        BRunUtil.invoke(result, "testRecordVariableWithAnonymousType");
    }

    @Test
    public void testNestedRecordVariableWithAnonymousType() {
        BRunUtil.invoke(result, "testNestedRecordVariableWithAnonymousType");
    }

    @AfterClass
    public void tearDown() {
        result = null;
        resultNegative = null;
    }
}
/*
 *  Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 *  WSO2 Inc. licenses this file to you 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 org.ballerinalang.test.statements.matchstmt.varbindingpatternmatchpattern;

import org.ballerinalang.test.BAssertUtil;
import org.ballerinalang.test.BCompileUtil;
import org.ballerinalang.test.CompileResult;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
 * Test cases to verify the behaviour of the var binding-pattern mapping-binding-pattern.
 *
 * @since 2.0.0
 */
@Test
public class MappingBindingPatternNegativeTest {
    private CompileResult warningResult, negativeResult;
    private final String patternNotMatched = "pattern will not be matched";
    private final String unreachablePattern = "unreachable pattern";

    @BeforeClass
    public void setup() {
        warningResult = BCompileUtil.compile("test-src/statements/matchstmt/varbindingpatternmatchpattern" +
                "/mapping_binding_pattern_negative.bal");
        negativeResult = BCompileUtil.compile(
                "test-src/statements/matchstmt/varbindingpatternmatchpattern" +
                        "/mapping_binding_pattern_semantics_negative.bal");
    }

    @Test
    public void testMappingBindingPatternNegative() {
        int i = -1;
        BAssertUtil.validateWarning(warningResult, ++i, patternNotMatched, 20, 9);
        BAssertUtil.validateWarning(warningResult, ++i, "unused variable 'b'", 20, 9);
        BAssertUtil.validateWarning(warningResult, ++i, patternNotMatched, 27, 9);
        BAssertUtil.validateWarning(warningResult, ++i, "unused variable 'a'", 27, 9);
        BAssertUtil.validateWarning(warningResult, ++i, "unused variable 'a'", 38, 9);
        BAssertUtil.validateWarning(warningResult, ++i, "unused variable 'b'", 38, 9);
        BAssertUtil.validateWarning(warningResult, ++i, unreachablePattern, 38, 28);
        BAssertUtil.validateWarning(warningResult, ++i, "unused variable 'a'", 40, 9);
        BAssertUtil.validateWarning(warningResult, ++i, "unused variable 'b'", 40, 9);
        BAssertUtil.validateWarning(warningResult, ++i, unre


port Path
import datetime

now = datetime.datetime.now()
year = now.year
month = now.month

name = input('Enter article name:')

path1 = Path('articles') / str(year) / str(month)
path1.mkdir(parents=True)

path2 = path1 /  f'{name}.txt'

path2.touch()

print(f'Article created at: {path2}')

```

该程序要求用户输入。 它根据当前年份和月份创建一个新的文本文件。

## `PrettyTable`示例

处理文件和目录时，可以使用`PrettyTable`模块获得更好的输出。

`simple_table.py`

```py
#!/usr/bin/env python

from pathlib import Path
import datetime
from prettytable import PrettyTable

path = Path('C:/Users/Jano/Documents/')

pt = PrettyTable()
pt.field_names = ["File name", "Size", "Created"]

pt.align["File name"] = "l"
pt.align["Size"] = "r"
pt.align["Created"] = "l"

for e in path.glob('**/*.txt'):

    created = datetime.datetime.fromtimestamp(e.stat().st_ctime)
    size = e.stat().st_size
    pt.add_row([e.name, size, f"{created:%Y-%m-%d}"])

print(pt)

```

该示例在一个漂亮的表中显示`Documents`内的所有文本文件。 该表包含三列：文件名，大小和创建日期。

```py
$ simple_table.py
+-------------------------------------------------------+-------+------------+
| File name                                             |  Size | Created    |
+-------------------------------------------------------+-------+------------+
| data.txt                                              |     0 | 2019-02-27 |
| eternal_return.txt                                    | 10467 | 2019-03-03 |
| potvrdenie.txt                                        |   773 | 2019-01-14 |
| text_processing.txt                                   |   750 | 2019-02-18 |
| website-inspire.txt                                   |    62 | 2019-03-03 |
| words.txt                                             |    31 | 2018-12-30 |
| Úvod do Symfony.txt                                   |  7613 | 2019-03-04 |
| robots.txt                                            |   240 | 2019-01-01 |
| robots.txt                                            |   240 | 2019-02-03 |
...

```

这是样本部分输出。

在本教程中，我们介绍了标准的 Python `pathlib`模块。

您可能也对以下相关教程感兴趣： [PrettyTable 教程](/python/prettytable/)， [Python `argparse`教程](/python/argparse/)， [Python 教程](/lang/python/)。# Python `for`循环

> 原文： [http://zetcode.com/python/forloop/](http://zetcode.com/python/forloop/)

Python `for`循环教程展示了如何使用`


;

	if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )
	{
		xReturn = pdFALSE;
	}
	else
	{
		xReturn = pdTRUE;
	}

	return xReturn;
}
/*-----------------------------------------------------------*/

static void prvEMACHandlerTask( void *pvParameters )
{
TimeOut_t xPhyTime;
TickType_t xPhyRemTime;
UBaseType_t uxLastMinBufferCount = 0;
UBaseType_t uxCurrentCount;
BaseType_t xResult = 0;
uint32_t xStatus;
const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );

	/* Remove compiler warnings about unused parameters. */
	( void ) pvParameters;

	/* A possibility to set some additional task properties like calling
	portTASK_USES_FLOATING_POINT() */
	iptraceEMAC_TASK_STARTING();

	vTaskSetTimeOutState( &xPhyTime );
	xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );

	for( ;; )
	{
		uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
		if( uxLastMinBufferCount != uxCurrentCount )
		{
			/* The logging produced below may be helpful
			while tuning +TCP: see how many buffers are in use. */
			uxLastMinBufferCount = uxCurrentCount;
			FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
				uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
		}

		#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
		{
		static UBaseType_t uxLastMinQueueSpace = 0;

			uxCurrentCount = uxGetMinimumIPQueueSpace();
			if( uxLastMinQueueSpace != uxCurrentCount )
			{
				/* The logging produced below may be helpful
				while tuning +TCP: see how many buffers are in use. */
				uxLastMinQueueSpace = uxCurrentCount;
				FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
			}
		}
		#endif /* ipconfigCHECK_IP_QUEUE_SPACE */

		if( ( xEMACpsif.isr_events & EMAC_IF_ALL_EVENT ) == 0 )
		{
			/* No events to process now, wait for the next. */
			ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );
		}

		if( ( xEMACpsif.isr_events & EMAC_IF_RX_EVENT ) != 0 )
		{
			xEMACpsif.isr_events &= ~EMAC_IF_RX_EVENT;
			xResult = emacps_check_rx( &xEMACpsif );
		}

		if( ( xEMACpsif.isr_events & EMAC_IF_TX_EVENT ) != 0 )
		{
			xEMACpsif.isr_events &= ~EMAC_IF_TX_EVENT;
			emacps_check_tx( &xEMACpsif );
		}

		if( ( xEMACpsif.isr_events & EMAC_IF_ERR_EVENT ) != 0 )
		{
			xEMACpsif.isr_events &= ~EMAC_IF_ERR_EVENT;
			emacps_check_errors( &xEMACpsif );
		}

		if( xResult > 0 )
		{
			/* A packet was received. No need to check for the PHY status now,
			but set a timer to check it later on. */
			vTaskSetTimeOutState( &xPhyTime );
			xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
			xResult = 0;
		}
		else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )
		{
			xStatus = ulReadMDIO( PHY_REG_01_BMSR );

			if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )
			{
				ulPHYLinkStatus = xStatus;
				FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );
			}

			vTaskSetTimeOutState( &xPhyTime );
			if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
			{
				xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
			}
			else
			{
				xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
			}
		}
	}
}
/*-----------------------------------------------------------*/


r1, r2, r4, r3
	sub     r3, r0, r1
	add     r0, r3, #0x21
	cmp     r8, #0x0
	strb    r0, [r9]
	beq     branch_21f729c
	ldrb    r0, [r9]
	tst     r0, #0x1
	beq     branch_21f72b0
.arm
branch_21f729c: @ 21f729c :arm
	cmp     r8, #0x0
	ldreqb  r0, [r9]
	andeq   r0, r0, #0x1
	cmpeq   r0, #0x1
	bne     branch_21f72bc
.arm
branch_21f72b0: @ 21f72b0 :arm
	ldrb    r0, [r9]
	add     r0, r0, #0x1
	strb    r0, [r9]
.arm
branch_21f72bc: @ 21f72bc :arm
	add     r7, r7, #0x1
	cmp     r7, #0x20
	blt     branch_21f7228
	mov     r0, r10
	ldmfd   sp!, {r3-r11,pc}
@ 0x21f72d0

.word 0x2219488 @ 0x21f72d0
.word 0x2219490 @ 0x21f72d4
.word 0x2219450 @ 0x21f72d8
.word 0x2c0b02c1 @ 0x21f72dc
.arm
Function_21f72e0: @ 21f72e0 :arm
	stmfd   sp!, {r3-r11,lr}
	mov     r5, r0
	ldr     r0, [pc, #0xf0] @ [0x21f73e0] (=0x2219464)
	mov     r4, r1
	bl      Function_20d8b60
	mov     r7, r0
	mov     r0, r4
	bl      Function_21f7128
	mov     r10, #0x0
	mov     r11, r0
	mov     r8, r10
.arm
branch_21f730c: @ 21f730c :arm
	cmp     r11, #0x0
	cmpne   r10, #0x0
	cmpne   r10, #0xd
	bne     branch_21f7344
	bl      Function_20d76a0
	ldr     r1, [pc, #0xbc] @ [0x21f73e4] (=0x2c0b02c1)
	mov     r2, r0, lsr #31
	smull   r3, r6, r1, r0
	add     r6, r2, r6, asr #4
	mov     r1, #0x5d
	smull   r2, r3, r1, r6
	sub     r6, r0, r2
	add     r0, r6, #0x21
	b       branch_21f73c0
@ 0x21f7344

.arm
branch_21f7344: @ 21f7344 :arm
	cmp     r10, #0x1
	cmpne   r10, #0xe
	ldreqsb r6, [r4, r10]
	addne   r0, r4, r10
	ldrb    r9, [r4, r10]
	ldrnesb r6, [r0, #-0x1]
	mov     r1, r7
	add     r0, r10, r9
	bl      _s32_div_f
	mul     r0, r6, r8
	mov     r6, r1
	mov     r1, r7
	bl      _s32_div_f
	ldr     r0, [pc, #0x60] @ [0x21f


unchecked(unchecked(0x00)), unchecked(unchecked(0x00)), unchecked(unchecked(0x00)), unchecked(unchecked(0x00)) };

		internal sealed class CacheEntry
		{
			internal Name HostName;

			internal NbtAddress Address;

			internal long Expiration;

			internal CacheEntry(Name hostName, NbtAddress address, long expiration)
			{
				this.HostName = hostName;
				this.Address = address;
				this.Expiration = expiration;
			}
		}

		internal static NbtAddress Localhost;

		static NbtAddress()
		{
			IPAddress localInetAddress;
			string localHostname;
			Name localName;
			AddressCache.Put(UnknownName, new CacheEntry(UnknownName, UnknownAddress
				, Forever));
			localInetAddress = Client.laddr;
			if (localInetAddress == null)
			{
				try
				{
                    localInetAddress = Extensions.GetAddressByName("127.0.0.1");
				}
				catch (UnknownHostException)
				{

				}
			}
			localHostname = Config.GetProperty("jcifs.netbios.hostname", null);
			if (string.IsNullOrEmpty(localHostname))
			{
				byte[] addr = localInetAddress.GetAddressBytes();

                /*localHostname = "JCIFS" + (addr[2] & unchecked((int)(0xFF))) + "_" + (addr[3] & unchecked(
                    (int)(0xFF))) + "_" + Hexdump.ToHexString((int)(new Random().NextDouble() * (double)unchecked(
					(int)(0xFF))), 2);*/
			    localHostname = "JCIFS_127_0_0_1";
			}
			localName = new Name(localHostname, unchecked(0x00), Config.GetProperty("jcifs.netbios.scope"
				, null));
			Localhost = new NbtAddress(localName, localInetAddress.GetHashCode(), false, BNode
				, false, false, true, false, UnknownMacAddress);
			CacheAddress(localName, Localhost, Forever);
		}

		internal static void CacheAddress(Name hostName, NbtAddress addr)
		{
			if (CachePolicy == 0)
			{
				return;
			}
			long expiration = -1;
			if (CachePolicy != Forever)
			{
				expiration = Runtime.CurrentTimeMillis() + CachePolicy * 1000;
			}
			CacheAddress(hostName, addr, expiration);
		}

		internal static void CacheAddress(Name hostName, NbtAddress addr, long expiration
			)
		{
			if (CachePolicy == 0)
			{
				return;
			}
			lock (AddressCache)
			{
				CacheEntry entry = (CacheEntry)AddressCache.Get(hostName);
				if (entry == null)
				{
					entry = new CacheEntry(hostName, addr, expiration);
					AddressCache.Put(hostName, entry);
				}
				else
				{
					entry.Address = addr;
					entry.Expiration = expiration;
				}
			}
		}

		internal static void CacheAddressArray(NbtAddress[] addrs)
		{
			if (CachePolicy == 0)
			{
				return;
			}
			long expiration = -1;
			if (CachePolicy != Forever)
			{
				expiration = Runtime.CurrentTimeMillis() + CachePolicy * 1000;
			}
			lock (AddressCache)
			{
				for (int i = 0; i < addrs.Length; i++)
				{
					CacheEntry entry = (CacheEntry)AddressCache.Get(addrs[i].HostName
						);
					if (entry == null)
					{
						entry = new CacheEntry(addrs[i].HostName, addrs[i], expiration);
						AddressCache.Put(addrs[i].HostName, entry);
					}
					else
					{
						entry.Address = addrs[i];
						entry.Expiration = expiration;
					}
				}
			}
		}

		internal static NbtAddr


D: sparse_status_t = 1;
pub const sparse_status_t_SPARSE_STATUS_ALLOC_FAILED: sparse_status_t = 2;
pub const sparse_status_t_SPARSE_STATUS_INVALID_VALUE: sparse_status_t = 3;
pub const sparse_status_t_SPARSE_STATUS_EXECUTION_FAILED: sparse_status_t = 4;
pub const sparse_status_t_SPARSE_STATUS_INTERNAL_ERROR: sparse_status_t = 5;
pub const sparse_status_t_SPARSE_STATUS_NOT_SUPPORTED: sparse_status_t = 6;
pub type sparse_status_t = ::std::os::raw::c_uint;
pub const sparse_operation_t_SPARSE_OPERATION_NON_TRANSPOSE: sparse_operation_t = 10;
pub const sparse_operation_t_SPARSE_OPERATION_TRANSPOSE: sparse_operation_t = 11;
pub const sparse_operation_t_SPARSE_OPERATION_CONJUGATE_TRANSPOSE: sparse_operation_t = 12;
pub type sparse_operation_t = ::std::os::raw::c_uint;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_GENERAL: sparse_matrix_type_t = 20;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_SYMMETRIC: sparse_matrix_type_t = 21;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_HERMITIAN: sparse_matrix_type_t = 22;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_TRIANGULAR: sparse_matrix_type_t = 23;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_DIAGONAL: sparse_matrix_type_t = 24;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_BLOCK_TRIANGULAR: sparse_matrix_type_t = 25;
pub const sparse_matrix_type_t_SPARSE_MATRIX_TYPE_BLOCK_DIAGONAL: sparse_matrix_type_t = 26;
pub type sparse_matrix_type_t = ::std::os::raw::c_uint;
pub const sparse_index_base_t_SPARSE_INDEX_BASE_ZERO: sparse_index_base_t = 0;
pub const sparse_index_base_t_SPARSE_INDEX_BASE_ONE: sparse_index_base_t = 1;
pub type sparse_index_base_t = ::std::os::raw::c_uint;
pub const sparse_fill_mode_t_SPARSE_FILL_MODE_LOWER: sparse_fill_mode_t = 40;
pub const sparse_fill_mode_t_SPARSE_FILL_MODE_UPPER: sparse_fill_mode_t = 41;
pub const sparse_fill_mode_t_SPARSE_FILL_MODE_FULL: sparse_fill_mode_t = 42;
pub type sparse_fill_mode_t = ::std::os::raw::c_uint;
pub const sparse_diag_type_t_SPARSE_DIAG_NON_UNIT: sparse_diag_type_t = 50;
pub const sparse_diag_type_t_SPARSE_DIAG_UNIT: sparse_diag_type_t = 51;
pub type sparse_diag_type_t = ::std::os::raw::c_uint;
pub const sparse_layout_t_SPARSE_LAYOUT_ROW_MAJOR: sparse_layout_t = 101;
pub const sparse_layout_t_SPARSE_LAYOUT_COLUMN_MAJOR: sparse_layout_t = 102;
pub type sparse_layout_t = ::std::os::raw::c_uint;
pub const verbose_mode_t_SPARSE_VERBOSE_OFF: verbose_mode_t = 70;
pub const verbose_mode_t_SPARSE_VERBOSE_BASIC: verbose


z M16,8h-2v2h2V8 z M19,8h-2v2h2V8z M13,8h-2v2h2V8z M10,8H8v2h2V8z M7,8H5v2h2V8z M22,5v14H2V5H22z M21,6H3v12h18V6z":"M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z",
          /* Help */
          "M15.36,9.96c0,1.09-0.67,1.67-1.31,2.24c-0.53,0.47-1.03,0.9-1.16,1.6L12.85,14h-1.75l0.03-0.28 c0.14-1.17,0.8-1.76,1.47-2.27c0.52-0.4,1.01-0.77,1.01-1.49c0-0.51-0.23-0.97-0.63-1.29c-0.4-0.31-0.92-0.42-1.42-0.29 c-0.59,0.15-1.05,0.67-1.19,1.34L10.32,10H8.57l0.06-0.42c0.2-1.4,1.15-2.53,2.42-2.87c1.05-0.29,2.14-0.08,2.98,0.57 C14.88,7.92,15.36,8.9,15.36,9.96z M12,18c0.55,0,1-0.45,1-1s-0.45-1-1-1s-1,0.45-1,1S11.45,18,12,18z M12,3c-4.96,0-9,4.04-9,9 s4.04,9,9,9s9-4.04,9-9S16.96,3,12,3 M12,2c5.52,0,10,4.48,10,10s-4.48,10-10,10S2,17.52,2,12S6.48,2,12,2L12,2z":"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z",
          /* Send feedback */
          "M13,14h-2v-2h2V14z M13,5h-2v6h2V5z M19,3H5v16.59l3.29-3.29L8.59,16H9h10V3 M20,2v15H9l-5,5V2H20L20,2z":"


mancer":"[网络] 火占师；火法师；火炎术士",
"pyromancy":"n. 火焰占卜",
"pyromania":"n. 放火狂\\n[医] 放火狂",
"pyromaniac":"n. 放火狂者\\na. 放火狂的",
"pyromaniacal":"a. pyromania的变形",
"pyromaniacs":"(pyromaniac 的复数) n. 放火狂者\\na. 放火狂的",
"pyromantic":"a. pyromancy的变形",
"pyromax":"派罗马克斯电热丝合金",
"pyromeconic acid":"[化] 焦袂康酸; 3-羟基-γ-吡喃酮",
"pyromelane":"板钛矿",
"pyromellitic acid":"[化] 均苯四酸; 1,2,4,5-苯四酸; 1,2,4,5-苯四甲酸",
"pyromellitic acid dianhydride":"[化] 均苯四酸二酐",
"pyromellitic dianhydride":"[建] 苯四甲酸二酐",
"pyromellitic dimide":"[化] 1,2,4,5-苯四甲酰二亚胺",
"pyromellitice acid":"[建] 苯四甲酸",
"pyromeride":"球泡霏细岩",
"Pyromet":"派罗梅特镍基耐热合金",
"pyrometallurgical":"a. 火法冶金的（火冶的）",
"pyrometallurgy":"n. 热冶术, 热冶学",
"pyrometamorphism":"n 高热变质",
"pyrometasomatic":"热液交代的",
"pyrometer":"n. 高温计\\n[化] 高温计",
"pyrometers":"(pyrometer 的复数) n. 高温计\\n[化] 高温计",
"pyrometric":" 高温测量的, 测温的",
"pyrometric cone":"[化] 熔锥; 示温熔锥",
"pyrometric cone equivalent":"[机] 示温熔锥当量",
"pyrometrically":"adv. pyrometer的变形",
"pyrometry":"n. 高温测定, 测高温术, 高温测定法\\n[医] 高温测量法",
"Pyromic":"一种镍铬耐热合金",
"pyromike":"微型高温计",
"Pyromorphidae":"烟翅蛾科",
"pyromorphism":"热变法",
"pyromorphite":"n. [矿]磷氯铅矿",
"pyromorphous":"火(成结)晶的",
"pyromotor":"热动机",
"pyromucate":"焦粘酸盐[酯]",
"pyromucic acid":"[化] 焦粘酸",
"pyromucic aicd":"[化] 焦粘酸; 2-呋喃羧酸; 糠酸",
"pyromucic amide":"[化] 焦粘酰胺",
"pyromucic nitrile":"[化] 焦粘腈",
"pyromucyl":"[化] 焦粘酰",
"pyromucylanhydrin":"焦粘酐",
"pyrom


/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#include "libuutil_common.h"

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *
uu_zalloc(size_t n)
{
	void *p = malloc(n);

	if (p == NULL) {
		uu_set_error(UU_ERROR_SYSTEM);
		return (NULL);
	}

	(void) memset(p, 0, n);

	return (p);
}

void
uu_free(void *p)
{
	free(p);
}

char *
uu_msprintf(const char *format, ...)
{
	va_list args;
	char attic[1];
	uint_t M, m;
	char *b;

	va_start(args, format);
	M = vsnprintf(attic, 1, format, args);
	va_end(args);

	for (;;) {
		m = M;
		if ((b = uu_zalloc(m + 1)) == NULL)
			return (NULL);

		va_start(args, format);
		M = vsnprintf(b, m + 1, format, args);
		va_end(args);

		if (M == m)
			break;		/* sizes match */

		uu_free(b);
	}

	return (b);
}


Properties("ro.build.version.bbk")}"
        else -> "Android ${Build.VERSION.RELEASE} SDK ${Build.VERSION.SDK_INT}"
    }

    val systemversion get() = when{
        isMIOS -> miuisystemFullVersion
        isVivo -> vivosystemversion
        else -> ""
    }
    }
}package com.github.ghmxr.ftpshare.ftpclient

import android.content.Context
import android.os.Looper
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import com.github.ghmxr.ftpshare.MyApplication
import com.github.ghmxr.ftpshare.R
import com.github.ghmxr.ftpshare.ui.ProgressDialog
import org.apache.commons.net.ftp.FTPClient
import org.apache.commons.net.ftp.FTPFile
import org.apache.commons.net.ftp.FTPReply
import java.io.*

object FtpClientUtil {

    fun listFiles(client: FTPClient, path: String, c: ((Array<FTPFile>?) -> Unit)?) {
        Thread {
            try {
                val list = client.listFiles(path)
                MyApplication.handler.post {
                    c?.invoke(list)
                }
            } catch (e: Exception) {
                MyApplication.handler.post {
                    c?.invoke(null)
                }
            }
        }.start()
    }

    fun obtainAndStartDownloadFtpFilesTask(
            context: Context, client: FTPClient, parentPath: String, ftpFiles: Array<FTPFile>,
            destinationPath: String, callback: ((String?) -> Unit)?,
    ): DownloadFtpFilesTask? {
        if (Looper.myLooper() != Looper.getMainLooper()) {
            Log.e("FtpClientUtil", "没有在主线程调用下载逻辑obtainAndStartDownloadFtpFilesTask")
            return null
        }
        val dialog = ProgressDialog(context, context.resources.getString(R.string.dialog_download_title))
        var thread: DownloadFtpFilesTask? = null
        dialog.setButton(AlertDialog.BUTTON_NEGATIVE, context.resources.getString(R.string.dialog_button_cancel)) { _, _ ->
            callback?.invoke(null)
            thread?.flag = true
            dialog.cancel()
        }
        dialog.setContentText(context.resources.getString(R.string.dialog_download_initial))
        dialog.setCancelable(false)
        dialog.setCanceledOnTouchOutside(false)
        val c = object : DownloadFtpFilesTask.DownloadTaskCallback {
            override fun onFileProgress(resPath: String, dstPath: String) {
                dialog.setProgressIndeterminate(false)
                dialog.setContentText(context.resources.getString(R.string.dialog_download1) + dstPath)
            }

            override fun onProgress(progress: Long, total: Long) {
                dialog.setProgress(progress, total)
            }

            override fun onSpeed(s: Long) {
                dialog.setSpeed(s)
            }

            override fun onCompleted(errorInfo: String) {
                dialog.cancel()
                if (errorInfo.isEmpty()) {
                    Toast.makeText(context, context.resources.getString(R.string.dialog_download_complete), Toast.LENGTH_SHORT).show()
                } else {
                    AlertDialog.Builder(context)
                            .setTitle(context.resources.getString(R.string.dialog_download_error_head2))
                            .setMessage(context.resources.getString(R.string.dialog_download_error_message).format(errorInfo))
                            .setPositiveButton(context.resources.getString(R.string.dialog_button_confirm)) { _, _ -> }
                            .show()
                }
                callback?.invoke(errorInfo)
            }

            override fun onError(e: Exception) {
                dialog.cancel()
                AlertDialog.Builder(context).setTitle(context.resources.getString(R.string.dialog_download_error_head))
                        .setMessage(String.format(context.resources.getString(R


List<MLHandKeyPoints>> asyncAnalyseFrame(
    MLHandKeyPointAnalyzerSetting setting,
  ) async {
    final List<dynamic> res = await _channel.invokeMethod(
      'hand#asyncAnalyseFrame',
      setting.toMap(),
    );
    return res.map((dynamic e) => MLHandKeyPoints.fromMap(e)).toList();
  }

  @override
  Future<List<MLHandKeyPoints>> analyseFrame(
    MLHandKeyPointAnalyzerSetting setting,
  ) async {
    final List<dynamic> res = await _channel.invokeMethod(
      'hand#analyseFrame',
      setting.toMap(),
    );
    return res.map((dynamic e) => MLHandKeyPoints.fromMap(e)).toList();
  }

  @override
  Future<bool> destroy() async {
    return await _channel.invokeMethod(
      'hand#destroy',
    );
  }

  @override
  Future<bool> isAvailable() async {
    return await _channel.invokeMethod(
      'hand#isAvailable',
    );
  }

  Future<bool> stop() async {
    return await _channel.invokeMethod(
      'hand#stop',
    );
  }
}
/*
    Copyright 2021-2024. Huawei Technologies Co., Ltd. All rights reserved.

    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

        https://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.
*/

part of '../../huawei_ml_body.dart';

class MLLivenessCapture {
  static const int startDetectFace = 1;
  static const int startDetectLiveness = 2;

  /// The camera permission is not obtained.
  static const int cameraNoPermission = 11401;

  /// Failed to start the camera.
  static const int cameraStartFailed = 11402;

  /// The face detection module times out. (The duration does not exceed 2 minutes.)
  static const int detectFaceTimeout = 11404;

  /// The operation is canceled by the user.
  static const int userCancel = 11403;

  /// The user-defined action is invalid.
  static const int userDefinedActionsInvalid = 11405;

  /// Sets whether to detect the mask.
  static const int detectMask = 1;

  /// A mask is detected.
  static const int maskWasDetected = 2;

  /// No face is detected.
  static const int noFaceWasDetected = 1;

  late MethodChannel _channel;

  MLLivenessCapture() {
    _channel = const MethodChannel('$baseChannel.liveness');
  }

  Future<MLLivenessCaptureResult> startDetect({
    bool? detectMask,
  }) async {
    return MLLivenessCaptureResult.fromJson(
      await _channel.invokeMethod(
        'liveness#startDetect',
        <String, dynamic>{
          'detectMask': detectMask ?? true,
        },
      ),
    );
  }
}
/*
 * Copyright 2021-2024. Huawei Technologies Co., Ltd. All rights reserved.
 *
 * 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
 *
 *      https://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.
 */

part of '../../huawei_ml_body.dart';

typedef Customized


     svg {
        top: 8px;
      }
    }
    >div {
      width: 100%;
      text-align: center;
      padding: 15px;
      border-right: 10px;
      h3 {
        font-size: 20px;
        margin-bottom: 0;
      }
      .form-group {
        margin-bottom: 0;
      }
    }
  }
}
@media only screen and (max-width: 360px){
  .browse{
    .browse-articles{
      ul{
        li{
          h5{
            width: 100%;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            span{
              &.badge{
                display: none;
              }
            }
          }
        }
      }
    }
  }
}
/**=====================
     73. knowledgebase CSS end
==========================**/
$aos-easing: (
  linear: cubic-bezier(.250, .250, .750, .750),

  ease: cubic-bezier(.250, .100, .250, 1),
  ease-in: cubic-bezier(.420, 0, 1, 1),
  ease-out: cubic-bezier(.000, 0, .580, 1),
  ease-in-out: cubic-bezier(.420, 0, .580, 1),

  ease-in-back: cubic-bezier(.6, -.28, .735, .045),
  ease-out-back: cubic-bezier(.175, .885, .32, 1.275),
  ease-in-out-back: cubic-bezier(.68, -.55, .265, 1.55),

  ease-in-sine: cubic-bezier(.47, 0, .745, .715),
  ease-out-sine: cubic-bezier(.39, .575, .565, 1),
  ease-in-out-sine: cubic-bezier(.445, .05, .55, .95),

  ease-in-quad: cubic-bezier(.55, .085, .68, .53),
  ease-out-quad: cubic-bezier(.25, .46, .45, .94),
  ease-in-out-quad: cubic-bezier(.455, .03, .515, .955),

  ease-in-cubic: cubic-bezier(.55, .085, .68, .53),
  ease-out-cubic: cubic-bezier(.25, .46, .45, .94),
  ease-in-out-cubic: cubic-bezier(.455, .03, .515, .955),

  ease-in-quart: cubic-bezier(.55, .085, .68, .53),
  ease-out-quart: cubic-bezier(.25, .46, .45, .94),
  ease-in-out-quart: cubic-bezier(.455, .03, .515, .955)
);

// Easings implementations
// Default timing function: 'ease'

[data-aos] {
  @each $key, $val in $aos-easing {
    body[data-aos-easing="#{$key}"] &,
    &[data-aos][data-aos-easing="#{$key}"] {
      transition-timing-function: $val;
    }
  }
}
$ti-font-path: "../fonts/themify" !default;

$borderColor: #eeeeee !default;
$iconMuted: #eeeeee !default;
$iconLight: white !default;
$iconDark: #333333 !default;
$icons-li-width: (30em/14);

$wand : "\e600";
$volume : "\e601";
$user : "\e602";
$unlock : "\e603";
$unlink : "\e604";
$trash : "\e605";
$thought : "\e606";
$target : "\e607";
$tag : "\e608";
$tablet : "\e609";
$star : "\e60a";
$spray : "\e60b";
$signal : "\e60c";
$shopping-cart : "\e60d";
$shopping-cart-full : "\e60e";
$settings : "\e60f";
$search : "\e610";
$zoom-in : "\e611";
$zoom-out : "\e612";
$cut : "\e613";
$ruler : "\e614";
$ruler-p


ed [[Fobes-57|Edward Fobes]] in Bridgewater in 1676/7.<ref>[http://interactive.ancestry.com/3824/gpc_newenglandmarriages-0288/149289 Ancestry.com U.S., New England Marriages Prior to 1700 (database on-line). Provo, UT, USA: Ancestry.com Operations Inc, 2012.]</ref><ref name="Howard"/><ref name="Mitchell">[https://archive.org/stream/historyofearlyset00mitcch#page/162/mode/2up Nahum Mitchell, "History of the Early Settlement of Bridgewater, in Plymouth Colony, Massachusetts," 1840, p 163]</ref> Elizabeth and Edward had nine children, all in Bridgewater:# [[Fobes-40|Elizabeth]], b. March 20, 1677, m. Joseph Keith<ref name="VR114">[https://archive.org/stream/vitalrecordsofbr01brid#page/114/mode/2up "Vital Records of Bridgewater, Massachusetts to the Year 1850,Volume I - Births," New England Historic Genealogical Society, 1916, p 114]</ref><ref name="Mitchell"/><ref name="Howard"/># [[Fobes-55|John]], b. July 1, 1679, m. Abigail Robinson<ref name="VR115">[https://archive.org/stream/vitalrecordsofbr01brid#page/114/mode/2up "Vital Records of Bridgewater, Massachusetts to the Year 1850, Volume I - Births," New England Historic Genealogical Society, 1916, p 115]</ref><ref name="Mitchell"/><ref name="Howard"/># Mary, b. September 7, 1681, never married<ref>[https://archive.org/stream/vitalrecordsofbr01brid#page/116/mode/2up "Vital Records of Bridgewater, Massachusetts to the Year 1850, Volume I - Births," New England Historic Genealogical Society, 1916, p 116]</ref><ref name="Mitchell"/><ref name="Howard"/># [[Fobes-3|Bethiah]], b. October 11, 1683, m. 1703 Samuel Keith<ref name="VR113">[https://archive.org/stream/vitalrecordsofbr01brid#page/112/mode/2up "Vital Records of Bridgewater, Massachusetts to the Year 1850, Volume I - Births," New England Historic Genealogical Society, 1916, p 113]</ref><ref name="Mitchell"/><ref name="Howard"/># [[Fobes-6|Hannah]], b. March 31, 1686, m. 1710 Timothy Keith<ref name="VR115"/><ref name="Mitchell"/><ref name="Howard"/># Ephraim, b. February 9, 1688, m. Martha Snell<ref name="VR114"/><ref name="Mitchell"/><ref name="Howard"/># [[Fobes-86|Joshua]], b. May 20, 1689, m. Abagail Dunbar<ref name="VR115"/><ref name="Mitchell"/><ref name="Howard"/># Benjamin, b. August 24, 1692, m. Martha Hunt<ref name="VR113"/><refname="Mitchell"/><ref name="Howard"/># William, b. July 24, 1698, m. Thankful Dwelly<ref>[https://archive.org/stream/v


irgistan",
        "KH": "Kambodža",
        "KM": "Komori",
        "KN": "Sveti Kristofor i Nevis",
        "KP": "Sjeverna Koreja",
        "KR": "Južna Koreja",
        "KW": "Kuvajt",
        "KY": "Kajmanski otoci",
        "KZ": "Kazahstan",
        "LB": "Libanon",
        "LC": "Sveta Lucija",
        "LI": "Lihtenštajn",
        "LK": "Šri Lanka",
        "LR": "Liberija",
        "LS": "Lesoto",
        "LT": "Litva",
        "LU": "Luksemburg",
        "LV": "Latvija",
        "LY": "Libija",
        "MA": "Maroko",
        "MC": "Monako",
        "MD": "Moldavija",
        "ME": "Crna Gora",
        "MF": "Saint Martin",
        "MG": "Madagaskar",
        "MH": "Maršalovi Otoci",
        "MK": "Makedonija",
        "MM": "Mjanmar (Burma)",
        "MN": "Mongolija",
        "MO": "PUP Makao Kina",
        "MP": "Sjevernomarijanski otoci",
        "MR": "Mauretanija",
        "MU": "Mauricijus",
        "MV": "Maldivi",
        "MW": "Malavi",
        "MX": "Meksiko",
        "MY": "Malezija",
        "MZ": "Mozambik",
        "NA": "Namibija",
        "NC": "Nova Kaledonija",
        "NF": "Otok Norfolk",
        "NG": "Nigerija",
        "NI": "Nikaragva",
        "NL": "Nizozemska",
        "NO": "Norveška",
        "NZ": "Novi Zeland",
        "PF": "Francuska Polinezija",
        "PG": "Papua Nova Gvineja",
        "PH": "Filipini",
        "PL": "Poljska",
        "PM": "Sveti Petar i Mikelon",
        "PN": "Otoci Pitcairn",
        "PR": "Portoriko",
        "PS": "Palestinsko područje",
        "PY": "Paragvaj",
        "QA": "Katar",
        "QO": "Vanjska područja Oceanije",
        "RO": "Rumunjska",
        "RS": "Srbija",
        "RU": "Rusija",
        "RW": "Ruanda",
        "SA": "Saudijska Arabija",
        "SB": "Salomonski Otoci",
        "SC": "Sejšeli",
        "SE": "Švedska",
        "SG": "Singapur",
        "SH": "Sveta Helena",
        "SI": "Slovenija",
        "SJ": "Svalbard i Jan Mayen",
        "SK": "Slovačka",
        "SL": "Sijera Leone",
        "SO": "Somalija",
        "SR": "Surinam",
        "SS": "Južni Sudan",
        "ST": "Sveti Toma i Princip",
        "SV": "Salvador",
        "SY": "Sirija",
        "SZ": "Svazi",
        "TC": "Otoci Turks i Caicos",
        "TD": "Čad",
        "TF": "Francuski južni i antarktički teritoriji",
        "TH": "Tajland",
        "TJ": "Tadžikistan",
        "TN": "Tunis",
        "TR": "Turska",
        "TT": "Trinidad i Tobago",
        "TW": "Tajvan",


].values=[]),r[f].values.push(c)}}else for(let o of a){let u=this.decl(n).old(n,o);if(n==="align-self"){let c=t[n]&&t[n].prefixes;if(c){if(o==="-webkit- 2009"&&c.includes("-webkit-"))continue;if(o==="-webkit-"&&c.includes("-webkit- 2009"))continue}}for(let c of u)r[c]||(r[c]={}),r[c].remove=!0}}}return[t,r]}decl(e){return tu.has(e)||tu.set(e,M.load(e)),tu.get(e)}unprefixed(e){let t=this.normalize(Qw.unprefixed(e));return t==="flex-direction"&&(t="flex-flow"),t}normalize(e){return this.decl(e).normalize(e)}prefixed(e,t){return e=Qw.unprefixed(e),this.decl(e).prefixed(e,t)}values(e,t){let r=this[e],n=r["*"]&&r["*"].values,a=r[t]&&r[t].values;return n&&a?ir.uniq(n.concat(a)):n||a||[]}group(e){let t=e.parent,r=t.index(e),{length:n}=t.nodes,a=this.unprefixed(e.prop),s=(o,u)=>{for(r+=o;r>=0&&r<n;){let c=t.nodes[r];if(c.type==="decl"){if(o===-1&&c.prop===a&&!eu.withPrefix(c.value)||this.unprefixed(c.prop)!==a)break;if(u(c)===!0)return!0;if(o===1&&c.prop===a&&!eu.withPrefix(c.value))break}r+=o}return!1};return{up(o){return s(-1,o)},down(o){return s(1,o)}}}};Xw.exports=si});var eb=v((Z4,Zw)=>{l();Zw.exports={"backdrop-filter":{feature:"css-backdrop-filter",browsers:["ios_saf 16.1","ios_saf 16.3","ios_saf 16.4","ios_saf 16.5","safari 16.5"]},element:{props:["background","background-image","border-image","mask","list-style","list-style-image","content","mask-image"],feature:"css-element-function",browsers:["firefox 114"]},"user-select":{mistakes:["-khtml-"],feature:"user-select-none",browsers:["ios_saf 16.1","ios_saf 16.3","ios_saf 16.4","ios_saf 16.5","safari 16.5"]},"background-clip":{feature:"background-clip-text",browsers:["and_chr 114","and_uc 15.5","chrome 109","chrome 113","chrome 114","edge 114","opera 99","samsung 21"]},hyphens:{feature:"css-hyphens",browsers:["ios_saf 16.1","ios_saf 16.3","ios_saf 16.4","ios_saf 16.5","safari 16.5"]},fill:{props:["width","min-width","max-width","height","min-height","max-height","inline-size","min-inline-size","max-inline-size","block-size","min-block-size","max-block-size","grid","grid-template","grid-template-rows","grid-template-columns","grid-auto-columns","grid-auto-rows"],feature:"intrinsic-width",browsers:["and_chr 114","and_uc 15.5","chrome 109","chrome 113","chrome 114","edge 114","opera 99","samsung 21"]},"fill-available":{props:["width","min-width","max-width","height","min-height","max-height","inline-size","min-inline-size","max-inline-size","block-size","min-block-size","max-block-size","grid","grid-template","grid-template-rows","grid-template-columns","grid-auto-columns","grid-auto-rows"],feature:"intrinsic-width",browse


O_PRIVILEDGES);
            return Err(());
        }
        let (target_id, _) = find_nick(ctx.id, ctx.rb, &self.clients, &self.nicks, args.who)?;
        self.remove_client(target_id, format_args!("Killed: {}", args.reason), "Killed");
        Ok(())
    }

    // LIST

    pub fn cmd_list_all(&self, ctx: CommandContext<'_>) -> Result {
        let client = &self.clients[ctx.id];
        ctx.rb.lr_batch_begin();

        for (name, channel) in &self.channels {
            if channel.secret && !client.operator && !channel.members.contains_key(&ctx.id) {
                continue;
            }
            let msg = ctx.rb.reply(rpl::LIST).param(name.get());
            channel.list_entry(msg);
        }

        ctx.rb
            .reply(rpl::LISTEND)
            .trailing_param(lines::END_OF_LIST);

        Ok(())
    }

    pub fn cmd_list(
        &self,
        ctx: CommandContext<'_>,
        targets: data::List<'_, data::ChannelName<'_>>,
    ) -> Result {
        let client = &self.clients[ctx.id];
        ctx.rb.lr_batch_begin();

        for name in targets.iter() {
            if let Some(channel) = self.channels.get(name.u()) {
                if channel.secret && !client.operator && !channel.members.contains_key(&ctx.id) {
                    continue;
                }
                let msg = ctx.rb.reply(rpl::LIST).param(name.get());
                channel.list_entry(msg);
            }
        }

        ctx.rb
            .reply(rpl::LISTEND)
            .trailing_param(lines::END_OF_LIST);

        Ok(())
    }

    // LUSERS

    pub fn cmd_lusers(&self, mut ctx: CommandContext<'_>) -> Result {
        ctx.rb.lr_batch_begin();
        self.send_lusers(ctx.id, &mut ctx.rb);
        Ok(())
    }

    // MODE

    pub fn cmd_mode_channel_get(
        &self,
        ctx: CommandContext<'_>,
        channel_name: data::ChannelName<'_>,
    ) -> Result {
        let channel = find_channel(ctx.id, ctx.rb, &self.channels, channel_name)?;
        let full_info = channel.members.contains_key(&ctx.id) || self.clients[ctx.id].operator;

        let msg = ctx.rb.reply(rpl::CHANNELMODEIS).param(channel_name.get());
        channel.modes(msg, full_info);

        Ok(())
    }

    pub fn cmd_mode_channel_set(
        &mut self,
        mut ctx: CommandContext<'_>,
        args: data::req::ModeChannelSet<'_>,
    ) -> Result {
        let channel = match self.channels.get_mut(args.channel.u()) {
            Some(channel) => channel,
            None => {
                log::debug!("{}:     no such channel", ctx.id);
                ctx.rb
                    .reply(rpl::ERR_NOSUCHCHANNEL)
                    .param(args.channel.get())
                    .trailing_param(lines::NO_SUCH_CHANNEL);
                return Err(());
            }
        };

        let issuer = &self.clients[ctx.id];
        let issuer_modes = find_member(ctx.id, ctx.rb, channel, args.channel)?;

        if !issuer.operator && !issuer_modes.can_change(args.modes) {
            log::debug!("{}:     not operator", ctx.id);
            ctx.rb
                .reply(rpl::ERR_CHANOPRIVSNEEDED)
                .param(args.channel.get())
                .trailing_param(lines::CHAN_O_PRIVS_NEEDED);
            return Err(());
        }

        let reply_list = |rb: &mut ReplyBuffer, item


ounds, pRectLoc, lCloseHint, pHitResult);
    return E_NOTIMPL;
}

static HRESULT WINAPI ViewObject_GetNaturalExtent(IViewObjectEx *iface, DWORD dwAspect, LONG lindex,
        DVTARGETDEVICE *ptd, HDC hicTargetDev, DVEXTENTINFO *pExtentInfo, LPSIZEL pSizel)
{
    HTMLDocument *This = impl_from_IViewObjectEx(iface);
    FIXME("(%p)->(%d %d %p %p %p %p\n", This, dwAspect,lindex, ptd,
            hicTargetDev, pExtentInfo, pSizel);
    return E_NOTIMPL;
}

static const IViewObjectExVtbl ViewObjectVtbl = {
    ViewObject_QueryInterface,
    ViewObject_AddRef,
    ViewObject_Release,
    ViewObject_Draw,
    ViewObject_GetColorSet,
    ViewObject_Freeze,
    ViewObject_Unfreeze,
    ViewObject_SetAdvise,
    ViewObject_GetAdvise,
    ViewObject_GetExtent,
    ViewObject_GetRect,
    ViewObject_GetViewStatus,
    ViewObject_QueryHitPoint,
    ViewObject_QueryHitRect,
    ViewObject_GetNaturalExtent
};

void HTMLDocument_View_Init(HTMLDocument *This)
{
    This->IOleDocumentView_iface.lpVtbl = &OleDocumentViewVtbl;
    This->IViewObjectEx_iface.lpVtbl = &ViewObjectVtbl;
}

static inline HTMLDocumentObj *impl_from_IWindowForBindingUI(IWindowForBindingUI *iface)
{
    return CONTAINING_RECORD(iface, HTMLDocumentObj, IWindowForBindingUI_iface);
}

static HRESULT WINAPI WindowForBindingUI_QueryInterface(IWindowForBindingUI *iface, REFIID riid, void **ppv)
{
    HTMLDocumentObj *This = impl_from_IWindowForBindingUI(iface);

    if(IsEqualGUID(&IID_IUnknown, riid)) {
        TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
        *ppv = &This->IWindowForBindingUI_iface;
    }else if(IsEqualGUID(&IID_IWindowForBindingUI, riid)) {
        TRACE("(%p)->(IID_IWindowForBindingUI %p)\n", This, ppv);
        *ppv = &This->IWindowForBindingUI_iface;
    }else {
        WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
        *ppv = NULL;
        return E_NOINTERFACE;
    }

    IUnknown_AddRef((IUnknown*)*ppv);
    return S_OK;
}

static ULONG WINAPI WindowForBindingUI_AddRef(IWindowForBindingUI *iface)
{
    HTMLDocumentObj *This = impl_from_IWindowForBindingUI(iface);
    return htmldoc_addref(&This->basedoc);
}

static ULONG WINAPI WindowForBindingUI_Release(IWindowForBindingUI *iface)
{
    HTMLDocumentObj *This = impl_from_IWindowForBindingUI(iface);
    return htmldoc_release(&This->basedoc);
}

static HRESULT WINAPI WindowForBindingUI_GetWindow(IWindowForBindingUI *iface, REFGUID rguidReason, HWND *phwnd)
{
    HTMLDocumentObj *This = impl_from_IWindowForBindingUI(iface);

    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(rguidReason), phwnd);

    *phwnd = This->hwnd;
    return S_OK;
}

static const IWindowForBindingUIVtbl WindowForBindingUIVtbl = {
    WindowForBindingUI_QueryInterface,
    WindowForBindingUI_AddRef,
    WindowForBindingUI_Release,
    WindowForBindingUI_GetWindow
};

void init_binding_ui(HTMLDocumentObj *doc)
{
    doc->IWindowForBindingUI_iface.lpVtbl = &WindowForBindingUIVtbl;
}


 6;
	rcTag.bottom	= rcTag.top + 6;
	rcTag.left		= tagx - 3;
	rcTag.right		= tagx + 3;

	return true;
}

// Get workspace min, max point in terms of tool window
void ExpressionTool::GetWorkspaceLeftRight( int& left, int& right )
{
	POINT pt;
	pt.x = TRAY_ITEM_INSET;
	pt.y = 0;

	ClientToScreen( (HWND)m_pWorkspace->getHandle(), &pt );
	ScreenToClient( (HWND)getHandle(), &pt );

	left = (short)pt.x;

	pt.x = m_pWorkspace->w2() - TRAY_ITEM_INSET - 12;
	pt.y = 0;

	ClientToScreen( (HWND)m_pWorkspace->getHandle(), &pt );
	ScreenToClient( (HWND)getHandle(), &pt );

	right = (short)pt.x;
}

//-----------------------------------------------------------------------------
// Purpose:
// Input  : mx -
//			my -
// Output : CFlexTimingTag
//-----------------------------------------------------------------------------
CFlexTimingTag *ExpressionTool::IsMouseOverTag( int mx, int my )
{
	CChoreoEvent *event = GetSafeEvent();
	if ( !event )
		return NULL;

	RECT rcClient;
	GetClientRect( (HWND)getHandle(), &rcClient );

	int left, right;

	GetWorkspaceLeftRight( left, right );

	rcClient.left	= left;
	rcClient.right	= right;
	rcClient.top	= GetCaptionHeight();
	rcClient.bottom = rcClient.top + TRAY_HEIGHT;

	POINT pt;
	pt.x = mx;
	pt.y = my;

	for ( int i = 0 ; i < event->GetNumTimingTags(); i++ )
	{
		CFlexTimingTag *tag = event->GetTimingTag( i );
		if ( !tag )
			continue;

		RECT rcTag;

		if ( !GetTimingTagRect( rcClient, event, tag, rcTag ) )
			continue;

		if ( !PtInRect( &rcTag, pt ) )
			continue;

		return tag;
	}

	return NULL;
}

//-----------------------------------------------------------------------------
// Purpose:
// Input  : drawHelper -
//-----------------------------------------------------------------------------
void ExpressionTool::DrawRelativeTags( CChoreoWidgetDrawHelper& drawHelper )
{
	CChoreoEvent *event = GetSafeEvent();
	if ( !event )
		return;

	float st, ed;
	GetStartAndEndTime( st, ed );

	if ( event->GetDuration() <= 0.0f )
		return;

	CChoreoScene *scene = g_pChoreoView->GetScene();
	if ( !scene )
		return;

	RECT rcClient;
	drawHelper.GetClientRect( rcClient );

	int left, right;

	GetWorkspaceLeftRight( left, right );

	rcClient.top += GetCaptionHeight();

	rcClient.left	= left;
	rcClient.right	= right;

	rcClient.bottom = rcClient.top + TRAY_HEIGHT;

	// Iterate relative tags
	for ( int i = 0; i < scene->GetNumActors(); i++ )
	{
		CChoreoActor *a = scene->GetActor( i );
		if ( !a )
			continue;

		for ( int j = 0; j < a->GetNumChannels(); j++ )
		{
			CChoreoChannel *c = a->GetChannel( j );
			if ( !c )
				continue;

			for ( int k = 0 ; k < c->GetNumEvents(); k++ )
			{
				CChoreoEvent *e = c->GetEvent( k );
				if ( !e )
					continue;

				// add each tag to combo box
				for ( int t = 0; t < e->GetNumRelativeTags(); t++ )
				{
					CEventRelativeTag *tag = e->GetRelativeTag( t


  }
}

@media screen and (-ms-high-contrast: black-on-white) {
  .is-disabled .ms-Label {
    color: #600000;
  }
}

.ms-Toggle {
  color: #333333;
  font-family: 'Segoe UI Regular WestEuropean', 'Segoe UI', Tahoma, Arial, sans-serif;
  font-size: 14px;
  font-weight: normal;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  box-shadow: none;
  position: relative;
  display: block;
  margin-bottom: 26px;
}

.ms-Toggle .ms-Label {
  position: relative;
  padding: 0 0 0 62px;
  font-size: 12px;
}

.ms-Toggle:hover .ms-Label {
  color: #000000;
}

.ms-Toggle:active .ms-Label {
  color: #333333;
}

.ms-Toggle.is-disabled .ms-Label {
  color: #a6a6a6;
}

@media screen and (-ms-high-contrast: active) {
  .ms-Toggle.is-disabled .ms-Label {
    color: #00ff00;
  }
}

@media screen and (-ms-high-contrast: black-on-white) {
  .ms-Toggle.is-disabled .ms-Label {
    color: #600000;
  }
}

.ms-Toggle.is-disabled .ms-Toggle-field {
  background-color: #ffffff !important;
  border-color: #c8c8c8 !important;
  pointer-events: none !important;
  cursor: default !important;
}

.ms-Toggle.is-disabled .ms-Toggle-field:before {
  background-color: #c8c8c8 !important;
}

@media screen and (-ms-high-contrast: active) {
  .ms-Toggle.is-disabled .ms-Toggle-field,
  .ms-Toggle.is-disabled .ms-Toggle-field:before {
    border-color: #00ff00;
  }
}

@media screen and (-ms-high-contrast: black-on-white) {
  .ms-Toggle.is-disabled .ms-Toggle-field,
  .ms-Toggle.is-disabled .ms-Toggle-field:before {
    border-color: #600000;
  }
}

.ms-Toggle-description {
  position: relative;
  font-size: 12px;
  vertical-align: top;
  display: block;
  margin-bottom: 8px;
}

.ms-Toggle-field {
  position: relative;
  display: inline-block;
  width: 57px;
  height: 20px;
  box-sizing: border-box;
  border: 2.5px #c8c8c8 solid;
  cursor: pointer;
}

.ms-Toggle-input {
  position: absolute;
  opacity: 0;
  top: 0;
}

.ms-Toggle-input + .ms-Toggle-field {
  background-color: #f4f4f4;
}

.ms-Toggle-input + .ms-Toggle-field:before {
  position: absolute;
  display: block;
  box-sizing: content-box;
  content: '';
  top: -2.5px;
  left: -2.5px;
  width: 12px;
  height: 20px;
  background-color: #767676;
  outline: 2px solid transparent;
}

@media screen and (-ms-high-contrast: active) {
  .ms-Toggle-input + .ms-Toggle-field:before {
    border: 2.5px solid #ffffff;
    height: 15px;
    outline: 0;
  }
}

@media screen and (-ms-high-contrast: black-on-white) {
  .ms-Toggle-input + .ms-Toggle-field:before {
    border-color: #000000;
  }


content-based-recommender-system-for-hotels-in-seattle-d724f0a32070

## Get all unigrams

```python
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

def get_top_n_words(corpus, n=None):
    vec = CountVectorizer(stop_words='english').fit(corpus)
    bag_of_words = vec.transform(corpus)
    sum_words = bag_of_words.sum(axis=0)
    words_freq = [(word, sum_words[0, idx]) for word, idx in vec.vocabulary_.items()]
    words_freq = sorted(words_freq, key = lambda x: x[1], reverse=True)
    return words_freq[:n]

document_corpus = [
  "Dog bites man",
  "Dog bites man after man eats fish",
  "Dog bites fish",
  "Man bites dog",
  "Dog eats meat",
  "Man eats food",
  "Man eats fish"
]

common_words = get_top_n_words(document_corpus, 5) # or use df['desc']

df2 = pd.DataFrame(common_words, columns = ['desc' , 'count'])
df2.groupby('desc').sum()['count'].sort_values().plot(kind='barh', title='Top 5 words in document corpus')

```

    <matplotlib.axes._subplots.AxesSubplot at 0x7fbae1ff3510>

![png](README_files/README_102_1.png)

## Get all bigrams

```python
def get_top_n_bigram(corpus, n=None):
    vec = CountVectorizer(ngram_range=(2, 2), stop_words='english').fit(corpus)
    bag_of_words = vec.transform(corpus)
    sum_words = bag_of_words.sum(axis=0)
    words_freq = [(word, sum_words[0, idx]) for word, idx in vec.vocabulary_.items()]
    words_freq =sorted(words_freq, key = lambda x: x[1], reverse=True)
    return words_freq[:n]

document_corpus = [
  "Dog bites man",
  "Dog bites man after man eats fish",
  "Dog bites fish",
  "Man bites dog",
  "Dog eats meat",
  "Man eats food",
  "Man eats fish"
]

common_words = get_top_n_bigram(document_corpus, 5)

df4 = pd.DataFrame(common_words, columns = ['desc' , 'count'])
df4.groupby('desc').sum()['count'].sort_values().plot(kind='barh', title='Top 5 bigrams in our corpus after removing stop words')

```

    <matplotlib.axes._subplots.AxesSubplot at 0x7fbae2086950>

![png](README_files/README_104_1.png)

## Get all trigrams

```python
def get_top_n_trigram(corpus, n=None):
    vec = CountVectorizer(ngram_range=(3, 3), stop_words='english').fit(corpus)
    bag_of_words = vec.transform(corpus)
    sum_words = bag_of_words.sum(axis=0)
    words_freq = [(word, sum_words[0, idx]) for word, idx in vec.vocabulary_.items()]
    words_freq = sorted(


        rg = DiversionRulesGroup();
        rg.groupid = use.diversionGroupId;
        rg.name = use.diversionName;
      } else if (use.diversionGroupId == getGeoSiteGroupId()) {
        if (!getUse().geoSite.contains(use.diversionName)) {
          continue;
        }
        rg = DiversionRulesGroup();
        rg.groupid = use.diversionGroupId;
        rg.name = use.diversionName;
      } else if (use.diversionGroupId == getGeoIpGroupId()) {
        if (!getUse().geoIp.contains(use.diversionName)) {
          continue;
        }
        rg = DiversionRulesGroup();
        rg.groupid = use.diversionGroupId;
        rg.name = use.diversionName;
      } else if (use.diversionGroupId == getAclGroupId()) {
        if (!getUse().acl.contains(use.diversionName)) {
          continue;
        }
        rg = DiversionRulesGroup();
        rg.groupid = use.diversionGroupId;
        rg.name = use.diversionName;
      } else {
        rg = src.getByName(use.diversionName);
        if (rg == null) {
          continue;
        }
      }
      if (use.serverGroupId == getUrltestGroupId()) {
        if (kOutboundTagUrltest == use.serverName) {
          ProxyConfig pc = getUrltest();
          diversionGroups.add(Tuple2(rg, pc));
        } else {
          for (var urltest in custom.urltests) {
            if (urltest.remark == use.serverName) {
              ProxyConfig pc = getUrltest(tag: urltest.remark);
              diversionGroups.add(Tuple2(rg, pc));
              break;
            }
          }
        }
      } else {
        ServerConfigGroupItem? scg = getByGroupId(use.serverGroupId);
        if (scg == null) {
          continue;
        }
        ProxyConfig? pc = scg.getByTag(use.serverName);
        if (pc == null) {
          continue;
        }
        diversionGroups.add(Tuple2(rg, pc));
      }
    }
    return diversionGroups;
  }

  static Future<void> loadServerConfig() async {
    String filePath = await PathUtils.subscribeFilePath();
    bool exists = await File(filePath).exists();
    if (!exists) {
      ServerConfigGroupItem item = ServerConfigGroupItem();
      item.index = 0;
      item.groupid = ServerManager.getCustomGroupId();
      item.type = SubscriptionLinkType.singbox;
      _serverConfig.items.insert(0, item);
      return;
    }
    String content = "";
    try {
      content = await File(filePath).readAsString();
      if (content.isNotEmpty) {
        var config = jsonDecode(content);
        _serverConfig.fromJson(config);
        int index = 0;
        for (var item in _serverConfig.items) {
          item.index = index++;
        }
      }
    } catch (err, stacktrace) {
      SentryUtils.captureException(
          'ServerManager.loadServerConfig.exception', [], err, stacktrace,
          attachments: {filePath: content});
      Log.w(
          "ServerManager.loadServerConfig exception $filePath ${err.toString()}");
    }
  }

  static Future<void> saveServerConfig() async {
    if (_savingServerConfig) {
      return;
    }
    _savingServerConfig = true;
    String filePath = await PathUtils.subscribeFilePath();
    //String content = jsonEncode(_serverConfig.toJson());
    const JsonEncoder encoder = JsonEncoder.withIndent('  ');
    String content = encoder.convert(_serverConfig.toJson());

    try {
      await


0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
 * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
 *  */

!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.b


return {
  -- animations
  {
    "echasnovski/mini.animate",
    event = "VeryLazy",
    opts = function()
      -- don't use animate when scrolling with the mouse
      local mouse_scrolled = false
      for _, scroll in ipairs({ "Up", "Down" }) do
        local key = "<ScrollWheel" .. scroll .. ">"
        vim.keymap.set({ "", "i" }, key, function()
          mouse_scrolled = true
          return key
        end, { expr = true })
      end

      local animate = require("mini.animate")
      return {
        resize


summary> Initializes a new instance of <see cref="Paths1Ti27MtOperationnotrequiredPatchRequestbodyContentApplicationJsonSchema"/>. </summary>
        /// <param name="required"></param>
        /// <param name="nonRequired"></param>
        internal Paths1Ti27MtOperationnotrequiredPatchRequestbodyContentApplicationJsonSchema(string required, string nonRequired)
        {
            Required = required;
            NonRequired = nonRequired;
        }

        /// <summary> Gets or sets the required. </summary>
        public string Required { get; set; }
        /// <summary> Gets or sets the non required. </summary>
        public string NonRequired { get; set; }
    }
}


[2226] = "Bastón de mago ogro",
  [2227] = "Hacha de guerra de ogro pesada",
  [2230] = "Guantes de Brawn",
  [2231] = "Toga inferno",
  [2232] = "Botas con runas oscuras",
  [2233] = "Leotardos de tejedora de las Sombras",
  [2234] = "Armadura de caminante nocturno",
  [2235] = "Garra de Brack",
  [2236] = "Comillo negro",
  [2237] = "Pantalones con remiendos",
  [2238] = "Pantalones de Urchin",
  [2239] = "El anillo del coleccionista",
  [2240] = "Manteo basto",
  [2241] = "Manteo de forajido",
  [2243] = "Mano de Edward el Extraño",
  [2244] = "Hoja krol",
  [2245] = "Yelmo de Narv",
  [2246] = "Sello de mirmidón",
  [2248] = "Martin Fury",
  [2249] = "Rodela de milicia",
  [2250] = "Croquetas de cangrejo",
  [2251] = "Pata de araña babosa",
  [2252] = "Provisiones goblin variadas",
  [2254] = "Martillo de guerra de cristal de hielo",
  [2255] = "Deprecated Thick Leather Gloves",
  [2256] = "Garrote esquelético",
  [2257] = "Bastón Peloescarcha",
  [2258] = "Espada corta Peloescarcha",
  [2259] = "Garrote Peloescarcha",
  [2260] = "Hacha de mano Peloescarcha",
  [2262] = "Marca de Kern",
  [2263] = "Fitohoja",
  [2264] = "Manto de Ladrones",
  [2265] = "Hacha Rompecantos",
  [2266] = "Daga Rompecantos",
  [2267] = "Maza Rompecantos",
  [2268] = "Espada Rompecantos",
  [2271] = "Bastón del Profeta bendito",
  [2273] = "Armadura de guerrilla",
  [2274] = "Guantes de zapador",
  [2275] = "Deprecated Sentinel Coif",
  [2276] = "Botas Camina pantanos",
  [2277] = "Leotardos de necromántico",
  [2278] = "Insignias de rastreador de bosque",
  [2280] = "Bastón de Kam",
  [2281] = "Hacha de sílex Rodentia",
  [2282] = "Espada corta Rodentia",
  [2283] = "Cinturón de paño de rata",
  [2284] = "Capa de paño de rata",
  [2287] = "Anca de carne",
  [2288] = "Agua fresca mágica",
  [2289] = "Pergamino de Fuerza II",
  [2290] = "Pergamino de Intelecto II",
  [2291] = "Kang el Decapitador",
  [2292] = "Togas de necrología",
  [2295] = "Colmillo de jabalí grande",
  [2296] = "Morro de gran Dentosangre",
  [2299] = "Hacha de guerra ardiente",
  [2300] = "Jubón de cuero en relieve",
  [2301] = "Botas de pellejo suave ligeras",
  [2302] = "Botas de cuero cosidas a mano",
  [2303] = "Pantalones de cuero cosidos a mano",
  [2304] = "Complem


tr > name ) ptr++;
                        const auto namelen = name + res - ptr;
                        auto cache = s_modCache->push_next();
                        cache->start = base;
                        cache->end = base + info.SizeOfImage;
                        cache->name = (char*)tracy_malloc_fast( namelen+3 );
                        cache->name[0] = '[';
                        memcpy( cache->name+1, ptr, namelen );
                        cache->name[namelen+1] = ']';
                        cache->name[namelen+2] = '\0';
                        return cache->name;
                    }
                }
            }
        }
    }
    return "[unknown]";
}

CallstackSymbolData DecodeSymbolAddress( uint64_t ptr )
{
    CallstackSymbolData sym;
    IMAGEHLP_LINE64 line;
    DWORD displacement = 0;
    line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
#ifdef TRACY_DBGHELP_LOCK
    DBGHELP_LOCK;
#endif
    const auto res = SymGetLineFromAddr64( GetCurrentProcess(), ptr, &displacement, &line );
    if( res == 0 || line.LineNumber >= 0xF00000 )
    {
        sym.file = "[unknown]";
        sym.line = 0;
        sym.needFree = false;
    }
    else
    {
        sym.file = CopyString( line.FileName );
        sym.line = line.LineNumber;
        sym.needFree = true;
    }
#ifdef TRACY_DBGHELP_LOCK
    DBGHELP_UNLOCK;
#endif
    return sym;
}

CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
{
    int write;
    const auto proc = GetCurrentProcess();
    InitRpmalloc();

#ifdef TRACY_DBGHELP_LOCK
    DBGHELP_LOCK;
#endif

    const auto moduleName = GetModuleNameAndPrepareSymbols(ptr);

#if !defined TRACY_NO_CALLSTACK_INLINES
    BOOL doInline = FALSE;
    DWORD ctx = 0;
    DWORD inlineNum = 0;
    if( _SymAddrIncludeInlineTrace )
    {
        inlineNum = _SymAddrIncludeInlineTrace( proc, ptr );
        if( inlineNum > MaxCbTrace - 1 ) inlineNum = MaxCbTrace - 1;
        DWORD idx;
        if( inlineNum != 0 ) doInline = _SymQueryInlineTrace( proc, ptr, 0, ptr, ptr, &ctx, &idx );
    }
    if( doInline )
    {
        write = inlineNum;
        cb_num = 1 + inlineNum;
    }
    else
#endif
    {
        write = 0;
        cb_num = 1;
    }

    char buf[sizeof( SYMBOL_INFO ) + MaxNameSize];
    auto si = (SYMBOL_INFO*)buf;
    si->SizeOfStruct = sizeof( SYMBOL_INFO );
    si->MaxNameLen = MaxNameSize;

    const auto symValid = SymFromAddr( proc, ptr, nullptr, si ) != 0;

    IMAGEHLP_LINE64 line;
    DWORD displacement = 0;
    line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);

    {
        const char* filename;
        const auto res = SymGetLineFromAddr64( proc, ptr, &displacement, &line );
        if( res == 0 || line.LineNumber >= 0xF00000 )
        {
            filename = "[unknown]";
            cb_data[write].line = 0;
        }
        else
        {
            filename = line.FileName;
            cb_data[write].line = line.LineNumber;
        }

        cb_data[write].name = symValid ? CopyStringFast( si->Name, si->NameLen ) : CopyStringFast( moduleName );
        cb_data[write].file = CopyStringFast( filename );
        if( symValid )
        {
            cb_data[write].symLen = si->Size;
            cb_data[write


 background: #f1f1f1;
    border-radius: 4px;
}

.preview-content::-webkit-scrollbar-thumb {
    background: #667eea;
    border-radius: 4px;
}

.preview-content::-webkit-scrollbar-thumb:hover {
    background: #764ba2;
}@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
  :root {
    --background: 0 0% 100%;
    --foreground: 0 0% 3.9%;
    --card: 0 0% 100%;
    --card-foreground: 0 0% 3.9%;
    --popover: 0 0% 100%;
    --popover-foreground: 0 0% 3.9%;
    --primary: 0 0% 9%;
    --primary-foreground: 0 0% 98%;
    --secondary: 0 0% 96.1%;
    --secondary-foreground: 0 0% 9%;
    --muted: 0 0% 96.1%;
    --muted-foreground: 0 0% 45.1%;
    --accent: 0 0% 96.1%;
    --accent-foreground: 0 0% 9%;
    --destructive: 0 84.2% 60.2%;
    --destructive-foreground: 0 0% 98%;
    --border: 0 0% 89.8%;
    --input: 0 0% 89.8%;
    --ring: 0 0% 3.9%;
    --chart-1: 12 76% 61%;
    --chart-2: 173 58% 39%;
    --chart-3: 197 37% 24%;
    --chart-4: 43 74% 66%;
    --chart-5: 27 87% 67%;
    --radius: 0.5rem
  }
  .dark {
    --background: 0 0% 3.9%;
    --foreground: 0 0% 98%;
    --card: 0 0% 3.9%;
    --card-foreground: 0 0% 98%;
    --popover: 0 0% 3.9%;
    --popover-foreground: 0 0% 98%;
    --primary: 0 0% 98%;
    --primary-foreground: 0 0% 9%;
    --secondary: 0 0% 14.9%;
    --secondary-foreground: 0 0% 98%;
    --muted: 0 0% 14.9%;
    --muted-foreground: 0 0% 63.9%;
    --accent: 0 0% 14.9%;
    --accent-foreground: 0 0% 98%;
    --destructive: 0 62.8% 30.6%;
    --destructive-foreground: 0 0% 98%;
    --border: 0 0% 14.9%;
    --input: 0 0% 14.9%;
    --ring: 0 0% 83.1%;
    --chart-1: 220 70% 50%;
    --chart-2: 160 60% 45%;
    --chart-3: 30 80% 55%;
    --chart-4: 280 65% 60%;
    --chart-5: 340 75% 55%
  }
}
@layer base {
  * {
    @apply border-border;
  }
  body {
    @apply bg-background text-foreground;
  }
}
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  font-family: Arial, Helvetica, sans-serif;
}
@media screen and (max-width: 1400px) {
  #profile {
    height: 83vh;
    margin-bottom: 6rem;
  }
  .about-containers {
    flex-wrap: wrap;
  }
  #contact,
  #projects {
    height: fit-content;
  }
}

@media screen and (max-width: 1200px) {
  #desktop-nav {
    display: none;
  }
  #hamburger-nav {
    display: flex;
  }
  #experience,
  .experience-details-container {
    margin-top: 2rem;
  }
  #profile,
  .section-container {
    display: block;
    height: fit-content;
  }
  .arrow {
    display:


c1a}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid transparent}ul,ol{margin-top:0;margin-bottom:10.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:21px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #464545}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #464545;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:21px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.42857143;word-break:break-all;wor


  const constants = {};
  constants.IMAGE_LOAD_RETRY_TIME_MS = 500;
  constants.SUBDIVISION_MINIMUM = 1;
  constants.SUBDIVISION_RECURSION_DEPTH = 3;
  constants.SUBDIVISION_DEPTH_THRESHOLD = 100;
  constants.FAR_PLANE_DISTANCE = 10000;

  // Care of bckenney@ via
  // http://extremelysatisfactorytotalitarianism.com/blog/?p=2120
  function drawTexturedTriangle(ctx, img, p0, p1, p2, t0, t1, t2) {
    const tmpP0 = [p0[0], p0[1]];
    const tmpP1 = [p1[0], p1[1]];
    const tmpP2 = [p2[0], p2[1]];
    const tmpT0 = [t0[0], t0[1]];
    const tmpT1 = [t1[0], t1[1]];
    const tmpT2 = [t2[0], t2[1]];

    ctx.beginPath();
    ctx.moveTo(tmpP0[0], tmpP0[1]);
    ctx.lineTo(tmpP1[0], tmpP1[1]);
    ctx.lineTo(tmpP2[0], tmpP2[1]);
    ctx.closePath();

    tmpP1[0] -= tmpP0[0];
    tmpP1[1] -= tmpP0[1];
    tmpP2[0] -= tmpP0[0];
    tmpP2[1] -= tmpP0[1];

    tmpT1[0] -= tmpT0[0];
    tmpT1[1] -= tmpT0[1];
    tmpT2[0] -= tmpT0[0];
    tmpT2[1] -= tmpT0[1];

    const det = 1 / (tmpT1[0] * tmpT2[1] - tmpT2[0] * tmpT1[1]);

    // linear transformation
    const a = (tmpT2[1] * tmpP1[0] - tmpT1[1] * tmpP2[0]) * det;
    const b = (tmpT2[1] * tmpP1[1] - tmpT1[1] * tmpP2[1]) * det;
    const c = (tmpT1[0] * tmpP2[0] - tmpT2[0] * tmpP1[0]) * det;
    const d = (tmpT1[0] * tmpP2[1] - tmpT2[0] * tmpP1[1]) * det;

    // translation
    const e = tmpP0[0] - a * tmpT0[0] - c * tmpT0[1];
    const f = tmpP0[1] - b * tmpT0[0] - d * tmpT0[1];

    ctx.save();
    ctx.transform(a, b, c, d, e, f);
    ctx.clip();
    ctx.drawImage(img, 0, 0);
    ctx.restore();
  }

  function drawTriangleSub(
      ctx, img, p0, p1, p2, t0, t1, t2, opt_recursionDepth) {
    const depth = opt_recursionDepth || 0;

    // We may subdivide if we are not at the limit of recursion.
    let subdivisionIndex = 0;
    if (depth < constants.SUBDIVISION_MINIMUM) {
      subdivisionIndex = 7;
    } else if (depth < constants.SUBDIVISION_RECURSION_DEPTH) {
      if (Math.abs(p0[2] - p1[2]) > constants.SUBDIVISION_DEPTH_THRESHOLD) {
        subdivisionIndex += 1;
      }
      if (Math.abs(p0[2] - p2[2]) > constants.SUBDIVISION_DEPTH_THRESHOLD) {
        subdivisionIndex += 2;
      }
      if (Math.abs(p1[2] - p2[2]) > constants.SUBDIVISION_DEPTH_THRESHOLD) {
        subdivisionIndex += 4;
      }
    }

    // These need to be created every time, since temporaries
    // outside of the scope will be rewritten in recursion.
    const p01 = vec4.create();
    const p02 = vec4.create();
    const p12 = vec4.create();
    const t01 = vec2.create();
    const t02 = vec2.create();
    const t12 = vec2.create();

    // Calculate the position


,$00
                DC.W $0444,$0555,$0666,$0777 ;2,$06,$04,$05
                DC.W $0777,$0666,$0555,$0444
                DC.W $02,$06,$04,$05
                DC.W $01,$03,$06,$07
                EVEN
xpal6:          DC.B $00,$00,$06,'"',$07,'f',$07,'D'
                DC.B $07,'U',$07,$11,$07,'3',$07,$00
                DC.W $0444,$0555,$0666,$0777 ;2,$06,$04,$05
                DC.W $0777,$0666,$0555,$0444
                DC.W $02,$06,$04,$05
                DC.W $01,$03,$06,$07
                EVEN
xpal7:          DC.B $00,$00,$01,'6',$05,'w',$03,'W'
                DC.B $04,'g',$00,'%',$02,'G',$07,$00
                DC.W $0444,$0555,$0666,$0777 ;2,$06,$04,$05
                DC.W $0777,$0666,$0555,$0444
                DC.W $02,$06,$04,$05
                DC.W $01,$03,$06,$07
                EVEN
xpal8:          DC.B $00,$00,$02,$02,$06,$06,$04,$04
                DC.B $05,$05,$01,$01,$03,$03,$07,$00
                DC.W $0444,$0555,$0666,$0777 ;2,$06,$04,$05
                DC.W $0777,$0666,$0555,$0444
                DC.W $02,$06,$04,$05
                DC.W $01,$03,$06,$07
                EVEN
xpal9:          DC.B $00,$00,$05,'U',$02,'"',$03,'3'
                DC.B $02,'"',$06,'f',$04,'D',$07,$00
                DC.W $0444,$0555,$0666,$0777 ;2,$06,$04,$05
                DC.W $0777,$0666,$0555,$0444
                DC.W $02,$06,$04,$05
                DC.W $01,$03,$06,$07
                EVEN
xpal10:         DC.B $00,$00,$02,' ',$06,'`',$04,'@'
                DC.B $05,'P',$01,$10,$03,'0',$07,$00
                DC.W $0444,$0555,$0666,$0777 ;2,$06,$04,$05
                DC.W $0777,$0666,$0555,$0444
                EVEN

info_page_pal:  DC.L xpal1
                DC.L xpal7
                DC.L xpal2
                DC.L xpal4
                DC.L xpal5
                DC.L xpal6
                DC.L xpal3
                DC.L xpal8
                DC.L xpal9
                DC.L xpal10
                EVEN

L02C2:          DC.W $0777,$0777,$0677,$0577,$0477,$0377,$0277,$0177
                DC.W $77,$77,$67,$57,$47,$36,$25,$14,$03
                DS.W 10

                DC.B $07,'w',$07,'w',$07,'f',$07,'U'
                DC.B $07,'D',$07,'3',$07,'"',$07,$11
                DC.B $07,$00,$07,$00,$06,$00,$05,$00
                DC.B $04,$00,$03,$00,$02,$00,$01,$00
                DC.B $00,$00
                EVEN
*****************************************************************+
info_bar:       IBYTES 'INFO_BAR.*'
                DS.B 2000
                EVEN
EDIT_PIC:       IBYTES 'EDITOR.3PL' ;MAIN_GFX.3PL'
                EVEN
YM_EDIT_PIC:    IBYTES 'EXTEND.3PL' ;YM_ED_GF.3PL'
                EVEN
ste_digi_PIC:   IBYTES 'STE_DMA.3PL'
                EVEN
font:           IBYTES 'SPEC_FNT.1PL'
                EVEN
alertbox:       IBYTES 'ALERBOX.IMG'
                EVEN
MOUSE_POINTER:  DC.L MOUSE_GFX  ; MOUSEPOINTEREINTRAEGE


3, BayerDither.CLUSTERED_DOT_DIAGONAL_8X8_3_MAX, PixelMapper.NORMAL_STRENGTH)
  ),
  CLUSTERED_DOT_DIAGONAL_8X8_3_HEAVY(() ->
    bayer(BayerDither.CLUSTERED_DOT_DIAGONAL_8X8_3, BayerDither.CLUSTERED_DOT_DIAGONAL_8X8_3_MAX, PixelMapper.MAX_STRENGTH)
  ),
  CLUSTERED_DOT_4X4_LIGHT(() -> bayer(BayerDither.CLUSTERED_DOT_4X4, BayerDither.CLUSTERED_DOT_4X4_MAX, PixelMapper.MIN_STRENGTH)),
  CLUSTERED_DOT_4X4_NORMAL(() -> bayer(BayerDither.CLUSTERED_DOT_4X4, BayerDither.CLUSTERED_DOT_4X4_MAX, PixelMapper.NORMAL_STRENGTH)),
  CLUSTERED_DOT_4X4_HEAVY(() -> bayer(BayerDither.CLUSTERED_DOT_4X4, BayerDither.CLUSTERED_DOT_4X4_MAX, PixelMapper.MAX_STRENGTH)),
  VERTICAL_5X3_LIGHT(() -> bayer(BayerDither.VERTICAL_5X3, BayerDither.VERTICAL_5X3_MAX, PixelMapper.MIN_STRENGTH)),
  VERTICAL_5X3_NORMAL(() -> bayer(BayerDither.VERTICAL_5X3, BayerDither.VERTICAL_5X3_MAX, PixelMapper.NORMAL_STRENGTH)),
  VERTICAL_5X3_HEAVY(() -> bayer(BayerDither.VERTICAL_5X3, BayerDither.VERTICAL_5X3_MAX, PixelMapper.MAX_STRENGTH)),
  HORIZONTAL_3X5_LIGHT(() -> bayer(BayerDither.HORIZONTAL_3X5, BayerDither.HORIZONTAL_3X5_MAX, PixelMapper.MIN_STRENGTH)),
  HORIZONTAL_3X5_NORMAL(() -> bayer(BayerDither.HORIZONTAL_3X5, BayerDither.HORIZONTAL_3X5_MAX, PixelMapper.NORMAL_STRENGTH)),
  HORIZONTAL_3X5_HEAVY(() -> bayer(BayerDither.HORIZONTAL_3X5, BayerDither.HORIZONTAL_3X5_MAX, PixelMapper.MAX_STRENGTH)),
  CLUSTERED_DOT_DIAGONAL_6X6_LIGHT(() ->
    bayer(BayerDither.CLUSTERED_DOT_DIAGONAL_6X6, BayerDither.CLUSTERED_DOT_DIAGONAL_6X6_MAX, PixelMapper.MIN_STRENGTH)
  ),
  CLUSTERED_DOT_DIAGONAL_6X6_NORMAL(() ->
    bayer(BayerDither.CLUSTERED_DOT_DIAGONAL_6X6, BayerDither.CLUSTERED_DOT_DIAGONAL_6X6_MAX, PixelMapper.NORMAL_STRENGTH)
  ),
  CLUSTERED_DOT_DIAGONAL_6X6_HEAVY(() ->
    bayer(BayerDither.CLUSTERED_DOT_DIAGONAL_6X6, BayerDither.CLUSTERED_DOT_DIAGONAL_6X6_MAX, PixelMapper.MAX_STRENGTH)
  ),
  CLUSTERED_DOT_DIAGONAL_8X8_2_LIGHT(() ->
    bayer(BayerDither.CLUSTERED_DOT_DIAGONAL_8X8_


VSGZA")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetEd25519Address("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUACUSI")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetEd25519Address("G47QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVP2I")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVAAAAAAAAAAAAAJLKA")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVAAAAAAAAAAAAAAV75I")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetAddress("M47QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUK===")
		Expect(err).Should(HaveOccurred())

		err = muxed.SetAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUO")
		Expect(err).Should(HaveOccurred())
	})
})

var _ = Describe("xdr.AddressToMuxedAccount()", func() {
	It("works", func() {
		address := "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"
		muxedAccount, err := AddressToMuxedAccount(address)

		Expect(muxedAccount.Address()).To(Equal("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"))
		Expect(err).ShouldNot(HaveOccurred())

		_, err = AddressToAccountId("GCR22L3")

		Expect(err).Should(HaveOccurred())
	})
})

var _ = Describe("xdr.MuxedAccount.ToAccountId()", func() {
	It("works", func() {
		var muxed MuxedAccount

		err := muxed.SetEd25519Address("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ")
		Expect(err).ShouldNot(HaveOccurred())
		aid := muxed.ToAccountId()
		Expect(aid.Address()).To(Equal("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"))

		err = muxed.SetAddress("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVAAAAAAAAAAAAAJLK")
		Expect(err).ShouldNot(HaveOccurred())
		aid = muxed.ToAccountId()
		Expect(aid.Address()).To(Equal("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"))
	})
})
package xdr_test

import (
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"

	. "gi


        }
        if (rte_ring_empty(pipe->ring)) {
            continue;
        }

        nb_rx = rte_ring_sc_dequeue_burst(pipe->ring, (void **)local_lcore_para->rx_buf, local_lcore_para->rx_burst_sz);
        for (index = 0; index < nb_rx; index++) {
            msg_header = (QNSM_MSG_HEADER *)local_lcore_para->rx_buf[index];
            tmp_pool = msg_header->pool;
            QNSM_ASSERT(0x6d736e71 == msg_header->magic_num.num[0]);  //0x6d736e71 == "qnsm"
            QNSM_ASSERT(tmp_pool);

            /*need opt*/
            qnsm_list_for_each_entry(msg_cb, &local_lcore_para->msg_proc_head, node) {
                if (msg_cb->msg_id == msg_header->msg_id) {
                    QNSM_ASSERT(msg_cb->msg_proc);
                    msg_cb->msg_proc(msg_header + 1, msg_header->msg_len);
                    break;
                }
            }

            /*recycle resource*/
            QNSM_ASSERT(tmp_pool == msg_header->pool);
            rte_mempool_put(msg_header->pool, msg_header);
        }

        QNSM_PIPE_RX_STATS_IN_ADD(pipe, nb_rx);
    }

    return 0;
}

static void qnsm_msg_flush_timer_proc(__attribute__((unused)) struct rte_timer *timer, void *arg)
{
    QNSM_MSG_DATA *msg_data = arg;
    QNSM_MSG_LCORE_PARA  *local_lcore_para = NULL;
    EN_QNSM_APP app_id = 0;
    uint32_t pos = 0;

    local_lcore_para = &msg_data->lcore_para;
    for (app_id = 0; app_id < EN_QNSM_APP_MAX; app_id++) {
        for (pos = 0; pos < local_lcore_para->sub_lcore_num[app_id]; pos++) {
            (void)qnsm_msg_send_flush(msg_data, local_lcore_para->sub_target_lcore[app_id][pos]);
        }
    }
    return;
}
void qnsm_msg_flush_timer_init(void)
{
    int32_t ret = 0;
    QNSM_MSG_DATA *msg_data = qnsm_service_handle(EN_QNSM_SERVICE_MSG);
    QNSM_MSG_LCORE_PARA  *local_lcore_para = NULL;

    local_lcore_para = &msg_data->lcore_para;

    rte_timer_init(&local_lcore_para->msg_flush_timer);
    ret = rte_timer_reset(&local_lcore_para->msg_flush_timer,
                          rte_get_timer_hz() * 3, PERIODICAL,
                          local_lcore_para->lcore_id, qnsm_msg_flush_timer_proc, msg_data);
    if (ret < 0) {
        QNSM_DEBUG(QNSM_DBG_M_MSG, QNSM_DBG_ERR,"Cannot set lcore %d timer\n", local_lcore_para->lcore_id);
        return;
    }
    return;
}


  e: Enter limits numerically\n");
  printf("Enter option: ");
  scanf("%s",yesorno);
  if(yesorno[0]=='e' || yesorno[0]=='E'){
   printf("Enter lower wavelength limit: ");
   scanf("%f",&wavelo);
   printf("Enter upper wavelength limit: ");
   scanf("%f",&wavehi);
  }
  if(yesorno[0]=='l' || yesorno[0]=='L'){
   wavelo=histp[hindex].hhl[0].GetX1();
   wavehi=histp[hindex].hhl[1].GetX1();
  }
                                                                                // specfit.c
  //  fit info
  sprintf(tl,"Wavelength limits: %.3f - %.3f",wavelo,wavehi);
  TText *t1=histp[hindex].hhf[findex].AddText(tl);
  t1.SetTextFont(100);

  //  ask for parameter guess values and give limiting options  //

  //  heights  //
  printf("Enter approximate height of left peak: ");
  scanf("%f",&height[1]);
  printf("Enter approximate height of right peak: ");
  scanf("%f",&height[2]);

  //  fit info
  sprintf(tl,"Height guesses: left=%.1f, right=%.1f",height[1],height[2]);
  TText *t1=histp[hindex].hhf[findex].AddText(tl);
  t1.SetTextFont(100);

  //  locations  //
  printf("Fix separation? (y/n): ");
  scanf("%s",yesorno);
  if(yesorno[0]=='y'){
   seplim=1;
   printf("Enter center of left peak (unfixed): ");
   scanf("%f",&center[1]);
   printf("Enter center of right peak: ");
  }
  else{
   seplim=0;
   printf("Enter approximate center of left peak: ");
   scanf("%f",&center[1]);
   printf("Enter approximate center of right peak: ");
  }
  scanf("%f",&center[2]);
  sep[1] = center[2]-center[1];
                                                                                // specfit.c
  //  fit info
  if(seplim==1){
   sprintf(tl,"Center guesses: left=%.3f, right=%.3f, separation fixed",center[1],center[2]);
   TText *t1=histp[hindex].hhf[findex].AddText(tl);
   t1.SetTextFont(100);
  }
  else{
   sprintf(tl,"Center guesses: left=%.3f, right=%.3f, separation unfixed",center[1],center[2]);
   TText *t1=histp[hindex].hhf[findex].AddText(tl);
   t1.SetTextFont(100);
  }

  //  widths  //
  printf("Widths equal but not fixed? (y/n): ");
  scanf("%s",yesorno);
  if(yesorno[0]=='y'){
   widequ=1;
   width1=.5;
   widlim1=0;
   widlim2=0;

   //  fit info
   sprintf(tl,"Sigmas guess: .1, equal and unfixed");
   TText *t1=histp[hindex].hhf[findex].AddText(tl);
   t1.SetTextFont(100);
  }
  else{
   widequ=0;
   printf("Fix width of left peak? (y/n): ");
   scanf("%s",yesorno);
   if(yesorno[0]=='y'){
    widlim1=1;
    printf("Enter


,
      logger: {
        level: 'fatal'
      }
    }
  }

  const server = await create(import.meta.dirname, config)
  t.after(async () => {
    await server.close()
  })

  await server.init()
  return server
}

test('PHP hello world', async t => {
  const server = await createApplication(t)
  const res = await server.inject('/')

  t.assert.deepStrictEqual(res.statusCode, 200)
  t.assert.deepStrictEqual(res.body, 'Hello World!')
})

test('post data', async t => {
  const server = await createApplication(t)
  const res = await server.inject({
    url: '/post.php',
    method: 'POST',
    ...formAutoContet({
      foo: 'bar'
    })
  })

  t.assert.deepStrictEqual(res.statusCode, 200)
  t.assert.deepStrictEqual(JSON.parse(res.body), {
    foo: 'bar'
  })
})

test('get all headers', async t => {
  const server = await createApplication(t)
  const res = await server.inject('/headers.php')

  t.assert.deepStrictEqual(res.statusCode, 200)
  t.assert.deepStrictEqual(JSON.parse(res.body), {
    HTTP_USER_AGENT: 'lightMyRequest',
    HTTP_HOST: 'localhost:80'
  })
})

test('serve static files in docroot', async t => {
  const server = await createApplication(t)
  const res = await server.inject('/something.txt')

  t.assert.deepStrictEqual(res.statusCode, 200)
  t.assert.deepStrictEqual(res.body, 'a txt file\n')
})

test('404', async t => {
  const server = await createApplication(t)
  const res = await server.inject('/path/to/nowhere')

  t.assert.deepStrictEqual(res.statusCode, 404)
})

test('support rewriter', async t => {
  const server = await createApplication(t, undefined, {
    rewriter: [
      {
        rewriters: [
          {
            type: 'href',
            args: ['^/(.*)$', '/index.php']
          }
        ]
      }
    ]
  })
  const res = await server.inject('/rewrite_me')

  t.assert.deepStrictEqual(res.statusCode, 200)
  t.assert.deepStrictEqual(res.body, 'Hello World!')
})

test('post JSON', async t => {
  const server = await createApplication(t)
  const res = await server.inject({
    url: '/post-json.php',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ foo: 'bar' })
  })

  t.assert.deepStrictEqual(res.statusCode, 200)
  t.assert.deepStrictEqual(JSON.parse(res.body), {
    foo: 'bar'
  })
})
import test from 'ava'

import { Response, Headers } from '../index.js'

test('Minimal response construction', (t) => {
  const res = new Response({
    status: 200
  })

  t.is(res.status, 200)
  t.assert(res.headers instanceof Headers)
  t.assert(res.body instanceof Buffer)
  t.deepEqual(res.body.toString(), '')
  t.assert(res.log instanceof Buffer)
  t.deepEqual(res.log.toString(), '')
  t.is(res.exception, null)
})

test('Full Response construction', (t) => {
  const json = JSON.stringify({
    message: 'Hello, world!'
  })

  const res = new Response({
    status: 200,
    headers: {
      'Content-Type': 'application/json',
      'Accept': ['application/json', 'text/plain'],
      'X-Custom-Header':


r2, [r7, #4]            @ encoding: [0xb4,0x20,0xc7,0xe1]
@ CHECK: strh	r1, [r8, #64]!          @ encoding: [0xb0,0x14,0xe8,0xe1]
@ CHECK: strh	r12, [sp], #4           @ encoding: [0xb4,0xc0,0xcd,0xe0]

@------------------------------------------------------------------------------
@ FIXME: STRH (label)
@------------------------------------------------------------------------------

@------------------------------------------------------------------------------
@ STRH (register)
@------------------------------------------------------------------------------
        strh r6, [r5, r4]
        strh r3, [r8, r11]!
        strh r1, [r2, -r1]!
        strh r9, [r7], r2
        strh r4, [r3], -r2

@ CHECK: strh	r6, [r5, r4]            @ encoding: [0xb4,0x60,0x85,0xe1]
@ CHECK: strh	r3, [r8, r11]!          @ enc


-target="#carouselExampleIndicators" data-bs-slide="next">

                Next
            </button>

        {% else %}

没有图片。

        {% endif %}

上传图片

        <form action="{{ url_for('img') }}" method="post" enctype="multipart/form-data">

                选择文件
                <input type="file" class="form-control" id="file" name="file">

            <button type="submit" class="btn btn-primary">上传</button>
        </form>

  <title> Shift_JIS </title>

  O@c@^cψ͂Xߌ̗ŁAPRɖ{cJAQ~̒zt𐷂荞񂾂QOOWNxQ␳\ZĂƊ֘A@Ă̌邱Ƃ⌛ψ̐EŌ߂B^}̎^ŉAQ@ɑtB}́ut̋c_s\vƔAQ@Rcɂ͓ʉȂjB̌ł́Atւ̕sԂ鎩}瑢҂o\A͍ŏ̃}}B
@O@c^ςɐ旧AO@\Zψ͗ŁAPRɂQ␳̒߂莿^š邱Ƃ߂BZAAyʂ̊eψȂǂJAztȂǂ̍ƂčZʉvS~ʉvɌJ@ĂȂǂ̊֘A@ĂAɍ̌邱ƂB{cɋً}A^тB
@ɑ΂A}͂XߌA}{ŏY\炪oȂĊJAQ␳ւ̑Ήɂ(1)PȐO@\ZςƖ{cɂoȂǍOɑސȂȂǂčRc(2)Q@ł̐Rc͓ʋۂ|Ƃ߂B


width:995px;margin:0 auto; font-family:"Microsoft YaHei","微软雅黑","Microsoft JhengHei",MingLiu,Verdana, Arial, Helvetica, sans-serif,"宋体"; }
.blank { clear:both; height:20px; }
h1 { border-bottom:1px #cccccc solid; line-height:58px;}
.video { OVERFLOW: hidden; WIDTH: 100%; POSITION: relative}
.close_light_bg {DISPLAY: none; BACKGROUND: #000; FILTER: alpha(opacity = 95); LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; HEIGHT: 100%; opacity: .95}
ul.nav {width:980px;margin:0 auto;}
ul.nav li{ line-height:30px; height:30px;float:left; width:232px;margin-right:11px;}
ul.nav li a,ul.nav li a:link,ul.nav li a:visited{ background:#efefef; display:block; border:1px #666 solid; text-decoration:none; font-size:12px; text-align:center; color:#000; font-weight:bold;}
ul.nav li.on a,ul.nav li.on a:link,ul.nav li.on a:visited,ul.nav li a:hover {background:#b60229;  border:1px #b60229 solid;font-size:12px; color:#FF0; font-weight:bold; }
-->
</style>

右侧图片列表

右侧文字列表

底部图片列表

底部集数列表

 提示：您的Flash Player版本过低，请点此进行播放器升级！

1吉利集团宣传发布日期：2015.03.25

2吉利博瑞牙克石冰雪测试发布日期：2015.03.25

3全新帝豪概念车隆重发布发布日期：2015.03.25

<a href="#" onclick=


                float dmu_sum = 0.0f;
                for (int n = 0; n < N; n++) {
                    for (int h = 0; h < H; h++) {
                        for (int w = 0; w < W; w++) {
                            dvar_val += (x[n][c][h][w] - mean[c]) * dz[n][c][h][w];
                            dmu_val += -1.0f * dz[n][c][h][w] / (float) Math.sqrt(var[c] + eta);
                            dmu_sum += -2.0f * (x[n][c][h][w] - mean[c]);
                        }
                    }
                }
                dvar[c] = (float) (dvar_val * -0.5f * Math.pow(var[c] + eta, -1.5));
                dmu[c] = dmu_val + dvar[c] * dmu_sum / N / H / W;
            }
        } else {
            for (int w = 0; w < W; w++) {
                float dvar_val = 0.0f;
                float dmu_val = 0.0f;
                float dmu_sum = 0.0f;
                for (int n = 0; n < N; n++) {
                    dvar_val += (x[n][0][0][w] - mean[w]) * dz[n][0][0][w];
                    dmu_val += -1.0f * dz[n][0][0][w] / (float) Math.sqrt(var[w] + eta);
                    dmu_sum += -2.0f * (x[n][0][0][w] - mean[w]);
                }
                dvar[w] = (float) (dvar_val * -0.5f * Math.pow(var[w] + eta, -1.5));
                dmu[w] = dmu_val + dvar[w] * dmu_sum / N;
            }
        }
        //    	System.out.println("var_cpu:"+JsonUtils.toJson(var));
        //    	System.out.println("dmean_cpu:"+JsonUtils.toJson(dmu));
    }

    private void computeDiff_cpu(float[][][][] diff, float[][][][] x, float[] mean, float[] var, float[] dmu, float[] dvar, int type) {
        if (type == 1) {
            float scale = 1.0f / (N * H * W);
            for (int m = 0; m < N; m++) {
                for (int c = 0; c < C; c++) {
                    for (int h = 0; h < H; h++) {
                        for (int w = 0; w < W; w++) {
                            // dx = dxhat * 1 / (var + eta)^1/2 + dvar * 2(x - mean) / n + dmean * 1/n
                            diff[m][c][h][w] = diff[m][c][h][w] / (float) Math.sqrt(var[c] + eta) + 2.0f * dvar[c] * (x[m][c][h][w] - mean[c]) * scale + dmu[c] * scale;
                        }
                    }
                }
            }
        } else {
            float scale = 1.0f / N;
            for (int m = 0; m < N; m++) {
                for (int w = 0; w < W; w++) {
                    // dx = dxhat * 1 / (var + eta)^1/2 + dvar * 2(x - mean) / n + dmean * 1/n
                    diff[m][0][0][w] = diff[m][0][0][w] / (float) Math.sqrt(var[w] + eta) + 2.0f * dvar[w] * (x[m][0][0][w] - mean[w]) * scale + dmu[w] * scale;
                }
            }
        }
    }

    private float[][][][] culOutput(float[][][][] x, float[][][][]


fetime lifetime, IServiceProvider serviceProvider)
	{
		WebKit.Module.Initialize();

		_serviceProvider = serviceProvider;
		_app = Adw.Application.New("org.gir.core", Gio.ApplicationFlags.FlagsNone);

		_app.OnActivate += (sender, args) =>
		{
			var window = Gtk.ApplicationWindow.New((Adw.Application)sender);
			window.Title = "Blazor";
			window.SetDefaultSize(800, 600);

			var webView = new BlazorWebView(_serviceProvider);
			window.SetChild(webView);
			window.Show();

			// Allow opening developer tools
			webView.GetSettings().EnableDeveloperExtras = true;
		};

		_app.OnShutdown += (sender, args) =>
		{
			lifetime.StopApplication();
		};

		lifetime.ApplicationStarted.Register(() =>
		{
			Task.Run(() =>
			{
				Environment.ExitCode = _app.Run(0, []);
			});
		});

		lifetime.ApplicationStopping.Register(() =>
		{
			_app.Quit();
		});
	}

	readonly IServiceProvider _serviceProvider;
	readonly Adw.Application _app;

    public Task StartAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }
}


HardFloat is as follows:

doc
source
    8086-SSE
    ARM-VFPv2
    RISCV
test
    source
        Verilator
    build
        Verilator-GCC
        IcarusVerilog

The source files that define HardFloat’s modules are in the main
source directory.
The test directory has additional files used solely for testing.
The test sources are of course all in test/source, while the
test/build subdirectory contains a couple of example build
targets.
For testing using Verilator, the relevant build target subdirectory is
<NOBR>Verilator-GCC</NOBR>.
(The other target directory, IcarusVerilog, provides an example of
using a Verilog simulator instead of Verilator.)

As the name <NOBR>Verilator-GCC</NOBR> implies, this build target
employs the GCC compiler to compile the C++ code created by Verilator, along
with the source files from directory test/source/Verilator.
It is possible to use a different C++ compiler by copying and modifying the
<NOBR>Verilator-GCC</NOBR> example.

As supplied, subdirectory <NOBR>Verilator-GCC</NOBR> contains
three files,

Makefile
config.make
config.h

used to build and execute all tests.
The Makefile is written solely for GNU make.
Another make variant is unlikely to work unless it is highly
GNU-compatible.

5. Specializing the HardFloat Modules to Test

To determine the particular HardFloat variant to test, the testbench requires
that a Makefile macro, SPECIALIZE_TYPE, be defined
with the name of a selected specialization subdirectory within
HardFloat’s main source directory.
As explained in
<NOBR>HardFloat-Verilog.html</NOBR>,
the HardFloat package includes these prepared specializations from which to
choose:

8086-SSE
ARM-VFPv2
RISCV

Macro SPECIALIZE_TYPE can be defined either by editing the file
config.make found in the <NOBR>Verilator-GCC</NOBR>
directory alongside the Makefile, or by providing a definition for
SPECIALIZE_TYPE among the arguments to the make
command.

6. Dependence on Berkeley TestFloat

The HardFloat testbench depends on Berkeley TestFloat, which must be obtained
and built separately.
The latest version of TestFloat is available at Web page
<NOBR>http://www.jhauser.us/arithmetic/TestFloat.html</NOBR>.

The testbench expects the reference floating-point used by TestFloat to
exactly match the options chosen for building HardFloat.
TestFloat’s reference floating-point is provided by the Berkeley
SoftFloat library, which again must be obtained and built separately.
The Web page for SoftFloat is
<A HREF="http://www.jhau


tp::header::CONTENT_DISPOSITION).unwrap()
        );

        let body = read_body(resp).await;
        assert_eq!(body, &content);
    }

}
#![cfg(target_os = "ios")]

use std::os::raw::c_void;

use crate::{
    event_loop::EventLoop,
    monitor::{MonitorHandle, VideoMode},
    window::{Window, WindowBuilder},
};

/// Additional methods on [`EventLoop`] that are specific to iOS.
pub trait EventLoopExtIOS {
    /// Returns the [`Idiom`] (phone/tablet/tv/etc) for the current device.
    fn idiom(&self) -> Idiom;
}

impl<T: 'static> EventLoopExtIOS for EventLoop<T> {
    fn idiom(&self) -> Idiom {
        self.event_loop.idiom()
    }
}

/// Additional methods on [`Window`] that are specific to iOS.
pub trait WindowExtIOS {
    /// Returns a pointer to the [`UIWindow`] that is used by this window.
    ///
    /// The pointer will become invalid when the [`Window`] is destroyed.
    ///
    /// [`UIWindow`]: https://developer.apple.com/documentation/uikit/uiwindow?language=objc
    fn ui_window(&self) -> *mut c_void;

    /// Returns a pointer to the [`UIViewController`] that is used by this window.
    ///
    /// The pointer will become invalid when the [`Window`] is destroyed.
    ///
    /// [`UIViewController`]: https://developer.apple.com/documentation/uikit/uiviewcontroller?language=objc
    fn ui_view_controller(&self) -> *mut c_void;

    /// Returns a pointer to the [`UIView`] that is used by this window.
    ///
    /// The pointer will become invalid when the [`Window`] is destroyed.
    ///
    /// [`UIView`]: https://developer.apple.com/documentation/uikit/uiview?language=objc
    fn ui_view(&self) -> *mut c_void;

    /// Sets the [`contentScaleFactor`] of the underlying [`UIWindow`] to `scale_factor`.
    ///
    /// The default value is device dependent, and it's recommended GLES or Metal applications set
    /// this to [`MonitorHandle::scale_factor()`].
    ///
    /// [`UIWindow`]: https://developer.apple.com/documentation/uikit/uiwindow?language=objc
    /// [`contentScaleFactor`]: https://developer.apple.com/documentation/uikit/uiview/1622657-contentscalefactor?language=objc
    fn set_scale_factor(&self, scale_factor: f64);

    /// Sets the valid orientations for the [`Window`].
    ///
    /// The default value is [`ValidOrientations::LandscapeAndPortrait`].
    ///
    /// This changes the value returned by
    /// [`-[UIViewController supportedInterfaceOrientations]`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621435-supportedinterfaceorientations?language=objc),
    /// and then calls
    /// [`-[UIViewController attemptRotationToDeviceOrientation]`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621400-attemptrotationtodeviceorientati?language=objc).
    fn set_valid_orientations(&self, valid_orientations: ValidOrientations);

    /// Sets whether the [`Window`] prefers the home indicator hidden.
    ///
    /// The default is to prefer showing the home indicator.
    ///
    /// This changes the value returned by
    /// [`-[UIViewController prefersHomeIndicatorAutoHidden]`](https://developer.apple.com/documentation/uikit/uiviewcontroller/2887510-prefershomeindicatorautohidden?language=objc),
    /// and then calls
    /// [`-[UIViewController setNeedsUpdateOfHomeIndicatorAutoHidden]`](https://developer.apple.com/documentation/uikit/uiviewcontroller/2887509-setneeds