标志性技术。

此次攻击展现出该组织持续使用复杂感染链和欺骗策略实施间谍活动的特点。Trellix报告指出："邮件主题为'意大利国防武官访问孟加拉国达卡'，虽未获取完整内容，但显然试图伪装成包含正当外交文件附件的正式往来函件。"

该恶意软件采用选择性混淆技术，仅对关键代码段加壳以阻碍静态分析。其通过最小化导入表项、运行时动态加载LoadLibrary等API规避检测。执行时会创建互斥体防止重复感染，并部署批处理文件通过计划任务维持驻留。研究人员发现代码包含反虚拟机检测机制，收集的系统信息经AES加密后通过HTTPS协议与C2服务器通信，可能通过后续计划任务下载执行第二阶段载荷（socker.dll）。分析期间C2服务器处于离线状态，导致无法完整观测攻击链。

报告总结称："近期针对欧洲外交部的攻击表明，该组织正持续扩大攻击范围以窃取敏感信息，这要求相关机构必须提升警戒级别并强化网络安全防护措施。"

> **原文链接**: https://mp.weixin.qq.com/s?__biz=MzkzNTI5NTgyMw==&mid=2247511266&idx=1&sn=b3ca1d6fb81cf3af35f5b93cc05e560e

#  某制造业公司：30 分钟速通 2025 高危漏洞排查 + 推修实战
 知其安科技   2025-07-10 07:53

![](https://mmbiz.qpic.cn/mmbiz_gif/yXsxtS2cfwYLicju4TyAeQhibftSnibn1R9dnxB7tCR0JyCicooUTh4rDmWsBv1wBniaFHVGdaNmMeJOl1hVIicPKkzg/640?wx_fmt=gif "")

护网前，公司收到监管单位发来的
2025年“两高一弱”专项排查任务。

打开一看，
2700+高危漏洞。好家伙，相比2024年，又增加了1000多。

经过一番努力，我在
30分钟内完成了受影响资产排查，并完成漏洞工单推送。

口说无凭，先上证据，以下是完整的操作过程录屏。

别看现在轻松，如果这是在
2024年，要一口气排查1700多个高危漏洞，不禁倒吸一口凉气，那些排查漏洞痛苦的记忆开始袭来。

先交代下当时面临的情况


//#define ENABLE_LOG
/*
 * Copyright (c) 2014 - 2022 t_saki@serenegiant.com
 */

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace Serenegiant.UVC
{

	public class UVCDrawer : MonoBehaviour, IUVCDrawer
	{
		/**
		 * IUVCSelectorがセットされていないとき
		 * またはIUVCSelectorが解像度選択時にnullを
		 * 返したときのデフォルトの解像度(幅)
		 */
		public int DefaultWidth = 1280;
		/**
		 * IUVCSelectorがセットされていないとき
		 * またはIUVCSelectorが解像度選択時にnullを
		 * 返したときのデフォルトの解像度(高さ)
		 */
		public int DefaultHeight = 720;
		/**
		 * 可能な場合にUACから音声取得を行うかどうか
		 */
		public bool UACEnabled = false;
		/**
		 * 接続時及び描画時のフィルタ用
		 */
		public UVCFilter[] UVCFilters;

		/**
		 * UVC機器からの映像の描画先Materialを保持しているGameObject
		 * 設定していない場合はこのスクリプトを割当てたのと同じGameObjecを使う。
		 */
		public List<GameObject> RenderTargets;
		/**
		 * UVC機器のUAC機能で取得した音声を再生するために使用するAudioSourceを保持するGameObject
		 * 設定していない場合はこのスクリプトを割当てたのと同じGameObjecを使う。
		 */
		public GameObject AudioTarget;

		//--------------------------------------------------------------------------------
		private const string TAG = "UVCDrawer#";

		/**
		 * UVC機器からの映像の描画先Material
		 * TargetGameObjectから取得する
		 * 優先順位：
		 *	 TargetGameObjectのSkybox
		 *	 > TargetGameObjectのRenderer
		 *	 > TargetGameObjectのRawImage
		 *	 > TargetGameObjectのMaterial
		 * いずれの方法でも取得できなければStartでUnityExceptionを投げる
		 */
		private UnityEngine.Object[] TargetMaterials;
		/**
		 * オリジナルのテクスチャ
		 * UVCカメラ映像受け取り用テクスチャをセットする前に
		 * GetComponent<Renderer>().material.mainTextureに設定されていた値
		 */
		private Texture[] SavedTextures;

		private Quaternion[] quaternions;

		//================================================================================

		// Start is called before the first frame update
		void Start()
		{
#if (!NDEBUG && DEBUG && ENABLE_LOG)
			Console.WriteLine($"{TAG}Start:");
#endif
			UpdateRenderTarget();

		}

//		// Update is called once per frame
//		void Update()
//		{
//
//		}

		//================================================================================

		/**
		 * UVC機器が接続された
		 * IOnUVCAttachHandlerの実装
		 * @param manager 呼び出し元のUVCManager
		 * @param device 対象となるUVC機器の情報
		 * @return true: UVC機器を使用する, false: UVC機器を使用しない
		 */
		public bool OnUVCAttachEvent(UVCManager manager, UVCDevice device)
		{
#if (!NDEBUG && DEBUG && ENABLE_LOG)
			Console.Wri


Set{
			BuildID: buildID2,
		},
	})
	ts.NoError(err)
	time.Sleep(15 * time.Second)

	compatibility, err := ts.client.GetWorkerTaskReachability(ctx, &client.GetWorkerTaskReachabilityOptions{
		BuildIDs:     []string{buildID1, buildID2},
		TaskQueues:   []string{ts.taskQueueName},
		Reachability: client.TaskReachabilityClosedWorkflows,
	})
	ts.NoError(err)
	ts.Equal(2, len(compatibility.BuildIDReachability))

	// Test the first worker
	buildIDReachability, ok := compatibility.BuildIDReachability[buildID1]
	ts.True(ok)
	ts.Equal(0, len(buildIDReachability.UnretrievedTaskQueues))
	ts.Equal(1, len(buildIDReachability.TaskQueueReachable))
	taskQueueReachability, ok := buildIDReachability.TaskQueueReachable[ts.taskQueueName]
	ts.True(ok)
	ts.Equal(2, len(taskQueueReachability.TaskQueueReachability))
	ts.Equal([]client.TaskReachability{client.TaskReachabilityNewWorkflows, client.TaskReachabilityClosedWorkflows}, taskQueueReachability.TaskQueueReachability)

	// Test the second worker
	buildIDReachability, ok = compatibility.BuildIDReachability[buildID2]
	ts.True(ok)
	ts.Equal(0, len(buildIDReachability.UnretrievedTaskQueues))
	ts.Equal(1, len(buildIDReachability.TaskQueueReachable))
	taskQueueReachability, ok = buildIDReachability.TaskQueueReachable[ts.taskQueueName]
	ts.True(ok)
	ts.Equal(1, len(taskQueueReachability.TaskQueueReachability))
	ts.Equal([]client.TaskReachability{client.TaskReachabilityNewWorkflows}, taskQueueReachability.TaskQueueReachability)
}

func (ts *WorkerVersioningTestSuite) TestReachabilityVersionsWithRules() {
	// Skip this test because it is flaky with server 1.25.0, versioning api is also actively undergoing changes
	ts.T().SkipNow()
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
	defer cancel()

	buildID1 := uuid.NewString()
	buildID2 := uuid.NewString()

	result, err := ts.client.GetWorkerVersioningRules(ctx, client.GetWorkerVersioningOptions{
		TaskQueue: ts.taskQueueName,
	})
	ts.NoError(err)

	result, err = ts.client.UpdateWorkerVersioningRules(ctx, client.UpdateWorkerVersioningRulesOptions{
		TaskQueue:     ts.taskQueueName,
		ConflictToken: result.ConflictToken,
		Operation: &client.VersioningOperationInsertAssignmentRule{
			RuleIndex: 0,
			Rule: client.VersioningAssignmentRule{
				TargetBuildID: buildID1,
			},
		},
	})
	ts.NoError(err)

	worker1 := worker.New(ts.client, ts.taskQueueName, worker.Options{
		BuildID:                 buildID1,
		UseBuildIDForVersioning: true,
	})
	ts.workflows.register(worker1)
	ts.NoError(worker1.Start())
	defer worker1.Stop()

	// Start some workflows targeting 1.0
	handle11, err := ts.client.ExecuteWorkflow(ctx, ts.startWorkflowOptions("1-1"), ts.workflows.WaitSignalToStart)
	ts.NoError(err)
	handle12, err := ts.client.ExecuteWorkflow(ctx, ts.startWorkflowOptions("1-2"), ts.workflows.WaitSignalToStart)
	ts.NoError(err)

	ts.NoError(ts.client.SignalWorkflow(ctx, handle11.GetID(), handle11.GetRunID(),


003l.032.002l.031.006l.028.003l.024.006l.03.004l.035.012l.027.005l.019.008l.026.007l.033.015l.034.012l.018.01l.018.007l.043.024l.028.014l.009.007l.016.009l.051.037l.026.017l.003.004l.01.006a1 1 0 0 1 .154.155l.006.009l.015.02l.043.06l.009.016l.007.009l.014.028l.024.043l.005.013l.012.023l.012.034l.015.033l.007.026l.008.02l.005.026l.012.036l.004.029l.006.024l.003.028l.006.031l.002.032l.003.026v.026L19 14l-.002.033v.026l-.003.026l-.002.032l-.006.031l-.003.028l-.006.024l-.004.03l-.012.035l-.005.027l-.008.019l-.007.026l-.015.033l-.012.034l-.01.018l-.007.018l-.024.043l-.014.028l-.007.009l-.009.016l-.042.058l-.012.019l-.004.003l-.006.01l-.073.081l-6 6a1 1 0 0 1-1.414 0l-6-6C4.663 14.077 5.109 13 6 13z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;width:1em;height:1em}.i-tabler\:caret-up-filled{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M11.293 7.293a1 1 0 0 1 1.32-.083l.094.083l6 6l.083.094l.054.077l.054.096l.017.036l.027.067l.032.108l.01.053l.01.06l.004.057L19 14l-.002.059l-.005.058l-.009.06l-.01.052l-.032.108l-.027.067l-.07.132l-.065.09l-.073.081l-.094.083l-.077.054l-.096.054l-.036.017l-.067.027l-.108.032l-.053.01l-.06.01l-.057.004L18 15H6c-.852 0-1.297-.986-.783-1.623l.076-.084z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;width:1em;height:1em}.i-tabler\:carousel-horizontal{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 6a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1zm15 11h-1a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h1M2 17h1a1 1 0 0 0 1-1V8a1 1 0 0 0-1-1H2'/%3E%3C/svg%3


evel_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::FeatureSet_FieldPresence> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::FeatureSet_FieldPresence>() {
  return ::google::protobuf::FeatureSet_FieldPresence_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::FeatureSet_EnumType> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::FeatureSet_EnumType>() {
  return ::google::protobuf::FeatureSet_EnumType_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::FeatureSet_RepeatedFieldEncoding> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::FeatureSet_RepeatedFieldEncoding>() {
  return ::google::protobuf::FeatureSet_RepeatedFieldEncoding_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::FeatureSet_StringFieldValidation> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::FeatureSet_StringFieldValidation>() {
  return ::google::protobuf::FeatureSet_StringFieldValidation_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::FeatureSet_MessageEncoding> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::FeatureSet_MessageEncoding>() {
  return ::google::protobuf::FeatureSet_MessageEncoding_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::FeatureSet_JsonFormat> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::FeatureSet_JsonFormat>() {
  return ::google::protobuf::FeatureSet_JsonFormat_descriptor();
}
template <>
struct is_proto_enum<::google::protobuf::GeneratedCodeInfo_Annotation_Semantic> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::google::protobuf::GeneratedCodeInfo_Annotation_Semantic>() {
  return ::google::protobuf::GeneratedCodeInfo_Annotation_Semantic_descriptor();
}

}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)

#include "google/protobuf/port_undef.inc"

#endif  // GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fdescriptor_2eproto_2epb_2eh


    if not os.remove(realfn) then
          error("Cannot remove " .. realfn)
        end
      end
    end
    lfs.rmdir("build/bootstrap")
  end
  lfs.mkdir("build")
  lfs.mkdir("build/bootstrap")
  local topdir = lfs.currentdir()
  lfs.chdir("build/bootstrap")
  if os.execute("curl -o ci.zip " .. ci_url) ~=  0 then
    error "Cannot download ci.zip"
  end
  if os.execute("unzip ci.zip") ~= 0 then
    error "Cannot unzip ci.zip"
  end
  lfs.chdir(topdir)
  package.path = "./build/bootstrap/?.lua;" .. package.path
end


Background(), 10*time.Second)
	defer cancel()

	req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
	if err != nil {
		return nil, fmt.Errorf("failed to create request: %w", err)
	}

	apiKey := os.Getenv("MCP_API_KEY")
	if apiKey != "" {
		req.Header.Set("Authorization", "Bearer "+apiKey)
	}

	client := &http.Client{Timeout: 10 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("failed to get workflow: %w", err)
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		return nil, fmt.Errorf("workflow API returned status %d", resp.StatusCode)
	}

	var workflow WorkflowDetails
	if err := json.NewDecoder(resp.Body).Decode(&workflow); err != nil {
		return nil, fmt.Errorf("failed to decode response: %w", err)
	}

	return &workflow, nil
}

func (cs *ChatService) findNodeLabel(nodes []WorkflowNode, nodeID string) string {
	for _, node := range nodes {
		if node.ID == nodeID {
			var nodeData map[string]interface{}
			if err := json.Unmarshal(node.Data, &nodeData); err == nil {
				if label, ok := nodeData["label"].(string); ok {
					return label
				}
			}

			return node.Type
		}
	}

	return "Unknown"
}
package workflow

import (
	"context"
	"encoding/json"
	"fmt"
	"net/http"
	"time"

	"github.com/google/uuid"
	"github.com/phildougherty/mcp-compose/internal/ai"
	"github.com/phildougherty/mcp-compose/internal/logging"
)

type DeploymentRequest struct {
	Description string                 `json:"description"`
	TemplateID  string                 `json:"templateId,omitempty"`
	Parameters  map[string]interface{} `json:"parameters,omitempty"`
	AutoStart   bool                   `json:"autoStart"`
}

type DeploymentResponse struct {
	WorkflowID  string         `json:"workflowId"`
	Name        string         `json:"name"`
	Preview     string         `json:"preview"`
	Nodes       []WorkflowNode `json:"nodes"`
	Edges       []WorkflowEdge `json:"edges"`
	Deployed    bool           `json:"deployed"`
	ExecutionID string         `json:"executionId,omitempty"`
}

type DeploymentError struct {
	Code    string `json:"code"`
	Message string `json:"message"`
	Details string `json:"details,omitempty"`
}

type DeploymentHandler struct {
	storage          *Storage
	engine           *Engine
	processor        *DeploymentProcessor
	templateFiller   *TemplateFiller
	paramExtractor   *ParameterExtractor
	logger           *logging.Logger
	aiManager        *ai.Manager
	templateRegistry *TemplateRegistry
}

func NewDeploymentHandler(storage *Storage, aiManager *ai.Manager, logger *logging.Logger) *DeploymentHandler {
	engine := NewEngine(storage)
	processor := NewDeploymentProcessor(aiManager, logger)
	templateFiller := NewTemplateFiller(logger)
	paramExtractor := NewParameterExtractor(aiManager, logger)

	return &DeploymentHandler{
		storage:          storage,
		engine:           engine,
		processor:        processor,
		templateFiller:   templateFiller,
		paramExtractor:   paramExtractor,
		logger:           logger,
		aiManager:        aiManager,
		templateRegistry: NewTemplateRegistry(),
	}
}

func (h *DeploymentHandler) HandleDeploy(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.Met


 null) {
            val tag = title.getTag(R.id.com_paddingTop) ?:let {
                title.paddingTop.also {
                    title.setTag(R.id.com_paddingTop, it)
                }
            }
            val paddingTop = tag.toString().toInt()
            val statusBarHeight = APKUtils.getStatusBarHeight(getActivity())
            title.setPadding(
                title.paddingLeft, paddingTop + statusBarHeight,
                title.paddingRight, title.paddingBottom
            )
        }
    }

    fun cancelFitCustomTitle(title: View?) {
        StatusBarUtils.setTranslucent(getActivity<Activity>(), null)
        if (title != null) {
            val tag = title.getTag(R.id.com_paddingTop) ?:let {
                title.paddingTop.also {
                    title.setTag(R.id.com_paddingTop, it)
                }
            }
            val paddingTop = tag.toString().toInt()
            title.setPadding(
                title.paddingLeft, paddingTop,
                title.paddingRight, title.paddingBottom
            )
        }
    }

    fun fitCustomTitle(fragment: Fragment, title: View?) {
        StatusBarUtils.setTranslucent(fragment, null)
        if (title != null) {
            val tag = title.getTag(R.id.com_paddingTop) ?:let {
                title.paddingTop.also {
                    title.setTag(R.id.com_paddingTop, it)
                }
            }
            val paddingTop = tag.toString().toInt()
            val statusBarHeight = APKUtils.getStatusBarHeight(fragment.requireActivity())
            title.setPadding(
                title.paddingLeft, paddingTop + statusBarHeight,
                title.paddingRight, title.paddingBottom
            )
        }
    }

    /**
     * 设置通用标题栏颜色（状态栏会随之改变）
     *
     * @param color
     */
    fun setCommonTitleColor(@ColorInt color: Int) {
        StatusBarUtils.setTranslucent(getActivity<Activity>(), null)
        titleGroup.setBackgroundColor(color)
    }

    /**
     * 设置状态栏字体黑色（需要先调用[AppDelegate.fitCustomTitle]、[AppDelegate.fitCustomTitle]）
     *
     * @param activity
     */
    fun setLightMode(activity: Activity) {
        StatusBarUtils.setLightMode(activity)
    }

    /**
     * 设置状态栏字体白色（需要先调用[AppDelegate.fitCustomTitle]、[AppDelegate.fitCustomTitle]）
     *
     * @param activity
     */
    fun setDarkMode(activity: Activity) {
        StatusBarUtils.setDarkMode(activity)
    }

    /**
     * 标题栏隐藏和切换
     *
     * @param visible
     */
    fun setTitleVisible(visible: Boolean) {
        if (visible) {
            titleGroup.visibility = View.VISIBLE
        } else {
            titleGroup.visibility = View.GONE
        }
    }

    fun setCallback(callback: Callback<Any?>?) {
        this.callback = callback
    }

    fun doCall(data: Any?) {
        callback?.call(data)
    }

    fun doCall() {
        doCall(null)
    }

    /**
     * 返回标题栏，通过重写自定义标题栏
     *
     * @param root
     * @return
     */
    protected abstract fun getTitleView(root: ViewGroup?): View?

    /**
     * 返回内容布局
     *
     * @return
     */
    protected abstract fun getContentLayoutId(): Int

    /**
     * 返回


HostPlayerIndex, netlist.Kind2).Size()
}

func (m *Perfmon) startProfileClient() func() {
	start := platform.Ticks()
	return func() {
		m.profClient = platform.Ticks() - start
	}
}

func (m *Perfmon) startProfileServer() func() {
	start := platform.Ticks()
	return func() {
		m.profServer = platform.Ticks() - start
	}
}
package opennox

import (
	"errors"
	"unsafe"

	"github.com/opennox/libs/object"
	"github.com/opennox/libs/player"
	"github.com/opennox/libs/spell"
	"github.com/opennox/libs/things"
	"github.com/opennox/libs/types"

	"github.com/opennox/opennox/v1/client/noxrender"
	noxflags "github.com/opennox/opennox/v1/common/flags"
	"github.com/opennox/opennox/v1/common/memmap"
	"github.com/opennox/opennox/v1/common/sound"
	"github.com/opennox/opennox/v1/legacy"
	"github.com/opennox/opennox/v1/legacy/common/alloc"
	"github.com/opennox/opennox/v1/server"
)

type serverSpells struct {
	duration spellsDuration
	missiles spellMissiles
	walls    spellWall
}

func (sp *serverSpells) Init(s *Server) {
	sp.duration.Init(s)
	sp.missiles.Init(s)
	sp.walls.Init(s)
}

func (sp *serverSpells) Free() {
	sp.walls.Free()
	sp.missiles.Free()
	sp.duration.Free()
}

var _ = [1]struct{}{}[40-unsafe.Sizeof(server.PhonemeLeaf{})]

func nox_xxx_spellAwardAll1_4EFD80(p *server.Player) {
	serverSetAllBeastScrolls(p, noxflags.HasEngine(noxflags.EngineAdmin))
}

func nox_xxx_spellAwardAll2_4EFC80(p *server.Player) {
	serverSetAllSpells(p, noxflags.HasEngine(noxflags.EngineAdmin), 0)
}

func nox_xxx_spellAwardAll3_4EFE10(p *server.Player) {
	serverSetAllWarriorAbilities(p, noxflags.HasEngine(noxflags.EngineAdmin), 0)
}

func nox_xxx_spellTitle_424930(ind int) (string, bool) {
	sp := noxServer.Spells.DefByInd(spell.ID(ind))
	if sp == nil || !sp.IsValid() {
		return "", false
	}
	return sp.Title, true
}

func nox_xxx_spellDescription_424A30(ind int) (string, bool) {
	sp := noxServer.Spells.DefByInd(spell.ID(ind))
	if sp == nil {
		return "", false
	}
	return sp.Desc, true
}

func nox_xxx_spellIcon_424A90(ind int) unsafe.Pointer {
	sp := noxServer.Spells.DefByInd(spell.ID(ind))
	if sp == nil {
		return nil
	}
	return unsafe.Pointer(((*noxrender.Image)(sp.Icon)).C())
}

func nox_xxx_spellIconHighlight_424AB0(ind int) unsafe.Pointer {
	sp := noxServer.Spells.DefByInd(spell.ID(ind))
	if sp == nil {
		return nil
	}
	return unsafe.Pointer(((*noxrender.Image)(sp


    operator: string,
    right: KeyOrValue,
    quoteLeftIfString: boolean,
    quoteRightIfString: boolean,
  ) {
    this.__query.push(StaticUtils.safeQuoteIfString(left, quoteLeftIfString, "'"))
    this.__query.push(operator)
    this.__query.push(StaticUtils.safeQuoteIfString(right, quoteRightIfString, "'"))

    return this
  }

  or() {
    return this.__push('or')
  }

  pop() {
    return this.__push(')')
  }

  push() {
    return this.__push('(')
  }

  toString() {
    return this.__query.join(' ')
  }

  __push(entity: KeyOrValue) {
    this.__query.push(entity)

    return this
  }
}
import { ListenerCollection } from '../../shared/listener-collection';

/**
 * Watch for changes in the size (`clientWidth` and `clientHeight`) of
 * an element.
 *
 * Returns a cleanup function which should be called to remove observers when
 * updates are no longer needed.
 *
 * @param element - HTML element to watch
 * @param onSizeChanged - Callback to invoke with the `clientWidth` and
 *   `clientHeight` of the element when a change in its size is detected.
 */
export function observeElementSize(
  element: Element,
  onSizeChanged: (width: number, height: number) => void,
): () => void {
  if (typeof ResizeObserver !== 'undefined') {
    const observer = new ResizeObserver(() =>
      onSizeChanged(element.clientWidth, element.clientHeight),
    );
    observer.observe(element);
    return () => observer.disconnect();
  }
  const listeners = new ListenerCollection();

  // Fallback method which listens for the most common events that result in
  // element size changes:
  //
  // - Window size change
  // - Media loading and adjusting size to content
  // - DOM changes
  //
  // This is not comprehensive but it is simple to implement and good-enough for
  // our current use cases.

  let prevWidth = element.clientWidth;
  let prevHeight = element.clientHeight;

  const check = () => {
    if (
      prevWidth !== element.clientWidth ||
      prevHeight !== element.clientHeight
    ) {
      prevWidth = element.clientWidth;
      prevHeight = element.clientHeight;
      onSizeChanged(prevWidth, prevHeight);
    }
  };

  listeners.add(element, 'load', check);
  listeners.add(window, 'resize', check);
  const observer = new MutationObserver(check);
  observer.observe(element, {
    characterData: true,
    childList: true,
    subtree: true,
  });

  return () => {
    listeners.removeAll();
    observer.disconnect();
  };
}
type MessageChannelKey<I, O> = { key: string; __in: I; __out: O };

export function key<I, O = undefined>(key: string): MessageChannelKey<I, O> {
  return { key } as any;
}

export const workerHandshake = key<'ping', 'pong'>('handshake');

export class WorkerChannel {
  private id = 0;
  private handlers: Map<string, (input: any) => any> = new Map();
  private requests: Map<
    number,
    { resolve: (value: any) => any; reject: (value: any) => any }
  > = new Map();

  constructor(
    private postMessage: Worker['postMessage'],
    onmessageable: Pick<Worker, 'onmessage'>
  ) {
    onmessageable.onmessage = (message) => this.onmessage(message);
  }

  static forWorker(worker: Worker): WorkerChannel {
    return new WorkerChannel(worker.postMessage.bind(worker), worker);
  }

  private async onmessage(e: MessageEvent) {
    const { data } = e;
    if (data.from === 'MessageC


__inner-circle {
    @include feature-targeting.targets($feat-color) {
      @include theme.property(border-color, $color);
    }
  }
}

@mixin _ink-opacity($opacity) {
  .mdc-radio__background .mdc-radio__inner-circle {
    @include theme.property(opacity, $opacity);
  }
}

///
/// Sets the stroke color for radio. This is wrapped in a mixin
/// that qualifies state such as `_if-enabled`
/// @access private
///
@mixin _stroke-color($color, $query: feature-targeting.all()) {
  $feat-color: feature-targeting.create-target($query, color);

  .mdc-radio__background .mdc-radio__outer-circle {
    @include feature-targeting.targets($feat-color) {
      @include theme.property(border-color, $color);
    }
  }
}

@mixin _stroke-opacity($opacity) {
  .mdc-radio__background .mdc-radio__outer-circle {
    @include theme.property(opacity, $opacity);
  }
}
//
// Copyright 2017 Google Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//

@use '../mixins';
@include mixins.core-styles;
@forward "../../animation/variables" as mdc-animation-*;
@forward "../../ripple/variables" as mdc-* hide $mdc-dark-ink-opacities, $mdc-fade-in-duration, $mdc-fade-out-duration, $mdc-light-ink-opacities, $mdc-pressed-dark-ink-opacity, $mdc-pressed-light-ink-opacity, $mdc-translate-duration;
@forward "../../ripple/variables" as mdc-ripple-* hide $mdc-ripple-states-wash-duration;
@forward "../../theme/variables" as mdc-theme-*;
@forward "../../density/variables" as mdc-density-*;
@forward "../../checkbox/variables" as mdc-checkbox-*;
@forward "../../base/mixins" as mdc-base-*;
@forward "../../feature-targeting/variables" as mdc-feature-*;
@forward "../../feature-targeting/mixins" as mdc-feature-*;
@forward "../../elevation/variables" as mdc-elevation-*;
@forward "../../rtl/variables" as mdc-rtl-*;
@forward "../../touch-target/variables" as mdc-touch-target-*;
@forward "../../typography/variables" as mdc-typography-*;
@forward "../../shape/variables" as mdc-shape-*;
@forward "../variables" as mdc-chip-*;
@forward "../mixins" as mdc-chip-*;
@forward "../../theme/mixins" as mdc-theme-*;
@forward "../../elevation/mixins" as mdc-* hide mdc-core-styles, mdc-overlay-common, mdc-overlay-dimensions, mdc-overlay-fill-color, mdc-overlay


}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;co


// Copyright Alan (AJ) Pryor, Jr. 2017
// Transcribed from MATLAB code by Colin Ophus
// Prismatic is distributed under the GNU General Public License (GPL)
// If you use Prismatic, we kindly ask that you cite the following papers:

// 1. Ophus, C.: A fast image simulation algorithm for scanning
//    transmission electron microscopy. Advanced Structural and
//    Chemical Imaging 3(1), 13 (2017)

// 2. Pryor, Jr., A., Ophus, C., and Miao, J.: A Streaming Multi-GPU
//    Implementation of Image Simulation Algorithms for Scanning
//	  Transmission Electron Microscopy. arXiv:1706.08563 (2017)

#ifndef PRISMATIC_MULTISLICE_H
#define PRISMATIC_MULTISLICE_H
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
#include <numeric>
#include "configure.h"
#include <numeric>
#include "meta.h"
#include "ArrayND.h"
#include "params.h"
#include "utility.h"
#include "fftw3.h"
#include "WorkDispatcher.h"

namespace Prismatic
{
using namespace std;
void setupCoordinates_multislice(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);

void setupDetector_multislice(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);

void setupProbes_multislice(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);

void createTransmission(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);

void createStack(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);

void formatOutput_CPU_integrate(Parameters<PRISMATIC_FLOAT_PRECISION> &pars,
								Array2D<complex<PRISMATIC_FLOAT_PRECISION>> &psi,
								const Array2D<PRISMATIC_FLOAT_PRECISION> &alphaInd,
								const size_t currentSlice,
								const size_t ay,
								const size_t ax);

void formatOutput_CPU_integrate_batch(Parameters<PRISMATIC_FLOAT_PRECISION> &pars,
									  Array1D<complex<PRISMATIC_FLOAT_PRECISION>> &psi_stack,
									  const Array2D<PRISMATIC_FLOAT_PRECISION> &alphaInd,
									  const size_t currentSlice,
									  const size_t ay,
									  const size_t ax);

std::pair<Prismatic::Array2D<std::complex<PRISMATIC_FLOAT_PRECISION>>, Prismatic::Array2D<std::complex<PRISMATIC_FLOAT_PRECISION>>>
getSingleMultisliceProbe_CPU(Parameters<PRISMATIC_FLOAT_PRECISION> &pars, const PRISMATIC_FLOAT_PRECISION xp, const PRISMATIC_FLOAT_PRECISION yp);
void getMultisliceProbe_CPU_batch(Parameters<PRISMATIC_FLOAT_PRECISION> &pars,
								  const size_t Nstart,
								  const size_t Nstop,
								  PRISMATIC_FFTW_PLAN &plan_forward,
								  PRISMATIC_FFTW_PLAN &plan_inverse,
								  Array1D<complex<PRISMATIC_FLOAT_PRECISION>> &psi_stack);
void getMultisliceProbe_CPU(Parameters<PRISMATIC_FLOAT_PRECISION> &pars,
							const size_t ay,
							const size_t ax,
							PRISMATIC_FFTW_PLAN &plan_forward,
							PRISMATIC_FFTW_PLAN &plan_inverse,
							Array2D<complex<PRISMATIC_FLOAT_PRECISION>> &psi);
void buildMultisliceOutput_CPUOnly(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);

void Multislice_calcOutput(Parameters<PRISMATIC_FLOAT_PRECISION> &pars);
} // namespace Prismatic
#endif //PRISMATIC_MULTISLICE_H


성
        val endItemId = minOf(startItemId + PAGE_SIZE - 1, MAX_ITEMS)
        val items = (startItemId..endItemId).map { id ->
            DragExampleItem(
                id = id,
                title = "아이템 $id",
                description = "아이템 $id 에 대한 설명입니다. 여기에는 아이템의 상세 내용이 표시됩니다."
            )
        }

        // 페이지가 성공적으로 로드되면 마지막 로드된 페이지 업데이트
        if (page > lastLoadedPage) {
            lastLoadedPage = page
        }

        // 다음 페이지 키 계산
        val nextKey = if (endItemId >= MAX_ITEMS) {
            null
        } else {
            page + 1
        }

        return LoadResult.Page(
            data = items,
            prevKey = if (page == STARTING_KEY) null else page - 1,
            nextKey = nextKey
        )
    }

    override fun getRefreshKey(state: PagingState<Int, DragExampleItem>): Int? {
        return state.anchorPosition?.let { anchorPosition ->
            state.closestPageToPosition(anchorPosition)?.prevKey?.plus(1)
                ?: state.closestPageToPosition(anchorPosition)?.nextKey?.minus(1)
        }
    }
} package com.example.lint

import com.android.tools.lint.detector.api.Category.Companion.CORRECTNESS
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Implementation
import com.android.tools.lint.detector.api.Issue
import com.android.tools.lint.detector.api.JavaContext
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity.WARNING
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
import org.jetbrains.uast.UCallExpression

/**
 * setContentView 사용에 대한 Lint
 *
 * Databinding에서 사용되는 setContentView가 아니면 Warning.
 */
class LintContentViewDetector : Detector(), SourceCodeScanner {

    companion object {
        private val IMPLEMENTATION = Implementation(
            LintContentViewDetector::class.java,
            Scope.JAVA_FILE_SCOPE
        )

        val ISSUE: Issue = Issue
            .create(
                id = "IssueIdCheck",
                briefDescription = "요약된 설명 입니다.",
                explanation = "린트의 설명 부분에 나오는 텍스트 입니다.",
                category = CORRECTNESS, // lint Category에 맞춰서 작성
                priority = 5, // 우선 순위. 1 ~ 10 사이의 정수
                severity = WARNING, // Error의 경우 빨간 줄, Warning의 경우 노란색 라인으로 표기된다.
                implementation = IMPLEMENTATION // 해당 Detector가 수행 될 범위.
            )
    }

    // Lint로 검출할 Method Name을 List�


 Date: 2018/8/30 下午2:14
 * Description: JSON的View容器
 */
public class JsonViewLayout extends ScrollView {

    private int ITEM_KEY_COLOR = 0xFF61a731;
    private int OBJECT_KEY_COLOR = 0xFF333333;
    private int TEXT_COLOR = 0xFFEE6F43;
    private int NUMBER_COLOR = 0xFFC353F6;
    private int ARRAY_LENGTH_COLOR = 0xFFFFFFFF;
    private int BOOLEAN_COLOR = 0xFF4098C7;
    private int NULL_COLOR = 0xFFBCBA58;

    public static float TEXT_SIZE_DP = 18;

    private int TEXT_SIZE_DP_MAX = 32;
    private int TEXT_SIZE_DP_MIN = 12;

    private int ARRAY_LENGTH_BACKGROUND = R.drawable.jsonview_select_bg;

    private Context mContext;
    private JSONObject mJSONObject;
    private JSONArray mJSONArray;

    private LinearLayout contentView;

    private HorizontalScrollView horizontalScrollView;

    public JsonViewLayout(Context context) {
        super(context);
        initView(context);

    }

    public JsonViewLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    public JsonViewLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

    private void initView(Context context) {
        this.mContext = context;
        contentView = new LinearLayout(mContext);
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        contentView.setLayoutParams(layoutParams);
        contentView.setOrientation(LinearLayout.VERTICAL);
        horizontalScrollView = new HorizontalScrollView(mContext);
        horizontalScrollView.setLayoutParams(layoutParams);
        horizontalScrollView.setPadding(12, 12, 12, 0);
        horizontalScrollView.addView(contentView);
        this.addView(horizontalScrollView);
    }

    public void bindJson(String jsonStr) {
        if (canBindData()) {
            throw new IllegalArgumentException("JsonViweLayout can not bind again.");
        }
        Object object = null;
        try {
            object = new JSONTokener(jsonStr).nextValue();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        if (object != null && object instanceof JSONObject) {
            mJSONObject = (JSONObject) object;
        } else if (object != null && object instanceof JSONArray) {
            mJSONArray = (JSONArray) object;
        } else {
            throw new IllegalArgumentException("jsonStr is illegal.");
        }
        createView();
    }

    public void bindJson(JSONObject mJSONObject) {
        if (canBindData()) {
            throw new IllegalArgumentException("JsonViweLayout can not bind again.");
        }
        this.mJSONObject = mJSONObject;
        if (mJSONObject == null) {
            throw new IllegalArgumentException("jsonObject can not be null.");
        }
        createView();
    }

    public void bindJson(JSONArray mJSONArray) {
        if (canBindData()) {
            throw new IllegalArgumentException("JsonViweLayout can not bind again.");
        }
        this.mJSONArray = mJSONArray;
        if (mJSONArray == null) {
            throw new IllegalArgumentException("jsonArray can not be null.");
        }
        createView();
    }

    private boolean canBindData() {
        return null != mJSONObject || null != mJSONArray;
    }

    private void createView() {
        JsonView jsonView = new JsonView(mContext);
        jsonView.showIcon(true);
        jsonView.hideValue();
        SpannableStringBuilder keyBuilder = new SpannableStringBuilder();
        keyBuilder.append("JSON");
        keyBuilder.setSpan(new ForegroundColorSpan(OBJECT_KEY_COLOR), 0, keyBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        jsonView.showKey(keyBuilder);
        Object value = null != mJSONObject ? mJSONObject : mJSONArray;
        jsonView.setIco


-hero__item {
      width: clamp( 12.5rem , -16.6434660912rem  +  47.0065381821vw , 26.25rem );
    }
}

@supports not (width: clamp( 12.5rem , -16.6434660912rem  +  47.0065381821vw , 26.25rem )) {
    .decor-hero__item {
      width: calc(12.5rem + 13.75 * (100vw - 61.99875rem) / 29.25125);
    }
}

@supports (padding-top: clamp( 1.875rem , -7.397921029rem  +  14.9566257852vw , 6.25rem )) {
    .about__body {
      padding-top: clamp( 1.875rem , -7.397921029rem  +  14.9566257852vw , 6.25rem );
    }
}

@supports not (padding-top: clamp( 1.875rem , -7.397921029rem  +  14.9566257852vw , 6.25rem )) {
    .about__body {
      padding-top: calc(1.875rem + 4.375 * (100vw - 61.99875rem) / 29.25125);
    }
}

@supports (padding-left: clamp( 0.9375rem , -5.0236635187rem  +  9.6149737191vw , 3.75rem )) {
    .advantages {
      padding-left: clamp( 0.9375rem , -5.0236635187rem  +  9.6149737191vw , 3.75rem );
    }
}

@supports not (padding-left: clamp( 0.9375rem , -5.0236635187rem  +  9.6149737191vw , 3.75rem )) {
    .advantages {
      padding-left: calc(0.9375rem + 2.8125 * (100vw - 61.99875rem) / 29.25125);
    }
}

@supports (padding-right: clamp( 0.9375rem , -5.0236635187rem  +  9.6149737191vw , 3.75rem )) {
    .advantages {
      padding-right: clamp( 0.9375rem , -5.0236635187rem  +  9.6149737191vw , 3.75rem );
    }
}

@supports not (padding-right: clamp( 0.9375rem , -5.0236635187rem  +  9.6149737191vw , 3.75rem )) {
    .advantages {
      padding-right: calc(0.9375rem + 2.8125 * (100vw - 61.99875rem) / 29.25125);
    }
}
}

@media (min-width: 120em) and (min-width: 20em) and (max-width: 91.25em) {
@supports (right: clamp( -2rem , -1.0394736842rem  +  -1.0526315789vw , -1.25rem )) {
    .advantages-hero__item:not(:last-child)::after {
      right: clamp( -2rem , -1.0394736842rem  +  -1.0526315789vw , -1.25rem );
    }
}

@supports not (right: clamp( -2rem , -1.0394736842rem  +  -1.0526315789vw , -1.25rem )) {
    .advantages-hero__item:not(:last-child)::after {
      right: calc(-1.25rem + -0.75 * (100vw - 20rem) / 71.25);
    }
}
}

@media (min-width: 120em) and (max-width: 20em) {
  .advantages-hero__item:not(:last-child)::after {
    right: -1.25rem;
  }
}

@media (min-width: 41.875em)


_exit: 			# words are equal up thru null byte
	mov	0,g14		# conform to register conventions
	 lda	0,g0		# return zero, indicating equality
	bx	(g13)		# return
Lrett:
	ret

.diff:
	addo	4,g2,g2		# to make up for extra decrement in loop
	 lda	0,g14
	 bl	Lless_than_exit
Lgreater_than_exit:
	cmpibge.f 0,g2,Lequal_exit  # branch if difference is beyond max_bytes
	mov	1,g0
	 bx	(g13)		# g0 = 1 (src1 > src2)
Lless_than_exit:
	cmpibge.f 0,g2,Lequal_exit  # branch if difference is beyond max_bytes
	subi	1,0,g0
	 bx	(g13)		# g0 = -1 (src1 < src2)

Lsrc2_unaligned:
	notor	g1


-3 {
    margin-left: 25%;
  }
}

.pre,
pre,
code,
.code {
  font-family: Source Code Pro, Menlo, Consolas, Liberation Mono, monospace;
  font-size: 14px;
}

.fill-light {
  background: #f9f9f9;
}

.width2 {
  width: 1rem;
}

.input {
  font-family: inherit;
  display: block;
  width: 100%;
  height: 2rem;
  padding: 0.5rem;
  margin-bottom: 1rem;
  border: 1px solid #ccc;
  font-size: 0.875rem;
  border-radius: 3px;
  box-sizing: border-box;
}

table {
  border-collapse: collapse;
}

.prose table th,
.prose table td {
  text-align: left;
  padding: 8px;
  border: 1px solid #ddd;
}

.prose table th:nth-child(1) {
  border-right: none;
}
.prose table th:nth-child(2) {
  border-left: none;
}

.prose table {
  border: 1px solid #ddd;
}

.prose-big {
  font-size: 18px;
  line-height: 30px;
}

.quiet {
  opacity: 0.7;
}

.minishadow {
  box-shadow: 2px 2px 10px #f3f3f3;
}
.ui-dialog .ui-dialog-content {
	padding: 0px;
}
.ui-dialog .ui-dialog-buttonpane {
	padding: 0.3em 0.2em 0 0.4em;
	margin: 0 -0.4em 0;
}
.btn-small [class^="icon-"] {
	margin: 1px 5px 0 -3px;
}
.btn {
	margin-right: 3px;
}
.btn-small {
	/*line-height: 20px;*/
}

.playlist-time-scale {
  position: absolute;
  top: 5px;
  left: 0;
  right: 0;
  height: 30px;
  overflow: hidden;
}

.playlist-time-scale canvas {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  height: 30px;
}

.playlist-time-scale div {
  position: absolute;
}

.playlist-tracks {
	position: relative;
	top: 35px;
	margin: 2px 0;
}
.playlist-controls {
    margin: 40px 0 16px 0;
}

.channel-wrapper {
  position: relative;
}

.channel {
  position: absolute;
  margin: 0;
  padding: 0;
  background: #6e6e6e;
  /*border-top: 1px solid #6e6e6e;*/
  /*border-bottom: 1px solid #6e6e6e;*/
}

.state-select {
	cursor: text;
}

.playlist-tracks {
  overflow-x: auto;
  overflow-y: hidden;
}

.playlist-tracks > .error {
  height: 80px;
  width: 300px;
  background-color: rgba(255,0,0,0.5);
}

.playlist-fade {
  position: absolute;
  background-color: rgba(0,0,0,0.1);
  z-index: 1000;
}
.set-cue {
	margin: 12px 0 16px 0;
}
.set-fade {
	margin: 40px 0 0 30px;
}
.set-cue input[type="text"] {
	vertical-align: middle;
	padding: 5px 3px 4px 3px;
}
.set-cue input[type="button"] {


Block:instantiate()
    self:add_type_signature({block.Input("in", types.Bit)}, {block.Output("out", SCMPlusFrameType)})
end

function SCMPlusFramerBlock:initialize()
    self.scm_plus_frame = types.Bit.vector(SCM_PLUS_FRAME_LEN)
    self.scm_plus_frame_length = 0

    self.out = SCMPlusFrameType.vector()
end

local function scm_plus_correct_codeword(bits, offset)
    -- 112-bit codeword = 96-bits message + 16-bits error correcting code

    -- Compute syndrome
    local syndrome = 0x7b06
    for i = 0, SCM_PLUS_CODEWORD_LEN-1 do
        if bits.data[offset + i].value == 1 then
            syndrome = bit.bxor(syndrome, SCM_PLUS_CHECK_SYNDROMES[i])
        end
    end

    -- If the syndrome is zero, there is no error and return true
    if syndrome == 0 then
        return true
    end

    -- If there is a single correctable bit error, correct it and return true
    local error_index = SCM_PLUS_CORRECT_SYNDROMES[syndrome]
    if error_index then
        bits.data[offset + error_index] = bits.data[offset + error_index]:bnot()
        return true
    end

    -- If the codeword is uncorrectable, return false
    return false
end

function SCMPlusFramerBlock:process(x)
    local out = self.out:resize(0)

    local i = 0
    while i < x.length do
        -- Shift in as many bits as we can into the frame buffer
        if self.scm_plus_frame_length < SCM_PLUS_FRAME_LEN then
            -- Calculate the maximum number of bits we can shift from x
            local n = math.min(SCM_PLUS_FRAME_LEN - self.scm_plus_frame_length, x.length-i)

            ffi.copy(self.scm_plus_frame.data[self.scm_plus_frame_length], x.data[i], n*ffi.sizeof(self.scm_plus_frame.data[0]))
            i, self.scm_plus_frame_length = i + n, self.scm_plus_frame_length + n
        elseif self.scm_plus_frame_length == SCM_PLUS_FRAME_LEN then
            -- Shift frame buffer down by one bit
            ffi.C.memmove(self.scm_plus_frame.data[0], self.scm_plus_frame.data[1], (SCM_PLUS_FRAME_LEN-1)*ffi.sizeof(self.scm_plus_frame.data[0]))

            -- Shift in one bit from x
            self.scm_plus_frame.data[SCM_PLUS_FRAME_LEN-1] = x.data[i]
            i = i + 1
        end

        -- Try to validate the frame
        if self.scm_plus_frame_length == SCM_PLUS_FRAME_LEN then
            local frame_sync = types.Bit.tonumber(self.scm_plus_frame,


method(
          #attach,
          [serverUrl],
          {#mockClient: mockClient},
        ),
        returnValue:
            _i25.Future<_i2.AttachResponse>.value(_FakeAttachResponse_0(
          this,
          Invocation.method(
            #attach,
            [serverUrl],
            {#mockClient: mockClient},
          ),
        )),
      ) as _i25.Future<_i2.AttachResponse>);
}

/// A class which mocks [XdgDesktopPortalClient].
///
/// See the documentation for Mockito's code generation for more information.
class MockXdgDesktopPortalClient extends _i1.Mock
    implements _i28.XdgDesktopPortalClient {
  MockXdgDesktopPortalClient() {
    _i1.throwOnMissingStub(this);
  }

  @override
  _i3.XdgAccountPortal get account => (super.noSuchMethod(
        Invocation.getter(#account),
        returnValue: _FakeXdgAccountPortal_1(
          this,
          Invocation.getter(#account),
        ),
      ) as _i3.XdgAccountPortal);

  @override
  set account(_i3.XdgAccountPortal? _account) => super.noSuchMethod(
        Invocation.setter(
          #account,
          _account,
        ),
        returnValueForMissingStub: null,
      );

  @override
  _i4.XdgBackgroundPortal get background => (super.noSuchMethod(
        Invocation.getter(#background),
        returnValue: _FakeXdgBackgroundPortal_2(
          this,
          Invocation.getter(#background),
        ),
      ) as _i4.XdgBackgroundPortal);

  @override
  set background(_i4.XdgBackgroundPortal? _background) => super.noSuchMethod(
        Invocation.setter(
          #background,
          _background,
        ),
        returnValueForMissingStub: null,
      );

  @override
  _i5.XdgCameraPortal get camera => (super.noSuchMethod(
        Invocation.getter(#camera),
        returnValue: _FakeXdgCameraPortal_3(
          this,
          Invocation.getter(#camera),
        ),
      ) as _i5.XdgCameraPortal);

  @override
  set camera(_i5.XdgCameraPortal? _camera) => super.noSuchMethod(
        Invocation.setter(
          #camera,
          _camera,
        ),
        returnValueForMissingStub: null,
      );

  @override
  _i6.XdgDocumentsPortal get documents => (super.noSuchMethod(
        Invocation.getter(#documents),
        returnValue: _FakeXdgDocumentsPortal_4(
          this,
          Invocation.getter(#documents),
        ),
      ) as _i6.XdgDocumentsPortal);

  @override
  set documents(_i6.XdgDocumentsPortal? _documents) => super.noSuchMethod(
        Invocation.setter(
          #documents,
          _documents,
        ),
        returnValueForMissingStub: null,
      );

  @override
  _i7.XdgEmailPortal get email => (super.noSuchMethod(
        Invocation.getter(#email),
        returnValue: _FakeXdgEmailPortal_5(
          this,
          Invocation.getter(#email),
        ),
      ) as _i7.XdgEmailPortal);

  @override
  set email(_i7.XdgEmailPortal? _email) => super.noSuchMethod(
        Invocation.setter(
          #email,
          _email,
        ),
        returnValueForMissingStub: null,
      );

  @override
  _i8.XdgFileChooserPortal get fileChooser => (super.noSuchMethod(
        Invocation.getter(#fileChooser),
        returnValue: _FakeXdgFileChooserPortal_6(
          this,
          Invocation.getter(#fileChooser),
        ),
      ) as _i8.XdgFileChooserPort


import argparse
from typing import Dict, List

import yaml

# Different languages that are part of xnli.
# These correspond to dataset names (Subsets) on HuggingFace.
# A yaml file is generated by this script for each language.

LANGUAGES = {
    "de": {  # German
        "QUESTION_WORD": "richtig",
        "YES": "Ja",
        "NO": "Nein",
    },
    "en": {  # English
        "QUESTION_WORD": "right",
        "YES": "Yes",
        "NO": "No",
    },
    "es": {  # Spanish
        "QUESTION_WORD": "verdad",
        "YES": "Sí",
        "NO": "No",
    },
    "fr": {  # French
        "QUESTION_WORD": "n'est-ce pas",
        "YES": "Oui",
        "NO": "No",
    },
    "ja": {  # Japanese
        "QUESTION_WORD": "ですね",
        "YES": "はい",
        "NO": "いいえ",
    },
    "ko": {  # Korean
        "QUESTION_WORD": "맞죠",
        "YES": "예",
        "NO": "아니요",
    },
    "zh": {  # Chinese
        "QUESTION_WORD": "对吧",
        "YES": "是",
        "NO": "不是",
    },
}

def gen_lang_yamls(output_dir: str, overwrite: bool) -> None:
    """
    Generate a yaml file for each language.

    :param output_dir: The directory to output the files to.
    :param overwrite: Whether to overwrite files if they already exist.
    """
    err = []
    for lang in LANGUAGES.keys():
        file_name = f"paws_{lang}.yaml"
        try:
            QUESTION_WORD = LANGUAGES[lang]["QUESTION_WORD"]
            YES = LANGUAGES[lang]["YES"]
            NO = LANGUAGES[lang]["NO"]
            with open(
                f"{output_dir}/{file_name}", "w" if overwrite else "x", encoding="utf8"
            ) as f:
                f.write("# Generated by utils.py\n")
                yaml.dump(
                    {
                        "include": "pawsx_template_yaml",
                        "dataset_name": lang,
                        "task": f"paws_{lang}",
                        "doc_to_text": "",
                        "doc_to_choice": f"{{{{["
                        f"""sentence1+\", {QUESTION_WORD}? {YES}, \"+sentence2,"""
                        f""" sentence1+\", {QUESTION_WORD}? {NO}, \"+sentence2"""
                        f"]}}}}",
                    },
                    f,
                    allow_unicode=True,
                )
        except FileExistsError:
            err.append(file_name)

    if len(err) > 0:
        raise FileExistsError(
            "Files were not created because they already exist (use --overwrite flag):"
            f" {', '.join(err)}"
        )

def main() -> None:
    """Parse CLI args and generate language-specific yaml files."""
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--overwrite",
        default=False,
        action="store_true",
        help="Overwrite files if they already exist",
    )
    parser.add_argument(
        "--output-dir", default=".", help="Directory to write yaml files to"
    )
    args = parser.parse_args()

    gen_lang_yamls(output_dir=args.output_dir, overwrite=args.overwrite)

if __name__ == "__main__":
    main()


�,
      // 有可能会导致vscode出现不可预知的问题.
      Logger.warn("The snip", this, "must with options 'w'");
      return false;
    }

    const rlt = this.get_snip_body(vsContext);
    if(rlt === "") { // 必须获取到对应的结果
      return false;
    }

    const pos = vsContext.position;
    const content = rlt;
    const range = new vscode.Range(
      new vscode.Position(pos.line, pos.character - this.prefix.length+1),
      new vscode.Position(pos.line, pos.character + 1),
    );
    Logger.debug("Start change range", range);

    editor.insertSnippet(new vscode.SnippetString(content), range, { undoStopBefore: false, undoStopAfter: false });
    this.isChanging = true;

    return true;
  }
}

function parse(rawSnippets: string): Snippet[] {
  let res = null;
  const snips: Snippet[] = [];
  Logger.debug("start parse", rawSnippets);
  while ((res = VIM_SNIPPET.exec(rawSnippets)) !== null) {
    const [, prefix, description, options, body] = res;

    const _prefix = prefix;
    const _b = normalizePlaceholders(body);
    const _options = trim(options, [" "]);
    const [_body, _hasJSScript] = lexParser(_b);
    const _descriptsion  = description;

    const snip = new Snippet(
      _prefix,
      _descriptsion,
      _options,
      _body,
      _hasJSScript,
    );

    snips.push(snip);
  }
  return snips;
}

// 这部分代码用于实现从vim 或是 python函数 => js函数的转换
// 主要应用了正则替换.
function lexParser(str: string, vsContext?: VSnipContext): [string, boolean] {
  // 检查所有(``)包裹的部分, 并确保里面没有嵌套(`)
  // 不允许多行包含多行
  // eslint-disable-next-line
  const SNIP_FUNC_PATTERN = /`([^\`]+)\`/g;

  const FT_UNKNOW = 0x0;
  const FT_VIM = 0x1;
  const FT_PYTHON = 0x2;
  const FT_JAVASCRIPT = 0x3;

  Logger.debug("Before parse", str);
  let rlt = "";
  let hasJSScript = false;

  // 记录需要替换的值, 最后统一替换, 这里一定要注意, 不要exec之后马上替换,
  // js的实现有问题, 直接替换会导致之后的匹配出现问题, 需要等到所有待替换的值
  // 全部找出后再一起替换.
  let res = null;
  const replaceMap = new Map();

  while ((res = SNIP_FUNC_PATTERN.exec(str)) !== null) {
    const [stmt, func] = res as RegExpExecArray;
    Logger.debug("Get parser", stmt);
    if (replaceMap.get(stmt)) {
      Logger.debug(`Already get ${stmt}.`);
      continue;
    }

    let funcType = FT_PYTHON;
    if (func.startsWith("!p")) {
      funcType = FT_PYTHON;
    } else if (func.startsWith("!v")) {
      funcType = FT_VIM;
    } else if (func.startsWith("!js")) {
      // TODO: make my own func
      funcType = FT_JAVASCRIPT;
      hasJSScript = true;
    } else {
      funcType = FT_UNKNOW;
    }

    switch (funcType) {
      case FT_PYTHON:
        rlt = pythonRewrite(fu


//
//  HNKSimpleFetcher.h
//  Haneke
//
//  Created by Hermes Pique on 8/19/14.
//  Copyright (c) 2014 Hermes Pique. 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
//
//   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.
//

#import <Foundation/Foundation.h>
#import "HNKCache.h"

/**
 Simple fetcher that represents a key-image pair.
 @discussion Used as a convenience by the UIKit categories.
 */
@interface HNKSimpleFetcher : NSObject<HNKFetcher>

/**
 Initializes a fetcher with the given key and image.
 @param key Image key.
 @param image Image that will be returned by the fetcher.
 */
- (instancetype)initWithKey:(NSString*)key image:(UIImage*)image NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

@end


1 0 0 1 1 1v5a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1v-5Zm2 1v3h3v-3h-3Zm4.75-8.34a1 1 0 0 0-1.5-1.32l-2.8 3.2-1.24-1.25a1 1 0 1 0-1.42 1.42l2 2a1 1 0 0 0 1.46-.05l3.5-4Z",fill:"currentColor"}))}const I7=R(E7,"check_choice_stroked");function x7(r){return f.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},r),f.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm9-11a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-4.23-2.36a1 1 0 1 0-1.54-1.28l-4.3 5.16-2.22-2.23a1 1 0 0 0-1.42 1.42l3 3a1 1 0 0 0 1.48-.07l5-6Z",fill:"currentColor"}))}const O7=R(x7,"check_circle_stroked");function T7(r){return f.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},r),f.createElement("g",{opacity:.99},f.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.7 2.3a1 1 0 0 0-1.4 0L4 4.58l-1.3-1.3a1 1 0 0 0-1.4 1.42l2 2a1 1 0 0 0 1.4 0l3-3a1 1 0 0 0 0-1.42Zm2.8.7a1.5 1.5 0 1 0 0 3h10a1.5 1.5 0 0 0 0-3h-10ZM9 11.5c0-.83.67-1.5 1.5-1.5h10a1.5 1.5 0 0 1 0 3h-10A1.5 1.5 0 0 1 9 11.5Zm0 7c0-.83.67-1.5 1.5-1.5h10a1.5 1.5 0 0 1 0 3h-10A1.5 1.5 0 0 1 9 18.5ZM6.3 9.3a1 1 0 0 1 1.4 1.4l-3 3a1 1 0 0 1-1.4 0l-2-2a1 1 0 1 1 1.4-1.4L4 11.58l2.3-2.3Zm1.4 7a1 1 0 0 0-1.4 0L4 18.58l-1.3-1.3a1 1 0 0 0-1.4 1.42l2 2a1 1 0 0 0 1.4 0l3-3a1 1 0 0 0 0-1.42Z",fill:"currentColor"})))}const R7=R(T7,"check_list");function P7(r){return f.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},r),f.createElement("path",{d:"M5 12.5c0-.83.67-1.5 1.5-1.5h11a1.5 1.5 0 0 1 0 3h-11A1.5 1.5 0 0 1 5 12.5Z",fill:"currentColor"}))}const k2=R(P7,"checkbox_indeterminate");function D7(r){return f.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",x


date-menu{
    height: 199px;
}

.ext-strict .ext-ie .x-date-menu, .ext-border-box .ext-ie8 .x-date-menu{
    height: 197px;
}

.ext-strict .ext-ie7 .x-date-menu{
    height: 195px;
}

.ext-strict .ext-ie8 .x-date-menu{
    height: auto;
}

.x-cycle-menu .x-menu-item-checked {
    border:1px dotted !important;
	padding:0;
}

.x-menu .x-menu-scroller {
    width: 100%;
	background-repeat:no-repeat;
	background-position:center;
	height:8px;
    line-height: 8px;
	cursor:pointer;
    margin: 0;
    padding: 0;
}

.x-menu .x-menu-scroller-active{
    height: 6px;
    line-height: 6px;
}

.x-menu-list-item-indent{
    padding-left: 27px;
}/*
This file is part of Ext JS 3.4

Copyright (c) 2011-2013 Sencha Inc

Contact:  http://www.sencha.com/contact

GNU General Public License Usage
This file may be used under the terms of the GNU General Public License version 3.0 as
published by the Free Software Foundation and appearing in the file LICENSE included in the
packaging of this file.

Please review the following information to ensure the GNU General Public License version 3.0
requirements will be met: http://www.gnu.org/copyleft/gpl.html.

If you are unsure which license is appropriate for your use, please contact the sales department
at http://www.sencha.com/contact.

Build date: 2013-04-03 15:07:25
*/
html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}

.ext-forced-border-box, .ext-forced-border-box * {
    -moz-box-sizing: border-box;
    -ms-box-sizing: border-box;
    -webkit-box-sizing: border-box;
}
/*
This file is part of Ext JS 3.4

Copyright (c) 2011-2013 Sencha Inc

Contact:  http://www.sencha.com/contact

GNU General Public License Usage
This file may be used under the terms of the GNU General Public License version 3.0 as
published by the Free Software Foundation and appearing in the file LICENSE included in the
packaging of this file.

Please review the following information to ensure the GNU General Public License version 3.0
requirements will be met: http://www.gnu.org/copyleft/gpl.html.

If you are unsure which license is appropriate for your use, please contact the sales department
at http://www.sencha.com/contact.

Build date: 2013-04-03 15:07:25
*/
.ext-el-mask {
    z-index: 100;
    position: absolute;
    top:0;
    left:0;
    -moz-opacity: 0.5;
    opacity: .50;
    filter: alpha(opacity=50);
    width: 100%;
    height: 100%;
    zoom: 1;
}

.ext-el-mask


// look for double-char tokens (special case)
					if (this._pointer < this._expressLength && (c === '>' || c === '<')) {
						tk = this._tokenTable[this._expression.substring(this._pointer - 1, this._pointer + 1)];
						if (tk) {
							this._token = tk;
							this._pointer++;
						}
					}
					return;
				}
			}

			// parse numbers token
			if (isDigit) {
				this._parseDigit();
				return;
			}

			// parse strings token
			if (c === '\"') {
				this._parseString();
				return;
			}

			if (c === '\'') {
				sheetRef = this._parseSheetRef();
				if (!sheetRef) {
					return;
				}
			}

			// parse dates token
			if (c === '#') {
				this._parseDate();
				return;
			}

			// identifiers (functions, objects) must start with alpha or underscore
			if (!isLetter && c !== '_' && this._idChars.indexOf(c) < 0 && !sheetRef) {
				throw 'Identifier expected.';
			}

			// and must contain only letters/digits/_idChars
			for (i = 1; i + this._pointer < this._expressLength; i++) {
				c = this._expression[this._pointer + i];
				isLetter = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || japaneseRegExp.test(c);
				isDigit = c >= '0' && c <= '9';
				if (c === '\'' && lastChar === ':') {
					id = sheetRef + this._expression.substring(this._pointer, this._pointer + i);
					this._pointer += i;

					sheetRef = this._parseSheetRef();
					i = 0;
					continue;
				}
				lastChar = c;
				if (!isLetter && !isDigit && c !== '_' && this._idChars.indexOf(c) < 0) {
					break;
				}
			}

			// got identifier
			id += sheetRef + this._expression.substring(this._pointer, this._pointer + i);
			this._pointer += i;
			this._token = new _Token(id, _TokenID.ATOM, _TokenType.IDENTIFIER);
		}

		// Parse digit token
		private _parseDigit() {
			var div = -1,
				sci = false,
				pct = false,
				val = 0.0,
				i: number,
				c: string,
				lit: string;

			for (i = 0; i + this._pointer < this._expressLength; i++) {
				c = this._expression[this._pointer + i];

				// digits always OK
				if (c >= '0' && c <= '9') {
					val = val * 10 + (+c - 0);
					if (div > -1) {
						div *= 10;
					}
					continue;
				}

				// one decimal is OK
				if (c === '.' && div < 0) {
					div = 1;
					continue;
				}

				// scientific notation?
				if ((c === 'E' || c === 'e') && !sci) {
					sci = true;
					c = this._expression[this._pointer + i + 1];
					if (c === '+' || c === '-') i++;
					continue;
				}

				// percentage?
				if (c === '%') {
					pct = true;
					i++;
					break;
				}

				// end of literal
				break;
			}

			// end of number, get value
			if (!sci) {
				// much faster than ParseDouble
				if (div > 1) {
					val /= div;
				}
				if (pct) {
					val /= 100.0;
				}
			} else {
				lit = this._expression.substring(this._pointer, this._pointer + i);
				val = +lit;
			}

			// build token
			this._token = new _Token(val, _TokenID.ATOM, _TokenT


 .sidebar {
    @apply border-t md:border-t-0 md:border-l border-[var(--border-color)] pt-6 md:pt-0 md:pl-6 mt-6 md:mt-0;
  }

  .sidebar-header {
    @apply mb-3 text-lg font-bold text-primary;
  }

  .sidebar-list {
    @apply mb-6 space-y-2;
  }

  .sidebar-item {
    @apply text-[var(--link-color)] hover:underline block;
  }

  .quick-links {
    @apply flex flex-wrap gap-2 mb-4;
  }

  .quick-link {
    @apply px-3 py-1 text-sm transition-colors bg-gray-100 rounded dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600;
  }

  /* Responsive grid utilities */
  .responsive-grid {
    @apply grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 sm:gap-6;
  }

  /* Responsive text utilities */
  .responsive-heading-1 {
    @apply text-3xl font-bold sm:text-4xl md:text-5xl;
  }

  .responsive-heading-2 {
    @apply text-2xl font-bold sm:text-3xl;
  }

  .responsive-heading-3 {
    @apply text-xl font-bold sm:text-2xl;
  }

  .responsive-paragraph {
    @apply text-sm sm:text-base;
  }
}
/**
 * Copyright (c) 2014 The xterm.js authors. All rights reserved.
 * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
 * https://github.com/chjj/term.js
 * @license MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * Originally forked from (with the author's permission):
 *   Fabrice Bellard's javascript vt100 for jslinux:
 *   http://bellard.org/jslinux/
 *   Copyright (c) 2011 Fabrice Bellard
 *   The original design remains. The terminal itself
 *   has been extended to include xterm CSI codes, among
 *   other features.
 */.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-


return {
  summary = 'What is your vector victor.',
  description = [[
    LÖVR has math objects for vectors, matrices, and quaternions, collectively called "vector
    objects".  Vectors are useful because they can represent a multidimensional quantity (like a 3D
    position) using just a single value.
  ]],
  constructors = {
    'lovr.math.vec2',
    'lovr.math.vec3',
    'lovr.math.vec4',
    'lovr.math.quat',
    'lovr.math.mat4',
    'lovr.math.newVec2',
    'lovr.math.newVec3',
    'lovr.math.newVec4',
    'lovr.math.newQuat',
    'lovr.math.newMat4'
  },
  notes = [[
    Most LÖVR functions that accept positions, orientations, transforms, velocities, etc. also accept
    vector objects, so they can be used interchangeably with numbers:

        function lovr.draw(pass)
          -- position and size are vec3's, rotation is a quat
          pass:box(position, size, rotation)
        end

    ### Temporary vs. Permanent

    Vectors can be created in two different ways: **permanent** and **temporary**.

    **Permanent** vectors behave like normal Lua values.  They are individual objects that are
    garbage collected when no longer needed.  They're created using the usual `lovr.math.new<Type>`
    syntax:

        self.position = lovr.math.newVec3(x, y, z)

    **Temporary** vectors are created from a shared pool of vector objects.  This makes them faster
    because they use temporary memory and do not need to be garbage collected.  To make a temporary
    vector, leave off the `new` prefix:

        local position = lovr.math.vec3(x, y, z)

    As a shortcut, vector constructors are placed on the global scope.  The uppercase name of the
    vector is a function that will create a permanent vector, and the lowercase name will create a
    temporary vector.  This can be disabled using the `t.math.globals` option in `lovr.conf`.

        local position = vec3(x1, y1, z1) + vec3(x2, y2, z2)
        local transform = Mat4()

    Temporary vectors, with all their speed, come with an important restriction: they can only be
    used during the frame in which they were created.  Saving them into variables and using them
    later on will throw an error:

        local position = vec3(1, 2, 3)

        function lovr.update(dt)


SyntaxError{Msg: "trailing data"}
	}

	return parseCertificateRequest(&csr)
}

func parseCertificateRequest(in *certificateRequest) (*CertificateRequest, error) {
	out := &CertificateRequest{
		Raw:                      in.Raw,
		RawTBSCertificateRequest: in.TBSCSR.Raw,
		RawSubjectPublicKeyInfo:  in.TBSCSR.PublicKey.Raw,
		RawSubject:               in.TBSCSR.Subject.FullBytes,

		Signature:          in.SignatureValue.RightAlign(),
		SignatureAlgorithm: getSignatureAlgorithmFromAI(in.SignatureAlgorithm),

		PublicKeyAlgorithm: getPublicKeyAlgorithmFromOID(in.TBSCSR.PublicKey.Algorithm.Algorithm),

		Version:    in.TBSCSR.Version,
		Attributes: parseRawAttributes(in.TBSCSR.RawAttributes),
	}

	var err error
	out.PublicKey, err = parsePublicKey(out.PublicKeyAlgorithm, &in.TBSCSR.PublicKey)
	if err != nil {
		return nil, err
	}

	var subject pkix.RDNSequence
	if rest, err := asn1.Unmarshal(in.TBSCSR.Subject.FullBytes, &subject); err != nil {
		return nil, err
	} else if len(rest) != 0 {
		return nil, errors.New("x509: trailing data after X.509 Subject")
	}

	out.Subject.FillFromRDNSequence(&subject)

	if out.Extensions, err = parseCSRExtensions(in.TBSCSR.RawAttributes); err != nil {
		return nil, err
	}

	for _, extension := range out.Extensions {
		if extension.Id.Equal(oidExtensionSubjectAltName) {
			out.DNSNames, out.EmailAddresses, out.IPAddresses, out.URIs, err = parseSANExtension(extension.Value)
			if err != nil {
				return nil, err
			}
		}
	}

	return out, nil
}

// CheckSignature reports whether the signature on c is valid.
func (c *CertificateRequest) CheckSignature() error {
	return checkSignature(c.SignatureAlgorithm, c.RawTBSCertificateRequest, c.Signature, c.PublicKey)
}
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Cipher block chaining (CBC) mode.

// CBC provides confidentiality by xoring (chaining) each plaintext block
// with the previous ciphertext block before applying the block cipher.

// See NIST SP 800-38A, pp 10-11

package cipher

import "crypto/internal/subtle"

type cbc struct {
	b         Block
	blockSize int
	iv        []byte
	tmp       []byte
}

func newCBC(b Block, iv []byte) *cbc {
	return &cbc{
		b:         b,
		blockSize: b.BlockSize(),
		iv:        dup(iv),
		tmp:       make([]byte, b.BlockSize()),
	}
}

type cbcEncrypter cbc

// cbcEncAble is an interface implemented by ciphers that have a specific
// optimized implementation of CBC encryption, like crypto/aes.
// NewCBCEncrypter will check for this interface and return the specific
// BlockMode if found.
type cbcEncAble interface {
	NewCBCEncrypter(iv []byte) BlockMode
}

// NewCBCEncrypter returns a BlockMode which encrypts in cipher block chaining
// mode, using the given Block. The length of iv must be the same as the
// Block's block size.
func NewCBCEncrypter(b Block, iv []byte) BlockMode {
	if len(iv) !=


idades de habla discretas. La unidad de habla se elige de una colección de palabras de código, conocidas como *codebook* (puedes pensar en esto como el vocabulario). Del codebook, se elige el vector o unidad de habla que mejor representa la entrada de audio continua y se envía a través del modelo.

3. Alrededor de la mitad de los vectores de características se enmascaran aleatoriamente, y el vector de características enmascarado se alimenta a una *red de contexto*, que es un codificador Transformer que también agrega incrustaciones posicionales relativas.

4. El objetivo del preentrenamiento de la red de contexto es una *tarea contrastiva*. El modelo tiene que predecir la verdadera representación de habla cuantizada de la predicción enmascarada a partir de un conjunto de falsas, lo que anima al modelo a encontrar el vector de contexto y la unidad de habla cuantizada más similares (la etiqueta objetivo).

¡Ahora que wav2vec2 está preentrenado, puedes ajustarlo con tus datos para clasificación de audio o reconocimiento automático de voz!

### Clasificación de audio

Para usar el modelo preentrenado para la clasificación de audio, añade una capa de clasificación de secuencia encima del modelo base de Wav2Vec2. La capa de clasificación es una capa lineal que acepta los estados ocultos del codificador. Los estados ocultos representan las características aprendidas de cada fotograma de audio, que pueden tener longitudes variables. Para crear un vector de longitud fija, primero se agrupan los estados ocultos y luego se transforman en logits sobre las etiquetas de clase. La pérdida de entropía cruzada se calcula entre los logits y el objetivo para encontrar la clase más probable.

¿Listo para probar la clasificación de audio? ¡Consulta nuestra guía completa de [clasificación de audio](https://huggingface.co/docs/transformers/tasks/audio_classification) para aprender cómo ajustar Wav2Vec2 y usarlo para inferencia!

### Reconocimiento automático de voz

Para usar el modelo preentrenado para el reconocimiento automático de voz, añade una capa de modelado del lenguaje encima del modelo base de Wav2Vec2 para [CTC (clasificación temporal conexista)](glossary#connectionist-temporal-classification-ctc). La capa de modelado del lenguaje es una capa lineal que acepta los estados ocultos del codificador y los transforma en logits. Cada logit representa una clase de token (el número de tokens proviene del vocabulario de la tarea). La pérdida de CTC se calcula entre los logits y los objetivos para encontrar la secuencia de tokens más probable, que luego se decodifican en una transcripción.

¿Listo para probar el reconocimiento automático de voz? ¡Consulta nuestra guía completa de [reconocimiento automático de voz](tasks/asr) para aprender cómo ajustar Wav2Vec2 y usarlo para inferencia!

## Visión por computadora

Hay dos formas de abordar las tareas de visión por computadora:

1. Dividir una imagen en una secuencia de parches y procesarlos en paralelo con un Transformer.
2. Utilizar una CNN moderna, como [ConvNeXT](https://huggingface.co/docs/transformers/model_doc/convnext), que se basa en capas convolucionales pero adopta diseños de redes modernas.

<Tip>

Un tercer enfoque combina Transformers


A77E6A1BEB5FA5",
            "46185FBA371A282AD8251A8DA93E7A10",
            "34940377228A73C2CDA178635B8A4827",
            "0737C31BEFDE68780EB3A5504F295809",
            "3DEE2B38EAF96BC620785551C926E9AF",
            "719B32410E625DC65AB4E422E24C8663",
            "5B9AEA802EFFE00D19E746E0684993CC",
            "EE96F9B8F8FFC084C0EF8C28ED0EEC4C",
            "C6575E5F4CDEE50C0C2F41ECC33BC9E0",
            "000DCE0FA82C1422ABF37EF1971B4B1F",
            "83D1C6EBEF52D1B9DFA3F439BF8DCE25",
            "657AFE5CA6D54F9083F02C257CE7E3DB",
            "9E65239503BEAB92716D5B504358352A",
            "D8375320E32FAE3BBABD4620B1231315",
            "CC8914472A9B5862287D695AD0A88BE6",
            "B0E0D8EDA1BDBEBCD0A78678AD7D6A64",
            "C8EBE9364129E651BD4FB491FE035433",
            "2A6DF032E0D615DB3BE890B0B6D3349D",
            "975F0E184517902F1C239684EBC06314",
            "5A86E403AD3D0B9EE5CF87C32482C6FA",
            "D3E986B5231A204C88D7C2FD1ECA40C5",
            "891ABD274D024F8B04143DE588A02AC7",
            "EA619405003DD17F13ED5BFB29587568",
            "EF5CD5EF1164A2E5BBC2D96360E55B87",
            "07C74397955571A7E4025BB9EC555846",
            "B5F20FB0AC1C1DAA0DEF8EF78A9BDDB5",
            "88D91C18A4AD272B4C1E2C76BE217BFA",
            "AC548888F0E5E559777568ECE71E2007",
            "816071E2B807CE6EF526E423BBA252D5",
            "0585A675BADFDD749ECADE66BFFD0546",
            "964CA97939664EE55B8B973D044D7695",
            "BB8FAACCE9D3238714C3934E6FEE2386",
            "2BB26CD61B24CB5CB9E2C5FF40C51A00",
            "F5332DEBA64EB35CE3B5C7134C4C8495",
            "ADE7A5C99757D216D10E1F13E3A91F1F",
            "AE98C3C4FD874CE0B8501FE4C428282A",
            "04D7625B67AC3F9D117AA45FEF6C6AC1",
            "A05D3C933DC8C8A1CF48290A5D52644E",
            "078F882264317B0C00383FBA7E079301",
            "44023F3B109763A53FDEFF1822488855",
            "CA535702BAAB858D5FB5B79895E0E1E0",
            "FE1C2C02B7665895DBD2F4D2C22A7232",
            "75A182DB4FD99599022F5A03F1427289"
        )

        var key = ByteArray(16) {
            it.toByte()
        }

        expectedOutput.forEachIndexed { index, output ->
            testHmac(
                Algorithm.RipeMD128,
                key,
                ByteArray(index) { it.toByte() },
                output
            )

            key = strtobin(output)
        }
    }
}
/*
 * Copyright 2021-2024 Appmattus Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the


 sqlgraph.UpdateNode(ctx, _u.driver, _spec); err != nil {
		if _, ok := err.(*sqlgraph.NotFoundError); ok {
			err = &NotFoundError{attachedfile.Label}
		} else if sqlgraph.IsConstraintError(err) {
			err = &ConstraintError{msg: err.Error(), wrap: err}
		}
		return nil, err
	}
	_u.mutation.done = true
	return _node, nil
}
// Copyright 2019-present Facebook Inc. All rights reserved.
// This source code is licensed under the Apache 2.0 license found
// in the LICENSE file in the root directory of this source tree.

// Code generated by ent, DO NOT EDIT.

package ent

import (
	"context"
	"errors"
	"fmt"

	"entgo.io/ent/dialect/sql"
	"entgo.io/ent/dialect/sql/sqlgraph"
	"entgo.io/ent/entc/integration/edgeschema/ent/predicate"
	"entgo.io/ent/entc/integration/edgeschema/ent/relationship"
	"entgo.io/ent/entc/integration/edgeschema/ent/relationshipinfo"
	"entgo.io/ent/entc/integration/edgeschema/ent/user"
	"entgo.io/ent/schema/field"
)

// RelationshipUpdate is the builder for updating Relationship entities.
type RelationshipUpdate struct {
	config
	hooks    []Hook
	mutation *RelationshipMutation
}

// Where appends a list predicates to the RelationshipUpdate builder.
func (_u *RelationshipUpdate) Where(ps ...predicate.Relationship) *RelationshipUpdate {
	_u.mutation.Where(ps...)
	return _u
}

// SetWeight sets the "weight" field.
func (_u *RelationshipUpdate) SetWeight(v int) *RelationshipUpdate {
	_u.mutation.ResetWeight()
	_u.mutation.SetWeight(v)
	return _u
}

// SetNillableWeight sets the "weight" field if the given value is not nil.
func (_u *RelationshipUpdate) SetNillableWeight(v *int) *RelationshipUpdate {
	if v != nil {
		_u.SetWeight(*v)
	}
	return _u
}

// AddWeight adds value to the "weight" field.
func (_u *RelationshipUpdate) AddWeight(v int) *RelationshipUpdate {
	_u.mutation.AddWeight(v)
	return _u
}

// SetUserID sets the "user_id" field.
func (_u *RelationshipUpdate) SetUserID(v int) *RelationshipUpdate {
	_u.mutation.SetUserID(v)
	return _u
}

// SetNillableUserID sets the "user_id" field if the given value is not nil.
func (_u *RelationshipUpdate) SetNillableUserID(v *int) *RelationshipUpdate {
	if v != nil {
		_u.SetUserID(*v)
	}
	return _u
}

// SetRelativeID sets the "relative_id" field.
func (_u *RelationshipUpdate) SetRelativeID(v int) *RelationshipUpdate {
	_u.mutation.SetRelativeID(v)
	return _u
}

// SetNillableRelativeID sets the "relative_id" field if the given value is not nil.
func (_u *RelationshipUpdate) SetNillableRelativeID(v *int) *RelationshipUpdate {
	if v != nil {
		_u.SetRelativeID(*v)
	}
	return _u
}

// SetInfoID sets the "info_id" field.
func (_u *RelationshipUpdate) SetInfoID(v int) *RelationshipUpdate {
	_u.mutation.SetInfoID(v)
	return _u
}

// SetNillableInfoID sets the "info_id" field if the given value is not nil.
func (_u *RelationshipUpdate) SetNillableInfoID(v *int) *RelationshipUpdate {
	if v != nil {
		_u.SetInfoID(*v)
	}
	return _u
}

// ClearInfoID clears t


M.readFilePromise(c),i.entry({...h,mode:p,type:"file"},S,B)}else g.isSymbolicLink()?i.entry({...h,mode:p,type:"symlink",linkname:await M.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Due.createGzip)();return i.pipe(n),n}async function Rue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function OQ(r){var g,h,p,d,m,y,B,S;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let x of D9e)i.reject.push(x);for(let x of k9e)i.accept.push(x);i.reject.push(t.get("rcFilename"));let n=x=>{if(x===null||!x.startsWith(`${r.cwd}/`))return;let F=v.relative(r.cwd,x),H=v.resolve(Te.root,F);i.reject.push(H)};n(v.resolve(e.cwd,t.get("lockfileFilename"))),n(t.get("cacheFolder")),n(t.get("globalFolder")),n(t.get("installStatePath")),n(t.get("virtualFolder")),n(t.get("yarnPath")),await t.triggerHook(x=>x.populateYarnPaths,e,x=>{n(x)});for(let x of e.workspaces){let F=v.relative(r.cwd,x.cwd);F!==""&&!F.match(/^(\.\.)?\//)&&i.reject.push(`/${F}`)}let s={accept:[],reject:[]},o=(h=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?h:r.manifest.main,a=(d=(p=r.manifest.publishConfig)==null?void 0:p.module)!=null?d:r.manifest.module,l=(y=(m=r.manifest.publishConfig)==null?void 0:m.browser)!=null?y:r.manifest.browser,c=(S=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?S:r.manifest.bin;o!=null&&s.accept.push(v.resolve(Te.root,o)),a!=null&&s.accept.push(v.resolve(Te.root,a)),typeof l=="string"&&s.accept.push(v.resolve(Te.root,l));for(let x of c.values())s.accept.push(v.resolve(Te.root,x));if(l instanceof Map)for(let[x,F]of l.entries())s.accept.push(v.resolve(Te.root,x)),typeof F=="string"&&s.accept.push(v.resolve(Te.root,F));let u=r.manifest.files!==null;if(u){s.reject.push("/*");for(let x of r.manifest.files)Fue(s.accept,x,{cwd:Te.root})}return await R9e(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function R9e(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new So(r),o=[[Te.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Pue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirect


:io::IH5File & file) {

    // read base group "/science"
    std::string base_dir = "/science/";
    isce3::io::IGroup base_group = file.openGroup(base_dir);

    // Locate the identification group
    auto identification_vector = isce3::product::findGroupPath(base_group, "identification");
    if (identification_vector.size() == 0) {
        std::string error_msg = ("ERROR identification group not found in " +
                                 file.getFileName());
        throw isce3::except::RuntimeError(ISCE_SRCINFO(), error_msg);
    } else if (identification_vector.size() > 1) {
        std::string error_msg = ("ERROR there should be only one identification"
                                 " group in " +
                                 file.getFileName());
        throw isce3::except::RuntimeError(ISCE_SRCINFO(), error_msg);
    }

    // set look side (direction)
    std::string identification_group_str = base_dir + identification_vector[0];
    std::string look_dir;
    isce3::io::loadFromH5(
            file, identification_group_str + "/lookDirection", look_dir);
    lookSide(look_dir);

     // set product type
    std::string product_type_str;
    isce3::io::loadFromH5(
            file, identification_group_str + "/productType", product_type_str);

    std::vector<std::string> key_vector = {"grids"};

    std::string image_group_str = "", metadata_group_str;
    setImageMetadataGroupStr(file, base_dir, base_group, key_vector,
        image_group_str, metadata_group_str);

    // If did not find HDF5 groups grids
    if (image_group_str.size() == 0) {
        std::string error_msg = ("ERROR grids groups not found in " +
                                 file.getFileName());
        throw isce3::except::RuntimeError(ISCE_SRCINFO(), error_msg);
    }

    // Get grids group
    isce3::io::IGroup imGroup = file.openGroup(image_group_str);

    // Configure grids
    loadFromH5(imGroup, _grids);

    // Get metadata group
    isce3::io::IGroup metaGroup = file.openGroup(metadata_group_str);

    // Some GCOV grids metadata is stored under "metadata/sourceData"
    if (product_type_str == "GCOV" and isce3::io::exists(metaGroup, "sourceData/swaths")) {

        // Get sourceData group
        std::string swaths_group_str = metadata_group_str + "/sourceData/swaths";
        isce3::io::IGroup swaths_group = file.openGroup(swaths_group_str);

        // Update grids object with GCOV sourceData group
        if (isce3::io::exists(swaths_group, "frequencyA")) {
            populateGridSwathParameterFromH5(swaths_group, _grids['A'], 'A');
        }
        if (isce3::io::exists(swaths_group, "frequencyB")) {
            populateGridSwathParameterFromH5(swaths_group, _grids['B'], 'B');
        }
    }

    // Configure metadata
    loadFromH5(metaGroup, _metadata, "L2");

    // Save the filename
    _filename = file.filename();
}
#include "RadarGridProduct.h"
#include <isce3/product/Serialization.h>

namespace isce3 { namespace product {

/**
 * Return the path to each child group of `group` that ends with the substring
 * `group_name`.
 */
std::vector<std::string> findGroupPath(
        isce3::io::IGroup& group, const std::string& group_name)
{

    auto group_vector = group.find(group_name, ".",


ed in DWARF for a given architecture, etc...<para/>
        /// If there is no mapping from the canonical ID to a domain ID, E_BOUNDS is returned.
        /// </summary>
        [PreserveSig]
        HRESULT TranslateFromCanonicalId(
            [In] int canonicalId,
            [Out] out int domainId);

        /// <summary>
        /// Translates from a domain specific register ID to a canonical register ID. The canonical register ID is whatever the architecture services defines for a given architecture.<para/>
        /// A domain specific register ID may be how register numbers are stored in a PDB for a given architecture (e.g.: CodeView identifiers) or how register numbers are stored in DWARF for a given architecture, etc...<para/>
        /// If there is no mapping from the domain specific ID to a canonical ID, E_BOUNDS is returned.
        /// </summary>
        [PreserveSig]
        HRESULT TranslateToCanonicalId(
            [In] int domainId,
            [Out] out int canonicalId);
    }
}


RealmConfig{
			{
				URI:        testRealm,
				Authorizer: &testAuthzMod{},
			},
		},
		Debug: debug,
	}
	r, err := NewRouter(config, logger)
	require.NoError(t, err)
	defer r.Close()

	sub := testClient(t, r)

	subscribeID := wamp.GlobalID()
	sub.Send() <- &wamp.Subscribe{Request: subscribeID, Topic: denyTopic}
	msg := <-sub.Recv()
	_, ok := msg.(*wamp.Subscribed)
	require.True(t, ok, "Expected SUBSCRIBED")
}

func TestAuthorizerModify(t *testing.T) {
	config := &Config{
		RealmConfigs: []*RealmConfig{
			{
				URI:               testRealm,
				Authorizer:        &testAuthzMod{},
				RequireLocalAuthz: true,
			},
		},
		Debug: debug,
	}
	r, err := NewRouter(config, logger)
	require.NoError(t, err)
	defer r.Close()

	cli := testClient(t, r)
	for i := 1; i <= 10; i++ {
		cli.Send() <- &wamp.Call{
			Request:   wamp.ID(i),
			Procedure: wamp.MetaProcSessionGet,
			Arguments: wamp.List{cli.ID},
		}
		msg, err := wamp.RecvTimeout(cli, time.Second)
		require.NoError(t, err)
		result, ok := msg.(*wamp.Result)
		require.True(t, ok, "expected wamp.Result")
		details, ok := wamp.AsDict(result.Arguments[0])
		require.True(t, ok, "Result.Arguments[0] was not wamp.Dict")
		i64, ok := wamp.AsInt64(details["count"])
		require.True(t, ok, "Session details did not have count")
		require.Equal(t, int64(i), i64)
		foo, _ := wamp.AsString(details["foo"])
		require.Equal(t, "bar", foo)
		_, ok = details["xyzzy"]
		require.False(t, ok, "Should not have xyzzy detail")
	}
}

// Test for races when Authorizer modifies session details.
func TestAuthorizerRace(t *testing.T) {
	config := &Config{
		RealmConfigs: []*RealmConfig{
			{
				URI:               testRealm,
				Authorizer:        &testAuthzMod{},
				RequireLocalAuthz: true,
			},
		},
		Debug: debug,
	}
	r, err := NewRouter(config, logger)
	require.NoError(t, err)
	defer r.Close()

	sub := testClient(t, r)
	pub := testClient(t, r)
	cli := testClient(t, r)

	// Test that authorizer forbids denyTopic.
	subscribeID := wamp.GlobalID()
	const topic = "whatever.topic"
	sub.Send() <- &wamp.Subscribe{Request: subscribeID, Topic: topic}
	msg, err := wamp.RecvTimeout(sub, time.Second)
	require.NoError(t, err)
	_, ok := msg.(*wamp.Subscribed)
	require.True(t, ok, "Expected SUBSCRIBED")

	done := make(chan struct{})
	go func() {
		for i := 0; i < 100; i++ {
			pub.Send() <- &wamp.Publish{
				Request: wamp.ID(i),
				Topic:   topic,
				Options: wamp.Dict{"eligible_xyzzy": wamp.List{"plugh", "baz"}},
			}
		}
		done <- struct{}{}
	}()

	go func() {
		for i := 0; i < 100; i++ {
			cli.Send() <- &wamp.Call{
				Request:   wamp.ID(100 + i),
				Procedure: wamp.MetaProcSessionGet,
				Arguments: wamp.List{pub.


.takeIf { it.isNotEmpty() },
          status = this@with.status?.value?.getCode(),
          _status = this@with.status?.toElement(),
          statusReason = this@with.statusReason,
          intent = this@with.intent.value?.getCode(),
          _intent = this@with.intent.toElement(),
          priority = this@with.priority?.value?.getCode(),
          _priority = this@with.priority?.toElement(),
          code = this@with.code,
          description = this@with.description?.value,
          _description = this@with.description?.toElement(),
          focus = this@with.focus,
          `for` = this@with.`for`,
          encounter = this@with.encounter,
          completionTime = this@with.completionTime?.value?.toString(),
          _completionTime = this@with.completionTime?.toElement(),
          authoredOn = this@with.authoredOn?.value?.toString(),
          _authoredOn = this@with.authoredOn?.toElement(),
          lastModified = this@with.lastModified?.value?.toString(),
          _lastModified = this@with.lastModified?.toElement(),
          requester = this@with.requester,
          performerType = this@with.performerType.takeIf { it.isNotEmpty() },
          owner = this@with.owner,
          location = this@with.location,
          insurance = this@with.insurance.takeIf { it.isNotEmpty() },
          note = this@with.note.takeIf { it.isNotEmpty() },
          relevantHistory = this@with.relevantHistory.takeIf { it.isNotEmpty() },
          restriction = this@with.restriction,
          input = this@with.input.takeIf { it.isNotEmpty() },
          output = this@with.output.takeIf { it.isNotEmpty() },
          requestedLocation = this@with.requestedLocation,
          currentLocation = this@with.currentLocation,
          reason = this@with.reason,
          history = this@with.history,
        )
      }
  }
}
/*
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@file:UseSerializers(DoubleSerializer::class, LocalTimeSerializer::class)
@file:Suppress("RedundantVisibilityModifier", "PropertyName")

package com.google.fhir.model.r5.surrogates

import com.google.fhir.model.r5.Boolean as R5Boolean
import com.google.fhir.model.r5.Canonical
import com.google.fhir.model.r5.Code
import com.google.fhir.model.r5.CodeableConcept
import com.google.fhir.model.r5.Coding
import com.google.fhir.model.r5.ConceptMap
import com.google.fhir.model.r5.ContactDetail
import com.google.fhir.model.r5.Date
import com.google.fhir.model.r5.DateTime
import com.google.fhir.model.r5.Decimal
import com.google.fhir.model.r5.Element
import com.google.fhir.model.r5.Enumeration
import com.google.fhir.model.r5.Extension
import com.google.fhir.model.r5.FhirDate
import com.google.fhir.model.r5.FhirDateTime
import com.google.fhir.model.r5.Identifier
import com.google.fhir.model.r5.Integer
import com.google.fhir.model.


49_0225EF8C
	ldrh r1, [r4, #0x28]
	ldrh r2, [r4, #0x2a]
	ldr r0, [sp, #4]
	bl ov45_0222A770
	ldr r1, [sp]
	add r0, r5, #0
	mov r2, #0
	bl ov49_0225A428
	b _0225F9FA
_0225F950:
	ldrh r2, [r4, #0x28]
	add r0, r5, #0
	mov r1, #0
	bl ov49_0225A40C
	add r0, r5, #0
	mov r1, #1
	mov r2, #0xc
	bl ov49_0225A30C
	add r1, r0, #0
	add r0, r5, #0
	bl ov49_0225A08C
	mov r0, #0x11
	strh r0, [r4]
	add r0, r6, #0
	mov r1, #0x15
	bl ov49_0225EF8C
	b _0225F9FA
_0225F97A:
	ldrh r2, [r4, #0x28]
	add r0, r5, #0
	mov r1, #0
	bl ov49_0225A40C
	ldrh r2, [r4, #0x2a]
	add r0, r5, #0
	mov r1, #1
	bl ov49_0225A40C
	add r0, r5, #0
	mov r1, #1
	mov r2, #0xb
	bl ov49_0225A30C
	add r1, r0, #0
	add r0, r5, #0
	bl ov49_0225A08C
	mov r0, #0x11
	strh r0, [r4]
	add r0, r6, #0
	mov r1, #0x15
	bl ov49_0225EF8C
	b _0225F9FA
_0225F9AE:
	add r0, r5, #0
	bl ov49_0225A0AC
	cmp r0, #1
	bne _0225F9FA
	ldrh r1, [r4]
	add r0, r6, #0
	bl ov49_0225EF8C
	b _0225F9FA
_0225F9C2:
	ldr r0, [sp, #8]
	add r1, r7, #0
	mov r2, #1
	bl ov49_02258EEC
	add r0, r5, #0
	bl ov49_0225A0EC
	add r0, r4, #0
	add r1, r5, #0
	bl ov49_02261540
	add r0, r6, #0
	bl ov49_0225EF68
	add r0, r5, #0
	bl ov49_0225A010
	add r4, r0, #0
	add r0, r5, #0
	bl ov49_0225A02C
	add r1, r0, #0
	ldr r2, _0225FA10 ; =ov49_02269B38
	add r0, r4, #0
	mov r3, #0
	bl ov49_0225EF98
_0225F9FA:
	mov r0, #0
	add sp, #0xc
	pop {r4, r5, r6, r7, pc}
	.balign 4, 0
_0225FA00: .word 0x000005DC
_0225FA04: .word 0x000005E5
_0225FA08: .word 0x000005BF
_0225FA0C: .word gSystem
_0225FA10: .word ov49_02269B38
	thumb_func_end ov49_0225F518

	thumb_func_start ov49_0225FA14
ov49_022


import re
import sys

def update_badge(version):
    badge_url = f"https://img.shields.io/badge/Version-{version}-8ebff1?style=for-the-badge&logo=v"
    return f"![Static Badge]({badge_url})"

def main(version):
    # Validate the version format (optional)
    if not re.match(r"^v\d+\.\d+$", version):
        print("Invalid version format. Please use the format 'v1.8'.")
        return

    # Update the badge URL
    print(f"Updating shield badge URL with version {version}...")
    new_badge = update_badge(version)

    # Read the README.md file
    try:
        with open("../README.md", "r") as file:
            readme_content = file.read()
    except FileNotFoundError:
        print("README.md file not found.")
        return

    # Update the badge URL in the README.md content
    updated_content = re.sub(r"!\[Static Badge\]\(https:\/\/img\.shields\.io\/badge\/Version-v\d+\.\d+-8ebff1\?style=for-the-badge&logo=v\)",
                             new_badge, readme_content)

    # Write the updated content back to README.md
    with open("../README.md", "w") as file:
        file.write(updated_content)

    print("The updated badge URL has been saved to README.md.")

# Entry point of the script
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python update_badge.py <version>")
    else:
        main(sys.argv[1])


-5960-81a2-d95f91eb92db"
	m["/babydoll-lady-riding/"] = "701f1142-ad75-5e6c-a09b-cec52ef6d726"
	m["/vredgings-1st-anniversary-hardcore-scene-with-teen-milena-ray/"] = "ea673c91-5cb9-5fb3-9718-4f95ae76c201"
	m["/candy-j-student-nurse/"] = "0b2c24bf-c4c9-5721-9af4-0880046210ce"
	m["/teacher-crush-and-blush-ariana/"] = "6e9f80df-547e-5cd6-b797-23074f7e2eb2"
	m["/nora-fox-full-green-leotard-and-nylon/"] = "b86f6199-ef04-5489-be63-c05e2e03b485"
	m["/annabelle-episode-4/"] = "bc78d054-67a2-512b-a380-afaca06b2a71"
	m["/18-alexis-crystal/"] = "9503930a-2e5c-5976-974d-71d903a1b162"
	m["/from-the-vault-my-feet-or-my-pussy/"] = "c577880b-e761-5958-93c4-2f324e327103"
	m["/biggest-tits-in-germany-bouncing-around/"] = "baa3f0ed-f315-54ac-98e5-f17cf334cab6"
	m["/visiting-sweet-aunt-in-law-marge/"] = "7e683e74-03e6-511c-94d5-80a26573ee7e"
	m["/gael-blowjob/"] = "07b5c415-d657-50d3-b9a2-ae66656767af"
	m["/body-oil-exchange/"] = "9aab3836-448f-564d-b8ef-b745f4de8115"
	m["/cleaning-outfit/"] = "7a269fb2-f667-5942-afe9-605f9230191c"
	m["/sophia-smith-episode-2/"] = "8bef7ad9-0487-525e-948d-51b9661786e3"
	m["/sex-slave-submissive-young-euro-girl-chrissy-fox-vr-porn/"] = "9c0787f7-a39e-5d47-b6f2-b7c40b0bfa86"
	m["/sex-dance-kantai-collection-2/"] = "2f61b212-091d-50fa-9cd1-9308e1abcbe8"
	m["/strikingly-beautiful-ammalia-showing-off-her-fabulous-feet/"] = "9362c58c-1ae6-55f6-bea1-93daf3d9e492"
	m["/thor-valkyrie-a-porn-parody/"] = "b35cc8d0-07b1-5931-b009-7aa3499ae538"
	m["/at-all-costs/"] = "f5d9bdcd-5e6e-5d82-b6fc-aebbc5d84132"
	m["/those-juicy-melons/"] = "ea722a5c-16a6-54ad-bf98-3a458ef5ddc1"
	m["/sex-in-the-cayman-islands/"] = "8e5ba9ea-5ce6-4f69-848d-085390bb5f40"
	m["/kate-qu