n be overridden to provide custom input instead of using the Input class.
        /// </summary>
        public virtual bool GetMouseButton(int button)
        {
            return Input.GetMouseButton(button);
        }

        /// <summary>
        /// Interface to Input.mousePosition. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        public virtual Vector2 mousePosition
        {
            get { return MultipleDisplayUtilities.GetMousePositionRelativeToMainDisplayResolution(); }
        }

        /// <summary>
        /// Interface to Input.mouseScrollDelta. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        public virtual Vector2 mouseScrollDelta
        {
            get { return Input.mouseScrollDelta; }
        }

        /// <summary>
        /// Interface to Input.touchSupported. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        public virtual bool touchSupported
        {
            get { return Input.touchSupported; }
        }

        /// <summary>
        /// Interface to Input.touchCount. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        public virtual int touchCount
        {
            get { return Input.touchCount; }
        }

        /// <summary>
        /// Interface to Input.GetTouch. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        /// <param name="index">Touch index to get</param>
        public virtual Touch GetTouch(int index)
        {
            return Input.GetTouch(index);
        }

        /// <summary>
        /// Interface to Input.GetAxisRaw. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        /// <param name="axisName">Axis name to check</param>
        public virtual float GetAxisRaw(string axisName)
        {
            return Input.GetAxisRaw(axisName);
        }

        /// <summary>
        /// Interface to Input.GetButtonDown. Can be overridden to provide custom input instead of using the Input class.
        /// </summary>
        /// <param name="buttonName">Button name to get</param>
        public virtual bool GetButtonDown(string buttonName)
        {
            return Input.GetButtonDown(buttonName);
        }
    }
}


    ),
        TextureImageWidget(
          imgs[0],
          scale: 0.2,
        ),
      ],
    ),
  );
}
Widget _rowCircle(){
  return SingleChildScrollView(
    scrollDirection: Axis.horizontal,
    child: Row(
      children: <Widget>[
        ClipPath(
          child: TextureImageWidget(imgs[0],scale: 0.3,),
          clipper: CenterCutClipper(),
        ),
        ClipPath(
          child: TextureImageWidget(imgs[0],scale: 0.3,),
          clipper: CenterCutClipper(),
        ),
        ClipPath(
          child: TextureImageWidget(imgs[0],scale: 0.3,),
          clipper: CenterCutClipper(),
        ),
        ClipPath(
          child: TextureImageWidget(imgs[0],scale: 0.3,),
          clipper: CenterCutClipper(),
        ),
      ],
    ),
  );
}

Widget _rowRect(){
  return SingleChildScrollView(
    scrollDirection: Axis.horizontal,
    child: Row(
      children: <Widget>[
        ClipPath(
          child: TextureImageWidget(
            imgs[0],
            scale: 0.4,
          ),
          clipper: RectClipper(),
        ),
        ClipPath(
          child: TextureImageWidget(
            imgs[0],
            scale: 0.4,
          ),
          clipper: RectClipper(),
        ),
        ClipPath(
          child: TextureImageWidget(
            imgs[0],
            scale: 0.4,
          ),
          clipper: RectClipper(),
        ),
        ClipPath(
          child: TextureImageWidget(
            imgs[0],
            scale: 0.4,
          ),
          clipper: RectClipper(),
        ),
      ],
    ),
  );
}

// center中心圆角裁剪
class CenterCutClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    var path = Path()
      ..addOval(Rect.fromCircle(
          center: Offset(size.width / 2, size.height / 2),
          radius: size.height / 2))
      ..close();
    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}

// center中心圆角裁剪
class RectClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    var path = Path()
      ..addRRect(
          RRect.fromLTRBR(0, 0, size.width, size.height, Radius.circular(10)))
      ..close();
    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
/// creates a file with l10n translations from string
import 'dart:convert';
import 'dart:io';

import 'migrate_lemmy_l10n.dart';

const baseFile = 'intl_en.arb';
const autoGenHeader = '// FILE GENERATED AUTOMATICALLY, TO NOT EDIT BY HAND';

Future<void> main(List<String> args) async {
  final strings = jsonDecode(await File('$outDir/$baseFile').readAsString())
      as Map<String, dynamic>;

  final keys = strings.keys.where((key) => !key.startsWith('@')).toSet();
  final keysWithoutVariables = keys.where((key) {
    final metadata = strings['@$key'] as Map<String, dynamic>;
    final placeholders = metadata['placeholders'] as Map<String, dynamic>?;

    return placeholders?.isEmpty ?? true;
  }).toSet();

  await File('lib/l10n/l10n_from_string.dart').writeAsString('''$autoGenHeader
// ignore_for_file: constant_identifier_names

import 'package:flutter/material.dart';

import 'gen/l10n.dart';

abstract class L10nStrings {
${keys.map((key) => "  static const $key = '$key';").join('\n')}
}

extension L10nFromString on String {
  String


#include <atomic>
#include <assert.h>
#include <stdlib.h>

#include "Tracy.hpp"
#include "../client/TracyProfiler.hpp"
#include "../client/TracyCallstack.hpp"
#include "../common/TracyAlign.hpp"
#include "../common/TracyAlloc.hpp"

#include <d3d11.h>

namespace tracy
{

class D3D11Ctx
{
    friend class D3D11ZoneScope;

    enum { QueryCount = 64 * 1024 };

public:
    D3D11Ctx( ID3D11Device* device, ID3D11DeviceContext* devicectx )
        : m_device( device )
        , m_devicectx( devicectx )
        , m_context( GetGpuCtxCounter().fetch_add( 1, std::memory_order_relaxed ) )
        , m_head( 0 )
        , m_tail( 0 )
    {
        assert( m_context != 255 );

        for (int i = 0; i < QueryCount; i++)
        {
            HRESULT hr = S_OK;
            D3D11_QUERY_DESC desc;
            desc.MiscFlags = 0;

            desc.Query = D3D11_QUERY_TIMESTAMP;
            hr |= device->CreateQuery(&desc, &m_queries[i]);

            desc.Query = D3D11_QUERY_TIMESTAMP_DISJOINT;
            hr |= device->CreateQuery(&desc, &m_disjoints[i]);

            m_disjointMap[i] = nullptr;

            assert(SUCCEEDED(hr));
        }

        // Force query the initial GPU timestamp (pipeline stall)
        D3D11_QUERY_DATA_TIMESTAMP_DISJOINT disjoint;
        UINT64 timestamp;
        for (int attempts = 0; attempts < 50; attempts++)
        {
            devicectx->Begin(m_disjoints[0]);
            devicectx->End(m_queries[0]);
            devicectx->End(m_disjoints[0]);
            devicectx->Flush();

            while (devicectx->GetData(m_disjoints[0], &disjoint, sizeof(disjoint), 0) == S_FALSE)
                /* Nothing */;

            if (disjoint.Disjoint)
                continue;

            while (devicectx->GetData(m_queries[0], &timestamp, sizeof(timestamp), 0) == S_FALSE)
                /* Nothing */;

            break;
        }

        int64_t tgpu = timestamp * (1000000000ull / disjoint.Frequency);
        int64_t tcpu = Profiler::GetTime();

        uint8_t flags = 0;

        const float period = 1.f;
        auto* item = Profiler::QueueSerial();
        MemWrite( &item->hdr.type, QueueType::GpuNewContext );
        MemWrite( &item->gpuNewContext.cpuTime, tcpu );
        MemWrite( &item->gpuNewContext.gpuTime, tgpu );
        memset(&item->gpuNewContext.thread, 0, sizeof(item->gpuNewContext.thread));
        MemWrite( &item->gpuNewContext.period, period );
        MemWrite( &item->gpuNewContext.context, m_context );
        MemWrite( &item->gpuNewContext.flags, flags );
        MemWrite( &item->gpuNewContext.type, GpuContextType::Direct3D11 );

#ifdef TRACY_ON_DEMAND
        GetProfiler().DeferItem( *item );
#endif

        Profiler::QueueSerialFinish();
    }

    ~D3D11Ctx()
    {
        for (int i = 0; i < QueryCount; i++)
        {
            m_queries[i]->Release();
            m_disjoints[i]->Release();
            m_disjointMap[i] = nullptr;
        }
    }

    void Name( const char* name, uint16_t len )
    {


еменем Гелкис.$B$BВ юго-западной части Пустошей, неподалеку от лагерей племени Гелкис, ты сможешь найти Уту Мудрую. Возможно, поговорив с ней, ты сумеешь заключить союз...",
    ["O"] = "Заслужите дружественное отношение племени Гелкис, а затем поговорите с Утой Мудрой.",
    ["T"] = "Странный союз",
  },
  [1383] = {
    ["D"] = "Я знаю подходящую сыворотку. Она обойдется с правдой именно так, как с ней следует обходиться.$B$BЧтобы сделать ее, мне понадобится несколько сердец пантер Тени из болота. Кроме того, мне нужен мох хозяина болота, обитающего неподалеку. Не сомневаюсь, что ты сумеешь уговорить его поделиться с тобой.$B$BИ последнее, что необходимо мне для составления сыворотки, это опухоль странника глубин из отдаленных Пустошей. Эти гиганты редко болеют, а опухоли у них появляются еще реже.$b$bА теперь иди!",
    ["O"] = "Принесите аптекарю Фаустину в Приют Бродяги 5 сердец пантер тени, мох хозяина болота и опухоль странника глубин.",
    ["T"] = "Правда и только правда",
  },
  [1384] = {
    ["D"] = "Кентавры из племени Колкар полагают, что сильны в магии. Они ничего не понимают в магии! Они не распознают ее, даже если их носом в магию ткнуть!..$B$BКто-то должен доказать им, что в отношении магии они просто дети неразумные. Думаю, этим кем-то будешь ты. Отправляйся в деревню Колкар, что на северо-восток отсюда. Отними у кентавров их обереги и принеси их мне. Я брошу их в огонь, и это согреет мне сердце.",
    ["O"] = "Для поддержания отношений с племенем Гелкис принесите 10 грубых оберегов Уте Мудрой в деревню Гелкис.",
    ["T"] = "Набег на племя Колкар",
  },
  [1385] = {
    ["D"] = "Пустоши – земля, пожираемая огнем войны. Кентавры враждуют между собой; мы страшимся того, что победившее племя пойдет войной на наши крепости и разрушит их. Мы не можем этого допустить.$B$BМы должны научиться побеждать кентавров, а для этого нам придется заключить сою


#pragma once

// @generated by torchgen/gen.py from Operator.h

#include <string_view>
#include <tuple>
#include <vector>

// Forward declarations of any types needed in the operator signatures.
// We can't directly include these classes because it will cause circular include dependencies.
// This file is included by TensorBody.h, which defines the Tensor class.
#include <ATen/core/ATen_fwd.h>

namespace at {
namespace _ops {

struct TORCH_API upsample_trilinear3d_backward_grad_input {
  using schema = at::Tensor & (const at::Tensor &, c10::SymIntArrayRef, c10::SymIntArrayRef, bool, ::std::optional<double>, ::std::optional<double>, ::std::optional<double>, at::Tensor &);
  using ptr_schema = schema*;
  // See Note [static constexpr char* members for windows NVCC]
  static constexpr const char* name = "aten::upsample_trilinear3d_backward";
  static constexpr const char* overload_name = "grad_input";
  static constexpr const char* schema_str = "upsample_trilinear3d_backward.grad_input(Tensor grad_output, SymInt[3] output_size, SymInt[5] input_size, bool align_corners, float? scales_d=None, float? scales_h=None, float? scales_w=None, *, Tensor(a!) grad_input) -> Tensor(a!)";
  static at::Tensor & call(const at::Tensor & grad_output, c10::SymIntArrayRef output_size, c10::SymIntArrayRef input_size, bool align_corners, ::std::optional<double> scales_d, ::std::optional<double> scales_h, ::std::optional<double> scales_w, at::Tensor & grad_input);
  static at::Tensor & redispatch(c10::DispatchKeySet dispatchKeySet, const at::Tensor & grad_output, c10::SymIntArrayRef output_size, c10::SymIntArrayRef input_size, bool align_corners, ::std::optional<double> scales_d, ::std::optional<double> scales_h, ::std::optional<double> scales_w, at::Tensor & grad_input);
};

struct TORCH_API upsample_trilinear3d_backward {
  using schema = at::Tensor (const at::Tensor &, c10::SymIntArrayRef, c10::SymIntArrayRef, bool, ::std::optional<double>, ::std::optional<double>, ::std::optional<double>);
  using ptr_schema = schema*;
  // See Note [static constexpr char* members for windows NVCC]
  static constexpr const char* name = "aten::upsample_trilinear3d_backward";
  static constexpr const char* overload_name = "";
  static constexpr const char* schema_str = "upsample_trilinear3d_backward(Tensor grad_output, SymInt[3] output_size, SymInt[5] input_size, bool align_corners, float? scales_d=None, float? scales_h=None, float? scales_w=None) -> Tensor";
  static at::Tensor call(const at::Tensor & grad_output, c10::SymIntArrayRef output_size, c10::SymIntArrayRef input_size, bool align_corners, ::std::optional<double> scales_d, ::std::optional<double> scales_h, ::std::optional<double> scales_w);
  static at::Tensor redispatch(c10::DispatchKeySet dispatchKeySet, const at::Tensor & grad_output, c10::SymIntArrayRef output_size, c10::SymIntArrayRef input_size, bool align_corners, ::std::optional<double> scales_d, ::std::optional<double> scales_h, ::std::optional<double> scales_w);
};

}} // namespace at::_ops


();
    let base: f64 = 2.0;

    let z2: f64 = base.powf(z as f64);
    let mut x = z2 * (lon / 360.0 + 0.5);
    let y = z2 * (0.5 - 0.25 * ((1.0 + sin) / (1.0 - sin)).ln() / PI);

    // Wrap Tile X
    x = x % z2;
    if x < 0.0 {
        x = x + z2
    }

    (x, y, z)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_point() {
        let point = Point::new(-77.15664982795715, 38.87419791355846);
        let geom = point.into();
        assert_eq!(tiles(&geom, 1).unwrap(), vec![ (0, 0, 1) ]);
        assert_eq!(tiles(&geom, 2).unwrap(), vec![ (1, 1, 2) ]);
        assert_eq!(tiles(&geom, 3).unwrap(), vec![ (2, 3, 3) ]);
        assert_eq!(tiles(&geom, 4).unwrap(), vec![ (4, 6, 4) ]);

        let point = Point::new(-79.37969952821732, 38.8328422301817);
        let geom = point.into();
        assert_eq!(tiles(&geom, 14).unwrap(), vec![ (4579, 6271, 14) ]);
    }

    #[test]
    fn test_points() {
        let points: MultiPoint<f64> = vec![
            ( -84.48486328124999, 43.40504748787035 ),
            ( -90.87890625, 39.90973623453719 ),
            ( -84.55078125, 43.45291889355468 ),
            ( -90.8349609375, 39.93711893299021 )
        ].into();
        let geom = points.into();
        assert_eq!(tiles(&geom, 1).unwrap(), vec![ (0, 0, 1) ]);
        assert_eq!(tiles(&geom, 2).unwrap(), vec![ (1, 1, 2), (0, 1, 2) ]);
        assert_eq!(tiles(&geom, 3).unwrap(), vec![ (2, 2, 3), (1, 3, 3) ]);
        assert_eq!(tiles(&geom, 4).unwrap(), vec![ (4, 5, 4), (3, 6, 4) ]);

        let points: MultiPoint<f64> = vec![
            (-79.37969952821732, 38.8328422301817)
        ].into();

        let geom = points.into();
        assert_eq!(tiles(&geom, 14).unwrap(), vec![ (4579, 6271, 14) ]);
    }

    #[test]
    fn test_line() {
        let line = LineString(vec![
            Coordinate {
                x: -106.21719360351562,
                y: 28.592359801121567
            },
            Coordinate {
                x: -106.1004638671875,
                y: 28.791130513231813
            },
            Coordinate {
                x: -105.87661743164062,
                y: 28.864519767126602
            },
            Coordinate {
                x: -105.82374572753905,
                y: 28.60743139267596
            }
        ]);

        let geom = line.into();
        assert_eq!(tiles(&geom, 12).unwrap(), vec![
            ( 839, 1707, 12 ),
            ( 839, 1708, 12 ),
            ( 840, 1705, 12 ),
            ( 840, 1706, 12 ),
            ( 840, 1707, 12 ),
            ( 841, 1705, 12 ),
            ( 842, 1704, 12 ),
            ( 842, 1705, 12 ),
            ( 843, 1704, 12 ),
            ( 843, 1705, 12 ),
            ( 843, 1706, 12 ),
            ( 843, 1707, 12 ),
            ( 843, 1708, 12 )
        ])
    }

    #[test]
    fn test_line_2() {
        let line = LineString(vec![
            Coordinate {
                x: -79.37619924545288,
                y: 38.8345346107744
            },
            Coordinate {
                x: -79.37287330627


/*
 * CS 106B Recursion Problems
 * This file declares necessary function prototypes, so that other files
 * are able to call the recursive functions you will write.
 *
 * !!! DO NOT MODIFY THIS FILE !!!
 * !!! DO NOT MODIFY THIS FILE !!!
 * !!! DO NOT MODIFY THIS FILE !!!
 *
 * Please do not modify this provided file. Your turned-in files should work
 * with an unmodified version of all provided code files.
 *
 * (If you want to declare your own helper function prototypes,
 *  do that near the top of your .cpp file, not here.)
 */

#ifndef _recursionproblems_h
#define _recursionproblems_h

#include <iostream>
#include <string>
#include "graphics/gbufferedimage.h"
#include "graphics/gwindow.h"
#include "collections/vector.h"

// function prototype declarations
// (If you want to declare your own helper function prototypes, do that near
//  the top of your .cpp file, not here.  You should NOT modify this file.)
Vector<std::string> grammarGenerate(std::istream& input, std::string symbol, int times);

#endif

/*
 * !!! DO NOT MODIFY THIS FILE !!!
 * !!! DO NOT MODIFY THIS FILE !!!
 * !!! DO NOT MODIFY THIS FILE !!!
 */


az 52. hét lottó számait:
');
        res.write(col4);
        res.write(
            `<input type='text' id="fel1" class="form-control" name='be1' value='${be1}' onChange='this.form.submit();' pattern='/^[0-9]+[ ][0-9]+[ ][0-9]+[ ][0-9]+[ ][0-9]+$/'></div>`
        );
        res.write(col4);
        res.write('5 szám, szóközzel elválasztva 1-90-ig

');
        //2. feladat
        let szamok52: number[] = [];
        if (be1.split(" ").length == 5) be1.split(" ").forEach(x => szamok52.push(parseInt(x)));
        szamok52.sort((a, b) => a - b);
        Megold.add = szamok52;
        res.write(div);
        res.write(col4+'2. feladat: Rendezett számok:
');
        res.write(col4+`${szamok52.join(" ")}</div></div>`);
        //3. feladat
        let be3Het: number = parseInt(params.be3 as string);
        if (isNaN(be3Het) || be3Het > 52 || be3Het < 1) be3Het = 1;
        res.write(div);
        res.write(col4);
        res.write('3. feladat: Kérem egy hét sorszámát:
');
        res.write(col4);
        res.write(`<input type="text" id="fel3" class="form-control" name="be3" value="${be3Het}" onchange="this.form.submit();" /></div>`);
        res.write(col4);
        res.write('Egy hét száma 1-52-ig

');
        //4. feladat
        res.write(div);
        res.write(`${col4}4. feladat: A(z) ${be3Het}. heti nyerőszámok:</div>`);
        res.write(`${col4}${Megold.xHetiNyeroszamok(be3Het)}</div></div>`);
        //5. feladat
        res.write(div);
        res.write(`<div class="col-12">5. feladat: ${Megold.voltENemKihzottSzam ? "Volt" : "Nem volt"} nem kihúzott szám a vizsgált időszakban.</div></div>`);
        //6. feladat
        res.write(div);
        res.write(col4+'6. feladat: Páratlan számok a húzásokban:
');
        res.write(`${col4}${Megold.paratlanCount} db</div></div>`);
        //7. feladat
        Megold.filebaIr();
        //8. feladat
        res.write(`<div class="row align-items-center mb-1">${col4}8. feladat: Lottószámok:</div></div>`);
        res.write(`<div class="row mb-1">${col4}</div>${col4}`);
        Megold.kihuzottSzamokStat.forEach((x, i) => {
            res.write(` ${x}`);
            if (i % 15 === 14) {
                res.write("

");
                if (i != 89) res.write(`<div class="row mb-1">${col4}</div>${col4}`);
            }
        });
        //9. feladat
        res.write(div);
        res.write(col4+'9. feladat: Ki nem húzott prímek:
');
        res.write(`${col4}${Megold.kiNemHuzottPrimek.join(", ")} db</div></div>`);
        //GIT
        res.write('
');
        res.write('
<button type="button" cla


:dynamic Function(Invocation) noSuchMethod
    ) /*space=Object(noSuchMethod: dynamic Function(Invocation))*/ =>
      noSuchMethod,
  };
}

nonExhaustiveRestrictedValue(Typedef o) {
  return /*
   error=non-exhaustive:Object(hashCode: int())/Object(),
   fields={hashCode:int},
   type=Object
  */
      switch (o) {
    Typedef(hashCode: 5) /*space=Object(hashCode: 5)*/ => 5,
  };
}

nonExhaustiveRestrictedType(Typedef o) {
  return /*
   error=non-exhaustive:Object(noSuchMethod: dynamic Function(Invocation) _)/Object(),
   fields={noSuchMethod:dynamic Function(Invocation)},
   type=Object
  */
      switch (o) {
    Typedef(
      :int Function(Invocation) noSuchMethod
    ) /*space=Object(noSuchMethod: int Function(Invocation))*/ =>
      noSuchMethod,
  };
}

unreachableMethod(Typedef o) {
  return /*
   fields={hashCode:int,noSuchMethod:dynamic Function(Invocation),runtimeType:Type,toString:String Function()},
   type=Object
  */
      switch (o) {
    Typedef(:var hashCode) /*space=Object(hashCode: int)*/ => hashCode,
    Typedef(
      :var runtimeType
    ) /*
     error=unreachable,
     space=Object(runtimeType: Type)
    */
      =>
      runtimeType,
    Typedef(
      :var toString
    ) /*
     error=unreachable,
     space=Object(toString: String Function())
    */
      =>
      toString(),
    Typedef(
      :var noSuchMethod
    ) /*
     error=unreachable,
     space=Object(noSuchMethod: dynamic Function(Invocation))
    */
      =>
      noSuchMethod,
  };
}
void main() {
  List<int> list = [1, 2, 3];
  print(subs(list));
  print(perms(list));
  print(equals(list, list));
}

List<List> subs(
        List
            list) => /*
         checkingOrder={List,[],[(), ...]},
         subtypes={[],[(), ...]},
         type=List
        */
    switch (list) {
      [] /*space=[]*/ => [],
      [var x, ...var xs] /*space=[Object?, ...List]*/ => [
        for (var ys in subs(xs)) ...[
          [x] + ys,
          ys
        ],
        [x]
      ],
    };

List<List> perms(
        List
            list) => /*
         checkingOrder={List,[],[(), ...]},
         subtypes={[],[(), ...]},
         type=List
        */
    switch (list) {
      [] || [_] /*space=[]|[Object?]*/ => [list],
      [var x, ...var xs] /*space=[Object?, ...List]*/ => [
        for (var i = 0; i < list.length; i++)
          for (var perm in perms(xs)) [...perm.take(i), x, ...perm.skip(i)]
      ],
    };

bool equals(
        List a,
        List
            b) => /*
 fields={$1:List,$2:List},
 type=(List, List)
*/
    switch ((a, b)) {
      ([], []) /*space=([], [])*/ => true,
      ([_, ...], []) /*space=([Object?, ...List], [])*/ => false,
      ([], [_, ...]) /*space=([], [Object?, ...List<


#include "object.h"
#include "luautils.h"

static char const *object_field = "objects";
// map of objects to their parents
// use when an object relies on its parent being alive
void setup_object_table(lua_State *L) {
	newtable_with_mode(L, "k");
	set_registry_field(L, object_field);
}

static void push_object_table(lua_State *L) {
	push_registry_field(L, object_field);
}

void push_kept(lua_State *L, int keeper_idx) {
	lua_pushvalue(L, keeper_idx); // keeper
	push_object_table(L);         // keeper, object_table
	lua_insert(L, -2);            // object_table, keeper
	lua_gettable(L, -2);          // object_table, object_table[keeper]
	lua_remove(L, -2);            // object_table[keeper]
	if (lua_isnil(L, -1)) {
		luaL_error(L, "Internal error: object is not a keeper!");
	}
}

void bind_lifetimes(lua_State *L, int as_long_as_this_object_lives, int so_shall_this_one) {
	as_long_as_this_object_lives = absindex(L, as_long_as_this_object_lives);
	so_shall_this_one = absindex(L, so_shall_this_one);

	push_object_table(L);                           // objtable
	lua_pushvalue(L, as_long_as_this_object_lives); // objtable, keeper
	lua_pushvalue(L, so_shall_this_one);            // objtable, keeper, kept
	lua_rawset(L, -3);                              // objtable
	lua_pop(L, 1);
}


num(c, &zbr->key);
	if (inum != ci->last_ino) {
		/* Lowest node type is the inode node, so it comes first */
		if (key_type(c, &zbr->key) != UBIFS_INO_KEY)
			ubifs_err(c, "found orphan node ino %lu, type %d",
				  (unsigned long)inum, key_type(c, &zbr->key));
		ci->last_ino = inum;
		ci->tot_inos += 1;
		err = ubifs_tnc_read_node(c, zbr, ci->node);
		if (err) {
			ubifs_err(c, "node read failed, error %d", err);
			return err;
		}
		if (ci->node->nlink == 0)
			/* Must be recorded as an orphan */
			if (!dbg_find_check_orphan(&ci->root, inum) &&
			    !dbg_find_orphan(c, inum)) {
				ubifs_err(c, "missing orphan, ino %lu",
					  (unsigned long)inum);
				ci->missing += 1;
			}
	}
	ci->leaf_cnt += 1;
	return 0;
}

static int dbg_read_orphans(struct check_info *ci, struct ubifs_scan_leb *sleb)
{
	struct ubifs_scan_node *snod;
	struct ubifs_orph_node *orph;
	ino_t inum;
	int i, n, err;

	list_for_each_entry(snod, &sleb->nodes, list) {
		cond_resched();
		if (snod->type != UBIFS_ORPH_NODE)
			continue;
		orph = snod->node;
		n = (le32_to_cpu(orph->ch.len) - UBIFS_ORPH_NODE_SZ) >> 3;
		for (i = 0; i < n; i++) {
			inum = le64_to_cpu(orph->inos[i]);
			err = dbg_ins_check_orphan(&ci->root, inum);
			if (err)
				return err;
		}
	}
	return 0;
}

static int dbg_scan_orphans(struct ubifs_info *c, struct check_info *ci)
{
	int lnum, err = 0;
	void *buf;

	/* Check no-orphans flag and skip this if no orphans */
	if (c->no_orphs)
		return 0;

	buf = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL);
	if (!buf) {
		ubifs_err(c, "cannot allocate memory to check orphans");
		return 0;
	}

	for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) {
		struct ubifs_scan_leb *sleb;

		sleb = ubifs_scan(c, lnum, 0, buf, 0);
		if (IS_ERR(sleb)) {
			err = PTR_ERR(sleb);
			break;
		}

		err = dbg_read_orphans(ci, sleb);
		ubifs_scan_destroy(sleb);
		if (err)
			break;
	}

	vfree(buf);
	return err;
}

static int dbg_check_orphans(struct ubifs_info *c)
{
	struct check_info ci;
	int err;

	if (!dbg_is_chk_orph(c))
		return 0;

	ci.last_ino = 0;
	ci.tot_inos = 0;
	ci.missing  = 0;
	ci.leaf_cnt = 0;
	ci.root = RB_ROOT;
	ci.node = kmalloc(UBIFS_MAX_INO_NODE_SZ, GFP_NOFS);
	if (!ci.node) {
		ubifs_err(c, "out of memory");
		return -ENOMEM;
	}

	err = dbg_scan_orphans(c, &ci);
	if (err)
		goto out;

	err = dbg_walk_index(c, &dbg_orphan_check, NULL, &ci);
	if (err) {
		ubifs_err(c, "cannot scan TNC, error %d", err);
		goto out;
	}

	if (ci.missing) {
		ubifs_err(c, "%lu missing orphan(s)", ci.missing);
		err = -EINVAL;
		goto out;
	}

	dbg_cmt("last inode number is %lu", ci.last_ino);
	dbg_cmt("total number of inodes is %lu", ci.tot_inos);
	dbg_cmt("total number of leaf nodes is %llu", ci.leaf_cnt);

out:
	dbg_free_check_tree(&ci.root);
	kfree(ci.node);
	return err;
}


 header button:hover:not(:active) {
  color: #303030;
  background: whitesmoke;
}
treeview header button:not(:last-child) {
  border-right: 1px solid rgba(48, 48, 48, 0.05);
}

window, assistant {
  background: whitesmoke;
  color: #303030;
}

window.csd decoration {
  box-shadow: 0 0 8px 0 black;
  margin: 8px;
}

/*# sourceMappingURL=gtk.css.map */
/*
 * © 2024 AxonOps Limited. 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.
 */
/**
* Redesign the UI for the languages from right-to-left
*/
body.rtl {
  direction: rtl;

  .ltr {
    direction: ltr;
  }

  div.body div.left div.content div.navigation div.group div.item ul.dropdown-menu {
    margin: {
      left: auto !important;
      right: 10px !important;
      top: -9px !important;
    }
    top: -307px !important;
    left: auto !important;
    right: 54px !important;
    text-align: right;
  }

  .form-outline {
    direction: ltr;
  }

  span[for-kbd] {
    direction: ltr;
    display: inline-block;
    margin-right: 2px;
  }

  div.body div.hidden-area div.content div.question-container div.textarea div.form-outline,
  div.questions-and-answers {
    direction: ltr;
  }

  div.form-helper.ai-assistant span.float-left {
    float: right;
    direction: rtl;
  }

  div.form-helper.ai-assistant div.form-counter {
    float: left;
  }

  div.body div.hidden-area div.content div.question-container div.send {
    left: 10px;
    transform: rotate(180deg);
  }

  div.body div.right div.content div[content] div.section-actions {
    left: 0;
    right: auto;
  }

  div.body div.right div.content div[content] div.section-actions.show div.action[action="add"] {
    left: 30px;
  }

  div.body div.right div.content div[content] div.section-actions.show div.action[action="refresh"] {
    left: 50px;
  }

  div.body div.right div.content div[content][content="workspaces"] div.connections-container div.connection div.header div.title,
  div.body div.right div.content div[content][content="workspaces"] div.connections-container div.workspace div.header div.title,
  div.body div.right div.content div[content][content="workspaces"] div.workspaces-container div.connection div.header div.title,
  div.body div.right div.content div[content][content="workspaces"] div.workspaces-container div.workspace div.header div.title,
  div.body div.right div.content div[content][content="connections"] div.connections-container div.connection div.header div.title,
  div.body div.right div.content div[content][content="connections"] div.connections-container div.workspace div.header div.title,
  div.body div.right div.content div[content][content="connections"] div.w


sources using HTTP requests. This documentation includes a set of HTTP endpoints that are designed to RESTful principles. Each endpoint includes descriptions, request syntax, and examples.  Contabo provides also a CLI tool which enables you to manage your resources easily from the command line. [CLI Download and  Installation instructions.](https://github.com/contabo/cntb)  ## Product documentation  If you are looking for description about the products themselves and their usage in general or for specific purposes, please check the [Contabo Product Documentation](https://docs.contabo.com/).  ## Getting Started  In order to use the Contabo API you will need the following credentials which are available from the [Customer Control Panel](https://my.contabo.com/api/details): 1. ClientId 2. ClientSecret 3. API User (your email address to login to the [Customer Control Panel](https://my.contabo.com/api/details)) 4. API Password (this is a new password which you'll set or change in the [Customer Control Panel](https://my.contabo.com/api/details))  You can either use the API directly or by using the `cntb` CLI (Command Line Interface) tool.  ### Using the API directly  #### Via `curl` for Linux/Unix like systems  This requires `curl` and `jq` in your shell (e.g. `bash`, `zsh`). Please replace the first four placeholders with actual values.  ```sh CLIENT_ID=<ClientId from Customer Control Panel> CLIENT_SECRET=<ClientSecret from Customer Control Panel> API_USER=<API User from Customer Control Panel> API_PASSWORD='<API Password from Customer Control Panel>' ACCESS_TOKEN=$(curl -d \"client_id=$CLIENT_ID\" -d \"client_secret=$CLIENT_SECRET\" --data-urlencode \"username=$API_USER\" --data-urlencode \"password=$API_PASSWORD\" -d 'grant_type=password' 'https://auth.contabo.com/auth/realms/contabo/protocol/openid-connect/token' | jq -r '.access_token') # get list of your instances curl -X GET -H \"Authorization: Bearer $ACCESS_TOKEN\" -H \"x-request-id: 51A87ECD-754E-4104-9C54-D01AD0F83406\" \"https://api.contabo.com/v1/compute/instances\" | jq ```  #### Via `PowerShell` for Windows  Please open `PowerShell` and execute the following code after replacing the first four placeholders with actual values.  ```powershell $client_id='<ClientId from Customer Control Panel>' $client_secret='<ClientSecret from Customer Control Panel>' $api_user='<API User from Customer Control Panel>' $api_password='<API Password from Customer Control Panel>' $body = @{grant_type='password' client_id=$client_id client_secret=$client_secret username=$api_user password=$api_password} $response = Invoke-WebRequest -Uri 'https://auth.contabo.com/auth/realms/contabo/protocol/openid-connect/token' -Method 'POST' -Body $body $access_token = (ConvertFrom-Json $([String]::new($response.Content))).access_token # get list of your instances $headers = @{} $headers.Add(\"Authorization\",\"Bearer $access_token\") $headers.Add(\"x-request-id\",\"51A87ECD-754E-4104-9C54-D01AD0F83406\") Invoke-WebRequest -Uri 'https://api.contabo.com/v1/compute/instances' -Method 'GET' -Headers $headers ```  ### Using the Contabo API via the `cntb` CLI tool  1. Download `cntb` for your operating system (MacOS, Windows and Linux supported) [here](https://github.com/contabo/cntb) 2. Unzip the downloaded file 3. You might move the executable to any location on your disk. You may update your `PATH` environment variable for easier invocation. 4. Configure it once to use your credentials                     ```sh    cntb config set-credentials --


Name: "beta", Flags: fs, Usage: "beta usage", ShortDoc: "such usage!", Command: rt.C("beta")},
			{Name: "gamma", Command: rt.C("gamma")},
			{Name: "zeta", Command: rt.C("zeta", func() {
				command.Abort(command.AbortDetails{Error: fmt.Errorf("Kaboom!"), ExitCode: 17})
			})},
		}

		deprecatedCommands := []command.DeprecatedCommand{
			{Name: "delta", Deprecation: types.Deprecation{Message: "delta is for deprecated"}},
		}

		formatter.SingletonFormatter.ColorMode = formatter.ColorModePassthrough

		buf = gbytes.NewBuffer()
		program = command.Program{
			Name:               "omicron",
			Heading:            "Omicron v2.0.0",
			Commands:           commands,
			DefaultCommand:     defaultCommand,
			DeprecatedCommands: deprecatedCommands,

			Exiter: func(code int) {
				rt.RunWithData("exit", "Code", code)
			},
			OutWriter: buf,
			ErrWriter: buf,
		}
	})

	Context("when called with no subcommand", func() {
		BeforeEach(func() {
			program.RunAndExit([]string{"omicron"}) //os.Args always includes the name of the program as the first element
		})

		It("runs the default command", func() {
			Ω(rt).Should(HaveTracked("alpha", "exit"))
			Ω(rt).Should(HaveRunWithData("exit", "Code", 0))
			Ω(buf.Contents()).Should(BeEmpty())
		})
	})

	Context("when called with the default command's name", func() {
		BeforeEach(func() {
			program.RunAndExit([]string{"omicron", "alpha", "args1", "args2"})
		})

		It("runs the default command", func() {
			Ω(rt).Should(HaveTracked("alpha", "exit"))
			Ω(rt).Should(HaveRunWithData("alpha", "Args", []string{"args1", "args2"}))
			Ω(rt).Should(HaveRunWithData("exit", "Code", 0))
			Ω(buf.Contents()).Should(BeEmpty())
		})
	})

	Context("when called with a subcommand", func() {
		BeforeEach(func() {
			program.RunAndExit([]string{"omicron", "beta"})
		})

		It("runs that subcommand", func() {
			Ω(rt).Should(HaveTracked("beta", "exit"))
			Ω(rt).Should(HaveRunWithData("exit", "Code", 0))
			Ω(buf.Contents()).Should(BeEmpty())
		})
	})

	Context("when called with an unknown subcommand", func() {
		BeforeEach(func() {
			program.RunAndExit([]string{"omicron", "xi"})
		})

		It("calls the default command with arguments", func() {
			Ω(rt).Should(HaveTracked("alpha", "exit"))
			Ω(rt).Should(HaveRunWithData("alpha", "Args", []string{"xi"}))
			Ω(rt).Should(HaveRunWithData("exit", "Code", 0))
			Ω(buf.Contents()).Should(BeEmpty())
		})
	})

	Context("when passed arguments and additional arguments", func() {
		BeforeEach(func() {
			program.RunAndExit([]string{"omicron", "gamma", "arg1", "arg2", "--", "addArg1", "addArg2"})
		})
		It("passes both in", func() {
			Ω(rt).Should(HaveTracked("gamma", "exit"))
			Ω(rt).Should(HaveRunWithData("gamma", "Args", []string{"arg1", "arg2"}, "AdditionalArgs", []string{"addArg1", "addArg2"}))
			Ω(rt).Should(HaveRunWithData("exit", "Code", 0))
			Ω(buf.Contents()


m3(new A<void>(null), new A<void>(null));
    m4(new A<void>(null), y: new A<void>(null));
    m5(new A<void>(null), null);
    m6(new A<void>(null), y: null);
    m7(new A<void>(null), new A<void>(null));
    m8(new A<void>(null), y: new A<void>(null));

    void pretendToUse(dynamic x) => null;
    pretendToUse(<void>[]);
    pretendToUse(<void, void>{});
    pretendToUse(<A<void>>[]);
    pretendToUse(<A<void>, A<void>>{});
  }
}

// Testing syntax, just enforce compilation.
main() {
  // ignore
  x1;
  x2;
  x3;
  x4;
  x5;
  x6;
  x7;
  x8;
  g1;
  g2;

  s1 = null;
  s2 = new A<void>(null);
  m1(new A<void>(null), new A<void>(null));
  m2(new A<void>(null), y: new A<void>(null));
  m3(new A<void>(null), new A<void>(null));
  m4(new A<void>(null), y: new A<void>(null));
  new C().run();
}
// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

void voidValue = null;

void main() {
  test1();
  test2();
  test3();
  test4();
  test5();
  test6();
}

// Testing that a block bodied function may have no return
FutureOr<FutureOr<void>> test1() {}

// Testing that a block bodied function may return Future<void>
FutureOr<FutureOr<void>> test2() {
  return Future<void>.value(0);
}

// Testing that a block bodied function may return FutureOr<void>
FutureOr<FutureOr<void>> test3() {
  return null as FutureOr<void>;
}

// Testing that a block bodied function may return `Future<void>`
FutureOr<FutureOr<void>> test4() {
  return Future<Future<void>>.value(Future<void>.value(null));
}

// Testing that a block bodied function may return non-void values
FutureOr<FutureOr<void>> test5() {
  return 42;
}

// Testing that a block bodied function may return non-void Future values
FutureOr<FutureOr<void>> test6() {
  return new Future.value(42);
}

// Testing that a block bodied function may return overly nested Future
// values, because `Future` is a subtype of `void`.
FutureOr<FutureOr<void>> test() {
  return Future<Future<Future<void>>>.value(
    Future<Future<void>>.value(Future<void>.value(null)),
  );
}
// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

void voidValue = null;

void main() {
  test0();
  test1();
  test2();
  test3();
  test4();
  test5();
  test6();
}

// Testing that a block bodied async function may have an empty return
Future<void> test0() async {
  return;
}

// Testing that a block bodied async function may have no return
Future<void> test1() async {}

// Testing that a block bodied async function may return Future<void>
Future<void> test2([bool? b]) async {
  return Future<void>.value(null);
}

// Testing


 normal is the same direction as m_InternalData.Placement.PortalPlane.m_Normal
	//World and wall conventions signify whether it's been shifted in front of the portal plane or behind it

	float fWorldClipPlane_Forward[4] = {	m_InternalData.Placement.PortalPlane.m_Normal.x,
											m_InternalData.Placement.PortalPlane.m_Normal.y,
											m_InternalData.Placement.PortalPlane.m_Normal.z,
											m_InternalData.Placement.PortalPlane.m_Dist + PORTAL_WORLD_WALL_HALF_SEPARATION_AMOUNT };

	float fWorldClipPlane_Reverse[4] = {	-fWorldClipPlane_Forward[0],
											-fWorldClipPlane_Forward[1],
											-fWorldClipPlane_Forward[2],
											-fWorldClipPlane_Forward[3] };

	float fWallClipPlane_Forward[4] = {		m_InternalData.Placement.PortalPlane.m_Normal.x,
											m_InternalData.Placement.PortalPlane.m_Normal.y,
											m_InternalData.Placement.PortalPlane.m_Normal.z,
											m_InternalData.Placement.PortalPlane.m_Dist }; // - PORTAL_WORLD_WALL_HALF_SEPARATION_AMOUNT

	//float fWallClipPlane_Reverse[4] = {		-fWallClipPlane_Forward[0],
	//										-fWallClipPlane_Forward[1],
	//										-fWallClipPlane_Forward[2],
	//										-fWallClipPlane_Forward[3] };

	//World
	{
		Vector vOBBForward = m_InternalData.Placement.vForward;
		Vector vOBBRight = m_InternalData.Placement.vRight;
		Vector vOBBUp = m_InternalData.Placement.vUp;

		//scale the extents to usable sizes
		float flScaleX = sv_portal_collision_sim_bounds_x.GetFloat();
		if ( flScaleX < 200.0f )
			flScaleX = 200.0f;
		float flScaleY = sv_portal_collision_sim_bounds_y.GetFloat();
		if ( flScaleY < 200.0f )
			flScaleY = 200.0f;
		float flScaleZ = sv_portal_collision_sim_bounds_z.GetFloat();
		if ( flScaleZ < 252.0f )
			flScaleZ = 252.0f;

		vOBBForward *= flScaleX;
		vOBBRight	*= flScaleY;
		vOBBUp		*= flScaleZ;	// default size for scale z (252) is player (height + portal half height) * 2. Any smaller than this will allow for players to
									// reach unsimulated geometry before an end touch with teh portal.

		Vector ptOBBOrigin = m_InternalData.Placement.ptCenter;
		ptOBBOrigin -= vOBBRight / 2.0f;
		ptOBBOrigin -= vOBBUp / 2.0f;

		Vector vAABBMins, vAABBMaxs;
		vAABBMins = vAABBMaxs = ptOBBOrigin;

		for( int i = 1; i != 8; ++i )
		{
			Vector ptTest = ptOBBOrigin;
			if( i & (1 << 0) ) ptTest += vOBBForward;
			if( i & (1 << 1) ) ptTest += vOBBRight;
			if( i & (1 << 2) ) ptTest += vOBBUp;

			if( ptTest.x < vAABBMins.x ) vAABBMins.x = ptTest.x;
			if( ptTest.y < vAABBMins.y ) vAABBMins.y = ptTest.y;
			if( ptTest.z < vAABBMins.z ) vAABBMins.z = ptTest.z;
			if( ptTest.x > vAABBMaxs.x ) vAABBMaxs.x = ptTest.x;
			if( ptTest.y > vAABBMaxs.y ) vAABBMaxs.y = ptTest.y;
			if( ptTest.z > vAABBMaxs.z ) vAABBMax


448 1 1v12c0 .552-.448 1-1 1zm2 4h-6c-.552 0-1 .448-1 1v6c0 .552.448 1 1 1h5v4h-5c-.552 0-1 .448-1 1s.448 1 1 1h6c.552 0 1-.448 1-1V19c0-.552-.448-1-1-1zm-5 2h4v4h-4v-4z'/%3E%3C/svg%3E");
}
.i-sort-numeric-down::before {
	content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='black' viewBox='0 0 32 32'%3E%3Cpath d='M10 24V0H6v24H1l7 7 7-7h-5zm17 8c-.552 0-1-.448-1-1V20h-1c-.552 0-1-.448-1-1s.448-1 1-1h2c.552 0 1 .448 1 1v12c0 .552-.448 1-1 1zm2-32h-6c-.552 0-1 .448-1 1v6c0 .552.448 1 1 1h5v4h-5c-.552 0-1 .448-1 1s.448 1 1 1h6c.552 0 1-.448 1-1V1c0-.552-.448-1-1-1zm-5 2h4v4h-4V2z'/%3E%3C/svg%3E");
}

/* Gender icons are all from Font Awesome */
.i-cust_gender_2::before,
.i-female::before {
	content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='black' viewBox='0 -1 32 36'%3E%3Cpath d='M23.143 11.571c0 5.946-4.5 10.848-10.286 11.491v5.223h4.5c.362 0 .643.281.643.643v1.286a.634.634 0 01-.643.643h-4.5v4.5a.634.634 0 01-.643.643h-1.286a.634.634 0 01-.643-.643v-4.5h-4.5a.634.634 0 01-.643-.643v-1.286c0-.362.281-.643.643-.643h4.5v-5.223C4.198 22.399-.463 16.995.039 10.627.481 5.163 4.82.683 10.244.08a11.561 11.561 0 0112.897 11.491zm-20.572 0c0 4.962 4.038 9 9 9s9-4.038 9-9-4.038-9-9-9-9 4.038-9 9z'/%3E%3C/svg%3E");
}
.i-cust_gender_1::before,
.i-male::before {
	content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='black' viewBox='0 -1 32 36'%3E%3Cpath d='M29.571 2.571c.703 0 1.286.583 1.286 1.286v8.357a.634.634 0 01-.643.643h-1.286a.634.634 0 01-.643-.643V6.951l-7.674 7.694a11.45 11.45 0 012.531 7.212c0 6.388-5.183 11.571-11.571 11.571S0 28.245 0 21.857s5.183-11.571 11.571-11.571c2.732 0 5.243.944 7.212 2.531l7.674-7.674h-5.243a.634.634 0 01-.643-.643V3.214c0-.362.281-.643.643-.643h8.357zm-18 28.286c4.962 0 9-4.


t 4
    bl    art_l2f
    vmov  s0, r0
    add   sp, #4
    .cfi_adjust_cfa_offset -4
    pop   {pc}
END art_quick_l2f


 priv);
   pa_context_connect(priv->context, NULL, PA_CONTEXT_NOFLAGS, NULL);

   ECORE_MAGIC_SET(pulse_module, ECORE_MAGIC_AUDIO_MODULE);
   pulse_module->type = ECORE_AUDIO_TYPE_PULSE;
   pulse_module->name = "pulse";
   pulse_module->priv = priv;
   pulse_module->inputs = NULL;
   pulse_module->outputs = NULL;
   pulse_module->in_ops = &inops;
   pulse_module->out_ops = &outops;

   return pulse_module;
}

/**
 * @brief Shut down the Ecore_Audio PA module
 */
void
ecore_audio_pulse_shutdown(void)
{
   struct _Ecore_Audio_Pa_Private *priv = (struct _Ecore_Audio_Pa_Private *)pulse_module->priv;

   /* XXX: Make sure all pending events are freed */
   priv->api.userdata = NULL;
   free(priv);
   free(pulse_module);
   pulse_module = NULL;
}

/**
 * @}
 */

#endif /* HAVE_PULSE */


            &::before {
              top: -1px;

              @include chevron-left(9px, 2px);
              @include margin-right(10px);
            }
          }

          &.vjs-selected {
            background-color: inherit;
            color: inherit;
            position: relative;

            &:focus {
              background-color: rgba(115, 133, 159, 0.5);
            }

            &::before {
              position: absolute;
              content: " ";
              margin-top: 1px;
              background-image: url("./svg/tick-white.svg");

              @include icon(15px);
              @include left(15px);
            }
          }
        }

        // Special captions case
        // Bigger caption button
        &.vjs-captions-button {
          min-width: 200px;

          .vjs-menu-item {
            text-align: start;

            .vjs-menu-item-text {
              text-transform: capitalize;

              @include margin-left(25px);
            }
          }
        }

        &.vjs-resolution-button {
          .vjs-menu-item-text {
            @include margin-left(25px);
          }
        }

        .vjs-menu {
          width: inherit;
        }
      }
    }
  }
}

:root[dir="rtl"] {
  .vjs-back-button::before {
    transform: rotate(45deg) !important;
  }
}
.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyf


ns**:
  ///- Android native WebView
  ///- iOS
  ///- MacOS
  bool? cacheEnabled;

  ///Overrides the way the cache is used. The way the cache is used is based on the navigation type. For a normal page load, the cache is checked and content is re-validated as needed.
  ///When navigating back, content is not revalidated, instead the content is just retrieved from the cache. The default value is [CacheMode.LOAD_DEFAULT].
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- Android native WebView ([Official API - WebSettings.setCacheMode](https://developer.android.com/reference/android/webkit/WebSettings#setCacheMode(int)))
  CacheMode? cacheMode;

  ///Use [PlatformInAppWebViewController.clearAllCache] instead.
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- Android native WebView
  ///- iOS
  ///- MacOS
  @Deprecated('Use InAppWebViewController.clearAllCache instead')
  bool? clearCache;

  ///Use [PlatformCookieManager.removeSessionCookies] instead.
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- Android native WebView
  @Deprecated('Use CookieManager.removeSessionCookies instead')
  bool? clearSessionCache;

  ///List of [ContentBlocker] that are a set of rules used to block content in the browser window.
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- Android native WebView
  ///- iOS 11.0+
  ///- MacOS 10.13+
  List<ContentBlocker>? contentBlockers;

  ///Configures how safe area insets are added to the adjusted content inset.
  ///The default value is [ScrollViewContentInsetAdjustmentBehavior.NEVER].
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- iOS 11.0+ ([Official API - UIScrollView.contentInsetAdjustmentBehavior](https://developer.apple.com/documentation/uikit/uiscrollview/2902261-contentinsetadjustmentbehavior))
  ScrollViewContentInsetAdjustmentBehavior? contentInsetAdjustmentBehavior;

  ///Sets the cursive font family name. The default value is `"cursive"`.
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- Android native WebView ([Official API - WebSettings.setCursiveFontFamily](https://developer.android.com/reference/android/webkit/WebSettings#setCursiveFontFamily(java.lang.String)))
  String? cursiveFontFamily;

  ///Specifying a dataDetectoryTypes value adds interactivity to web content that matches the value.
  ///For example, Safari adds a link to “apple.com” in the text “Visit apple.com” if the dataDetectorTypes property is set to [DataDetectorTypes.LINK].
  ///The default value is [DataDetectorTypes.NONE].
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- iOS 10+ ([Official API - WKWebViewConfiguration.dataDetectorTypes](https://developer.apple.com/documentation/webkit/wkwebviewconfiguration/1641937-datadetectortypes))
  List<DataDetectorTypes>? dataDetectorTypes;

  ///Set to `true` if you want the database storage API is enabled. The default value is `true`.
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- Android native WebView ([Official API - WebSettings.setDatabaseEnabled](https://developer.android.com/reference/android/webkit/WebSettings?hl=en#setDatabaseEnabled(boolean)))
  bool? databaseEnabled;

  ///A [ScrollViewDecelerationRate] value that determines the rate of deceleration after the user lifts their finger.
  ///The default value is [ScrollViewDecelerationRate.NORMAL].
  ///
  ///**Officially Supported Platforms/Implementations**:
  ///- iOS ([Official API - UIScrollView.decelerationRate](https://developer.apple.com/documentation/uikit/uiscrollview/1619438-decelerationrate))
  ScrollViewDecelerationRate?


       rect.write(socket);

        const quint32 encoding = htonl(0); // raw encoding
        socket->write((char *)&encoding, sizeof(encoding));

        int linestep = screenImage.bytesPerLine();
        const uchar *screendata = screenImage.scanLine(rect.y)
                                  + rect.x * screenImage.depth() / 8;

#ifndef QT_NO_QWS_CURSOR
        // hardware cursors must be blended with the screen memory
        const bool doBlendCursor = qt_screencursor
                                   && !server->hasClientCursor()
                                   && qt_screencursor->isAccelerated();
        QImage tileImage;
        if (doBlendCursor) {
            const QRect cursorRect = qt_screencursor->boundingRect()
                                     .translated(-server->screen()->offset());
            if (tileRect.intersects(cursorRect)) {
                tileImage = screenImage.copy(tileRect);
                blendCursor(tileImage,
                            tileRect.translated(server->screen()->offset()));
                screendata = tileImage.bits();
                linestep = tileImage.bytesPerLine();
            }
        }
#endif // QT_NO_QWS_CURSOR

        if (server->doPixelConversion()) {
            const int bufferSize = rect.w * rect.h * bytesPerPixel;
            if (bufferSize > buffer.size())
                buffer.resize(bufferSize);

            // convert pixels
            char *b = buffer.data();
            const int bstep = rect.w * bytesPerPixel;
            for (int i = 0; i < rect.h; ++i) {
                server->convertPixels(b, (const char*)screendata, rect.w);
                screendata += linestep;
                b += bstep;
            }
            socket->write(buffer.constData(), bufferSize);
        } else {
            for (int i = 0; i < rect.h; ++i) {
                socket->write((const char*)screendata, rect.w * bytesPerPixel);
                screendata += linestep;
            }
        }
        if (socket->state() == QAbstractSocket::UnconnectedState)
            break;
    }
    socket->flush();

    QWSDisplay::ungrab();
}

inline QImage QVNCServer::screenImage() const
{
    return QImage(qvnc_screen->base(), qvnc_screen->deviceWidth(),
                  qvnc_screen->deviceHeight(), qvnc_screen->linestep(),
                  qvnc_screen->pixelFormat());
}

void QVNCServer::checkUpdate()
{
    if (!wantUpdate)
        return;

    if (dirtyCursor) {
#ifndef QT_NO_QWS_CURSOR
        Q_ASSERT(qvnc_cursor);
        qvnc_cursor->write();
#endif
        dirtyCursor = false;
        wantUpdate = false;
        return;
    }

    if (dirtyMap()->numDirty > 0) {
        if (encoder)
            encoder->write();
        wantUpdate = false;
    }
}

void QVNCServer::discardClient()
{
    timer->stop();
    state = Unconnected;
    delete encoder;
    encoder = 0;
#ifndef QT_NO_QWS_CURSOR
    delete qvnc_cursor;
    qvnc_cursor = 0;
#endif
    if (!qvnc_screen->screen() && !qvnc_screen->d_ptr->noDisablePainting)
        QWSServer::instance()->enablePainting(false);
}

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

/*!
    \class QVNCScreen
    \internal
    \ingroup qws

    \brief The QVNCScreen class implements a screen driver for VNC
    servers.

    Note that this class is only available in \l{Qt for Embedded Linux}.
    Custom screen drivers can be added by subclassing the QScreen
    class, using the QScreenDriverFactory class to dynamically load
    the driver into the application.


 result;
};
function twJoin() {
  let index2 = 0;
  let argument;
  let resolvedValue;
  let string2 = "";
  while (index2 < arguments.length) {
    if (argument = arguments[index2++]) {
      if (resolvedValue = toValue(argument)) {
        string2 && (string2 += " ");
        string2 += resolvedValue;
      }
    }
  }
  return string2;
}
const toValue = (mix) => {
  if (typeof mix === "string") {
    return mix;
  }
  let resolvedValue;
  let string2 = "";
  for (let k3 = 0; k3 < mix.length; k3++) {
    if (mix[k3]) {
      if (resolvedValue = toValue(mix[k3])) {
        string2 && (string2 += " ");
        string2 += resolvedValue;
      }
    }
  }
  return string2;
};
function createTailwindMerge(createConfigFirst, ...createConfigRest) {
  let configUtils;
  let cacheGet;
  let cacheSet;
  let functionToCall = initTailwindMerge;
  function initTailwindMerge(classList) {
    const config2 = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
    configUtils = createConfigUtils(config2);
    cacheGet = configUtils.cache.get;
    cacheSet = configUtils.cache.set;
    functionToCall = tailwindMerge;
    return tailwindMerge(classList);
  }
  function tailwindMerge(classList) {
    const cachedResult = cacheGet(classList);
    if (cachedResult) {
      return cachedResult;
    }
    const result = mergeClassList(classList, configUtils);
    cacheSet(classList, result);
    return result;
  }
  return function callTailwindMerge() {
    return functionToCall(twJoin.apply(null, arguments));
  };
}
const fromTheme = (key) => {
  const themeGetter = (theme) => theme[key] || [];
  themeGetter.isThemeGetter = true;
  return themeGetter;
};
const arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
const fractionRegex = /^\d+\/\d+$/;
const stringLengths = /* @__PURE__ */ new Set(["px", "full", "screen"]);
const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
const isLength = (value) => isNumber2(value) || stringLengths.has(value) || fractionRegex.test(value);
const isArbitraryLength = (value) => getIsArbitraryValue(value, "length", isLengthOnly);
const isNumber2 = (value) => Boolean(value) && !Number.isNaN(Number(value));
const isArbitraryNumber = (value) => getIsArbitraryValue(value, "number", isNumber2);
const isInteger = (value) => Boolean(value) && Number.isInteger(Number(value));
const isPercent2 = (value) => value.endsWith("%") && isNumber2(value.slice(0, -1));
const isArbitraryValue = (value) => arbitraryValueRegex.test(value);
const isTshirtSize = (value) => tshirtUnitRegex.test(value);
const sizeLabels = /* @__PURE__ */ new Set(["length", "size", "percentage"]);
const isArbitrarySize = (value


data-task=b] input[type=checkbox]:hover,.HyperMD-task-line[data-task=c] input[type=checkbox]:hover,.HyperMD-task-line[data-task=d] input[type=checkbox]:hover,.HyperMD-task-line[data-task=e] input[type=checkbox]:hover,.HyperMD-task-line[data-task=f] input[type=checkbox]:hover,.HyperMD-task-line[data-task=g] input[type=checkbox]:hover,.HyperMD-task-line[data-task=h] input[type=checkbox]:hover,.HyperMD-task-line[data-task=l] input[type=checkbox]:hover,.HyperMD-task-line[data-task=m] input[type=checkbox]:hover,.HyperMD-task-line[data-task=n] input[type=checkbox]:hover,.HyperMD-task-line[data-task=p] input[type=checkbox]:hover,.HyperMD-task-line[data-task=t] input[type=checkbox]:hover,.HyperMD-task-line[data-task=u] input[type=checkbox]:hover,.HyperMD-task-line[data-task=w] input[type=checkbox]:hover,.HyperMD-task-line[data-task=z] input[type=checkbox]:hover,.task-list-item[data-task="!"] input[type=checkbox]:hover,.task-list-item[data-task="$"] input[type=checkbox]:hover,.task-list-item[data-task="*"] input[type=checkbox]:hover,.task-list-item[data-task="<"] input[type=checkbox]:hover,.task-list-item[data-task=">"] input[type=checkbox]:hover,.task-list-item[data-task="?"] input[type=checkbox]:hover,.task-list-item[data-task=B] input[type=checkbox]:hover,.task-list-item[data-task=H] input[type=checkbox]:hover,.task-list-item[data-task=I] input[type=checkbox]:hover,.task-list-item[data-task=L] input[type=checkbox]:hover,.task-list-item[data-task=M] input[type=checkbox]:hover,.task-list-item[data-task=T] input[type=checkbox]:hover,.task-list-item[data-task=U] input[type=checkbox]:hover,.task-list-item[data-task=W] input[type=checkbox]:hover,.task-list-item[data-task=a] input[type=checkbox]:hover,.task-list-item[data-task=b] input[type=checkbox]:hover,.task-list-item[data-task=c] input[type=checkbox]:hover,.task-list-item[data-task=d] input[type=checkbox]:hover,.task-list-item[data-task=e] input[type=checkbox]:hover,.task-list-item[data-task=f] input[type=checkbox]:hover,.task-list-item[data-task=g] input[type=checkbox]:hover,.task-list-item[data-task=h] input[type=checkbox]:hover,.task-list-item[data-task=l] input[type=checkbox]:hover,.task-list-item[data-task=m] input[type=checkbox]:hover,.task-list-item[data-task=n] input[type=checkbox]:hover,.task-list-item[data-task=p] input[type=checkbox]:hover,.task-list-item[data-task=t] input[type=checkbox]:hover,.task-list-item[data-task=u] input[type=checkbox]:hover,.task-list-item[data-task=w] input[type=checkbox]:hover,.task-list-item[data-task=z] input[type=checkbox]:hover{background:none;border:none}}}@container style(--fas-alternative-checkboxes: norma


)	(MV_REG_READ(SEC_RSA_KEY_REG + 4 * (x)))
	#define EFUSE_GET_BOX_ID		(MV_REG_READ(SEC_BOX_ID_REG))
	#define EFUSE_GET_FLASH_ID		((MV_REG_READ(SEC_BOOT_CTRL_REG) \
			& SEC_FLASH_ID_MASK)  >> SEC_FLASH_ID_OFFS)
	#define EFUSE_GET_SECURE_BOOT		((MV_REG_READ(SEC_BOOT_CTRL_REG) \
			& SEC_BOOT_MODE_MASK)  >> SEC_BOOT_MODE_OFFS)
	#define EFUSE_GET_JTAG_DELAY		((MV_REG_READ(SEC_BOOT_CTRL_REG) \
			& SEC_JTAG_DSBL_MASK)  >> SEC_JTAG_DSBL_OFFS)
	#define EFUSE_GET_BOOT_SOURCE		((MV_REG_READ(SEC_BOOT_CTRL_REG) \
			& SEC_BOOT_DEV_MASK)  >> SEC_BOOT_DEV_OFFS)
#endif

#endif /* _SOC_SPEC_H */


ne (assuming a 16-byte cache line).
 *
 * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 respectively,
 * which can be used as the first and second arguments of a subsequent call.
 */
.macro save_volatile_to_stack elx:req
    /* Reserve stack space and save registers x0-x18, x29 & x30. */
    stp x0, x1, [sp, #-(8 * 24)]!
    stp x2, x3, [sp, #8 * 2]
    stp x4, x5, [sp, #8 * 4]
    stp x6, x7, [sp, #8 * 6]
    stp x8, x9, [sp, #8 * 8]
    stp x10, x11, [sp, #8 * 10]
    stp x12, x13, [sp, #8 * 12]
    stp x14, x15, [sp, #8 * 14]
    stp x16, x17, [sp, #8 * 16]
    str x18, [sp, #8 * 18]
    stp x29, x30, [sp, #8 * 20]

    /*
     * Save elr_elx & spsr_elx. This such that we can take nested exception
     * and still be able to unwind.
     */
    CHECK_EL_1_OR_2_OR_3(x0)
1:  mrs   x0, elr_el1
    mrs   x1, spsr_el1
    b     4f
2:  mrs   x0, elr_el2
    mrs   x1, spsr_el2
    b     4f
3:  mrs   x0, elr_el3
    mrs   x1, spsr_el3
4:  stp x0, x1, [sp, #8 * 22]
.endm

  .section .text.vtable, "ax"
  .align 12

.global vector_table
vector_table:

// ------------------------------------------------------------
// Current EL with SP0
// ------------------------------------------------------------
  .balign 128
sync_current_el_sp0:
  current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
irq_current_el_sp0:
  current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
fiq_current_el_sp0:
  current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
serror_current_el_sp0:
  current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

// ------------------------------------------------------------
// Current EL with SPx
// ------------------------------------------------------------

  .balign 128
sync_current_el_spx:
  current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
irq_current_el_spx:
  current_el_with_spx el2 EXCEPT_AARCH64_IRQ

  .balign 128
fiq_current_el_spx:
  current_el_with_spx el2 EXCEPT_AARCH64_FIQ

  .balign 128
serror_current_el_spx:
  current_el_with_spx el2 EXCEPT_AARCH64_SERROR

// ------------------------------------------------------------
// Lower EL using AArch64
// ------------------------------------------------------------

  .balign 128
sync_lower_el_aarch64:
  B        .                   //       Synchronous exception
  //current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
irq_lower_el_aarch64:
  B        .                    //        IRQ
  //current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
fiq_lower_el_aarch64:
  B        .                    //        FIQ
  //current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS

  .balign 128
serror_lower_el_aarch64:
  B        .                    //        SError
  //current_el_with_spx el2 EXCEPT_AARCH64_SYNCHRONOUS_


) 得到，因此可以通过计算比较动物的大小。

根据两组反义词 **_poswords_** , **_negwords_** 构建一个概念(认知)向量, words 中的每个词向量在概念向量中投影，即可得到认知信息。

分值越大，**_words_** 越位于 **_poswords_** 一侧。

> Grand, G., Blank, I.A., Pereira, F. and Fedorenko, E., 2022. Semantic projection recovers rich human knowledge of multiple object features from word embeddings. _Nature Human Behaviour_, pp.1-13."

![](img/22-semantic_projection.png)

例如，人类的语言中，存在尺寸、性别、年龄、政治、速度、财富等不同的概念。每个概念可以由两组反义词确定概念的向量方向。

以运动项目为例，在人类认知中， 开展不同运动的人所处于的财富水平是有差异的。

```python
import cntext as ct

# 获取词向量文件 https://cntext.readthedocs.io/zh-cn/latest/embeddings.html
dm_w2v = ct.load_w2v('douban-movie-1000w-Word2Vec.200.15.bin')

# 定义词语列表
phy_words = ['游泳', '跑步', '篮球', '羽毛球', '马拉松', '马术', '徒步']

rich_words = [
    '富裕', '财富', '金钱', '豪宅', '豪车',
    '奢侈品', '投资', '股票', '基金', '黄金',
    '钻石', '游艇', '私人飞机', '企业家', '富豪',
    '成功', '繁荣', '奢华', '贵族', '高收入'
]

poor_words = [
    '贫穷', '贫困', '饥饿', '失业', '低收入',
    '简陋', '破旧', '乞丐', '流浪', '欠债',
    '破产', '困境', '艰难', '挣扎', '匮乏',
    '落后', '无助', '绝望', '赤贫', '温饱'
]

phy_project_on_fortune = ct.sematic_projection(wv = dm_w2v,
                                               words = phy_words,
                                               poswords =rich_words,
                                               negwords = poor_words)

phy_project_on_fortune
```

Run

```
[('跑步', -1.82),
 ('徒步', -0.82),
 ('游泳', -0.19),
 ('羽毛球', 0.57),
 ('马拉松', 0.62),
 ('马术', 1.15),
 ('篮球', 4.0)]
```

关于运动的财富水平， 大体上还是准的。数值越大， 语义越接近 poswords， 即越富裕。

<br>

## 5.4 project_word

在向量空间中， 计算词语a在词语b上的投影(余弦相似度)。默认返回的是投影值。
    如果 cosine=True，返回词语a与词语b的余弦相似度。

```python
project_word(wv, a, b, cosine=False)


attackers to exploit a compromised intermediate. Additionally, regular rotations make it easier to revoke an intermediate certificate if it becomes compromised, enhancing the overall security and resiliency of the PKI ecosystem.

Both Let’s Encrypt and Google Trust Services changed their intermediate chains in June 2024. In addition, Let’s Encrypt has started to balance their certificate issuance across 10 intermediates (5 RSA and 5 ECDSA).

Cloudflare customers using Advanced Certificate Manager have the ability to choose their issuing CA. The issue is that even if Cloudflare uses the same CA for a certificate renewal, there is no guarantee that the same certificate chain (root or intermediate) will be used to issue the renewed certificate. As a result, if pinning is used, a successful renewal could cause a full outage for a domain or application.

This happens because certificate pinning relies on the exact matching of certificates. When an intermediate certificate is rotated or changed, the new certificate might not match the pinned certificate on the client side. As a result, the client will reject the renewed certificate, even if it’s a valid certificate issued by the same CA. This mismatch leads to a failure on the client side, causing the domain to become inaccessible until the pinned certificate is updated to reflect the new intermediate certificate. This risk of an unexpected outage is a major downside of continuing to use certificate pinning, especially as CAs increasingly update their intermediates as a security measure.

Increased use of certificate transparency

			<svg width="16" height="16" viewBox="0 0 24 24">
				<path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path>
			</svg>

Certificate transparency (CT) logs provide a standardized framework for monitoring and auditing the issuance of TLS certificates. CT logs help detect misissued or malicious certificates and Cloudflare customers can set up <


Fallback) {\n    if (true) {\n      if (route.hydrateFallbackElement) {\n         true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - " + "`HydrateFallback` will be used.") : 0;\n      }\n    }\n    Object.assign(updates, {\n      hydrateFallbackElement: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.HydrateFallback),\n      HydrateFallback: undefined\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (true) {\n      if (route.errorElement) {\n         true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `ErrorBoundary` and `errorElement` on your route - " + "`ErrorBoundary` will be used.") : 0;\n      }\n    }\n    Object.assign(updates, {\n      errorElement: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.ErrorBoundary),\n      ErrorBoundary: undefined\n    });\n  }\n  return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n  return (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createMemoryHistory)({\n      initialEntries: opts == null ? void 0 : opts.initialEntries,\n      initialIndex: opts == null ? void 0 : opts.initialIndex\n    }),\n    hydrationData: opts == null ? void 0 : opts.hydrationData,\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation\n  }).initialize();\n}\n\n\n//# sourceMappingURL=index.js.map\n\n\n//# sourceURL=webpack://frontend/./node_modules/react-router/dist/index.js?')},"./node_modules/react-transition-group/esm/Transition.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ENTERED: () => (/* binding */ ENTERED),\n/* harmony export */   ENTERING: () => (/* binding */ ENTERING),\n/* harmony export */   EXITED: () => (/* binding */ EXITED),\n/* harmony export */   EXITING: () => (/* binding */ EXITING),\n/* harmony export */   UNMOUNTED: () => (/* binding */ UNMOUNTED),\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpac


 테이블은 트래픽의 소스/목적지 IP와 포트를 기록하며, 규칙에 따라 NAT를 수행합니다.

- **Stateful**: NAT 장비는 세션 상태를 추적하여, 이전 요청에 대한 응답 패킷을 적절히 변환하고 전달합니다.
- **세션 장비(Session Device)**: 방화벽과 같은 장비는 정해진 규칙에 따라 NAT를 수행하며, 세션 테이블에 기록된 정보를 활용합니다.

---

# VPN의 작동 원리와 NAT

**VPN(Virtual Private Network)**는 가상의 사설 네트워크로, 원격지에서도 사설망에 접속할 수 있도록 도와줍니다. VPN은 **Private Network**의 관점에서 NAT를 활용하며, 다음과 같은 특징을 가집니다:

1. **Virtual(가상화)**: 물리적 네트워크 대신 가상 터널을 통해 데이터가 전송됩니다.
2. **보안성**: NAT와 암호화를 사용하여 데이터 보안을 강화합니다.
3. **트래픽 관리**: NAT를 통해 사설망과 공인망 간의 데이터 교환을 수행합니다.

VPN과 NAT의 조합은 사설망을 효율적으로 관리하며, 보안을 강화하고 공인 IP 주소 부족 문제를 해결합니다.
### 들어가기 전에

- 네트워크 계층의 역할은 트랜스포트 계층으로부터 세그먼트를 받아 데이터그램으로 캡슐화하고 전달함
- 라우터는 **데이터 평면**과 **제어 평면**으로 역할이 나뉨
  - **데이터 평면**
    - 입력 → 출력 링크로 데이터그램을 **`실제로 전달`**
    - 여기서 실제로 전달하는걸 **`포워딩`** 이라고 함
    - 나노초 단위동안 **하드웨어**에서 실행


是，虽然看起来这些分圆多项式的系数都只能是 $0$ 和 $\pm1$，但是对于一般的 $n$，这个结论是不对的。第一个反例出现在 $\Phi_{105}(x)$，而且可以证明，随着 $n$ 的增大，它的系数可以取到任意大的值。

利用上文的 Möbius 反演式，可以总结出如下性质来简化 $\Phi_n(x)$ 的计算：

???+ note "性质"
    对于分圆多项式 $\Phi_n(x)$，有：

    1.  如果素数 $p\mid n$，则 $\Phi_{pn}(x)=\Phi_n(x^p)$；
    2.  如果素数 $p\perp n$，则 $\Phi_{pn}(x)=\dfrac{\Phi_n(x^p)}{\Phi_n(x)}$；
    3.  特别地，如果 $n$ 是奇数，则 $\Phi_{2n}(x)=\Phi_n(-x)$；
    4.  对于素数 $p$，有 $\Phi_{p}(x)=1+x+\cdots+x^{p-1}$；
    5.  特别地，$\Phi_{2^k}(x)=x^{2^{k-1}}+1$。

这些性质说明，对分圆多项式的计算，重点在于那些次数是无平方因子的奇数的情形。而对于这种情形，可以用性质二逐个添加素因子；每个素因子的加入，只需要做一次多项式除法。

分圆多项式还有很多其它的性质。

???+ note "定理"
    设 $\Phi_n(x)$ 为 $n>1$ 次分圆多项式，且多项式的次数是 $\varphi(n)$。于是，有：

    1.  多项式 $\Phi_n(x)$ 是回文多项式，它的 $j$ 次项系数和 $\varphi(n)-j$ 次项系数相同，即 $\Phi_n(x)=x^{\varphi(n)}\Phi_n(1/x)$；
    2.  多项式的 $\varphi(n)-1$ 次项系数等于 Möbius 函数 $-\mu(n)$；
    3.  如果 $n$ 是素数幂 $p^k$，那么 $\Phi_n(1)=p$；否则，$\Phi_n(1)=1$；
    4.  设 $b>1$ 且 $p$ 为 $\Phi_n(b)$ 的素因子，则 $p\mid n$，或者 $n$ 是乘法群 $(\mathbf Z/p\mathbf Z)^\times$ 中的 $b$ 的阶，且这两种情况不能同时发生。

??? note "证明"
    对于前三条性质，只需要利用 Möbius 反演即可。对于 1，直接考察 $\Phi_n(x)$ 的 Möbius 反演形式，即 $\Phi_d(x)=\prod_{d\mid n}(x^d-1)^{\mu(n/d)}$；对于 2，设 $\Phi_n(x)$ 的 $\varphi(n)-1$ 次项系数为 $f(n)$，则比较 $x^n-1=\prod_{d\mid n}\Phi_d(x)$ 等式两侧的 $n-1$


-pos-breadcrumbs.display-smartphone,
	div.jsn-modulecontainer.display-smartphone {
		display: block;
	}
	div#jsn-content.jsn-hasright #jsn-content_inner2,
	div#jsn-content.jsn-hasleft #jsn-content_inner {
		background: none;
	}
	#jsn-pos-promo-left div.jsn-modulecontainer,
	#jsn-pos-promo-right div.jsn-modulecontainer,
	#jsn-leftsidecontent_inner,
	#jsn-rightsidecontent_inner {
		margin: 20px 10px !important;
	}
	#jsn-content.jsn-hasinnerleft #jsn-pos-innerright > div {
		padding-top: 0;
	}
	div.jsn-modulescontainer2 div.jsn-modulecontainer,
	div.jsn-modulescontainer3 div.jsn-modulecontainer,
	div.jsn-modulescontainer4 div.jsn-modulecontainer,
	div.jsn-modulescontainer5 div.jsn-modulecontainer,
	div.jsn-modulescontainer6 div.jsn-modulecontainer,
	#jsn-pos-user1,
	#jsn-pos-user2,
	#jsn-pos-user3,
	#jsn-pos-user4,
	#jsn-pos-user5,
	#jsn-pos-user6,
	#jsn-pos-user7,
	#jsn-pos-footer,
	#jsn-pos-bottom {
		width: 100% !important;
	}
	#jsn-pos-user1 + #jsn-pos-user2,
	#jsn-pos-user3 + #jsn-pos-user4 {
		margin-top: 15px;
	}
	#jsn-pos-user5,
	#jsn-pos-user6,
	#jsn-pos-user7 {
		margin: 0;
		margin-top: 15px;
	}
	div.jsn-horizontallayout div.jsn-modulecontainer:first-child,
	#jsn-usermodules3 > div:first-child {
		margin-top: 0;
	}
	#jsn-pos-bottom {
		text-align: left;
	}
	div[class*="grid-layout"] div.grid-col {
		width: 100%;
	}
	div.grid-layout div.grid-col div.grid-col_inner {
		margin-right: 0;
		margin-left: 35px;
	}
	body.jsn-direction-rtl div.grid-layout div.grid-col div.grid-col_inner {
		margin-left: 0;
	}
	/* ============================== JOOMLA! DEFAULT EXTENSIONS ============================== */
	/* =============== JOOMLA! EXTENSIONS - COM_CONTENT =============== */
	/* ----- ARTICLE DETAILS ----- */
	p, pre, blockquote, form, dl, ul, ol, fieldset, address, table {
		word-wrap: break-word;
	}
	/* ----- SECTION / CATEGORY BLOG LAYOUT ----- */
	/* ARTICLE COLUMN CONTAINER */
	.jsn-articlecols {
		float: none;
		width: 100% !important;
	}
	.jsn-articlecols .jsn-article {
		padding: 0;
	}
	/* =============== JOOMLA! EXTENSIONS - COM_NEWSFEED =============== */
	.com-newsfeed table.jsn-infotable td.jsn-table-column-links,
	.com-newsfeed legend.hidelabeltxt {
		display: none;
	}
	.com-newsfeed div.display-limit {
		float: right;
	}
	.com-newsfeed table.category {
		width: 100%;
		border: none;
		border-collapse: collapse;
	}
	.com-newsfeed table.category thead th {
		padding: 10px;
	}
	.com-newsfeed table.category thead .item-title {
		text-ali


21.12.18、22.12.0-22.12.12 和 23.12.0-23.12.2。该漏洞易于被利用，允许通过 HTTP 网络访问的未认证攻击者破坏 Primavera P6 企业项目组合管理。成功利用此漏洞的攻击可能导致未经授权访问关键数据或完全访问所有可访问的 Primavera P6 企业项目组合管理数据，以及对部分可访问的 Primavera P6 企业项目组合管理数据进行未经授权的更新、插入或删除操作。CVSS 3.1 基本评分为 8.2（机密性和完整性影响）。CVSS 向量：(CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N)。 | [1]https://www.oracle.com/security-alerts/cpuapr2024.html |
| 43 | CVE-2024-21103 | 7.8  | HIGH | Oracle Virtualization 的 Oracle VM VirtualBox 产品（组件：Core）中存在漏洞。受影响的受支持版本为 7.0.16 之前的所有版本。此漏洞易于利用，允许具有登录权限的低特权攻击者在运行 Oracle VM VirtualBox 的基础设施上对其进行攻击。成功利用此漏洞可能导致 Oracle VM VirtualBox 被完全控制。注意：此漏洞仅影响 Linux 主机。CVSS 3.1 基本评分为 7.8（对保密性、完整性和可用性造成影响）。CVSS 向量：(CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)。 | [1]https://www.oracle.com/security-alerts/cpuapr2024.html |
| 44 | CVE-2024-21110 | 7.3  | HIGH | Oracle Virtualization 的 Oracle VM VirtualBox 产品中存在一个漏洞（组件：Core）。受影响的受支持版本为 7.0.16 之前的所有版本。该漏洞易于被拥有登录权限的低权限攻击者利用，且在运行 Oracle VM VirtualBox 的基础设施上进行攻击。成功的攻击需要除攻击者之外的其他人员进行人为交互。成功利用此漏洞可能导致 Oracle VM VirtualBox 被完全控制。CVSS 3.1 基本评分为 7.3（对机密性、完整性和可用性造成影响）。CVSS 向量：(CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H)。 | [1]https://www.oracle.com/security-alerts/cpuapr2024.html |
| 45 | CVE-2024-21111 | 7.8  | HIGH | Oracle Virtualization 的 Oracle VM VirtualBox 产品（组件：Core）存在漏洞。受影响的受支持版本为 7.0.16 之前的版本。该漏洞易于被利用，允许具有登录权限的低权限攻击者在运行 Oracle VM VirtualBox


xisting handle based on @Replaces header.
 *
 * @since New in @VERSION_1_12_4.
 *
 * @note
 * You should release the reference with nua_handle_unref() when you are
 * done with the handle.
 *
 * @sa nua_handle_make_replaces(), @Replaces, @RFC3891, nua_refer(),
 * #nua_i_refer, @ReferTo, nta_leg_by_replaces()
 */
nua_handle_t *nua_handle_by_replaces(nua_t *nua, sip_replaces_t const *r)
{
  if (nua) {
#if HAVE_OPEN_C
    struct nua_stack_handle_by_replaces_args a;
    a.retval = NULL;
    a.nua = nua;
    a.r = r;
#else
    struct nua_stack_handle_by_replaces_args a = { NULL, nua, r };
#endif

    if (su_task_execute(nua->nua_server,
			nua_stack_handle_by_replaces_call, (void *)&a,
			NULL) == 0) {
      nua_handle_t *nh = a.retval;

      if (nh && !NH_IS_DEFAULT(nh) && nh->nh_valid)
	return nua_handle_ref(nh);
    }
  }
  return NULL;
}

/** Obtain a new reference to an existing handle based on @CallID.
 *
 * @since New in @VERSION_1_12_9.
 *
 * @note
 * You should release the reference with nua_handle_unref() when you are
 * done with the handle.
 *
 * @sa nua_handle_make_replaces(), @Replaces, @RFC3891, nua_refer(),
 * #nua_i_refer, @ReferTo, nta_leg_by_replaces()
 */
nua_handle_t *nua_handle_by_call_id(nua_t *nua, const char *call_id)
{
  if (nua) {
#if HAVE_OPEN_C
    struct nua_stack_handle_by_call_id_args a;
	a.retval = NULL;
    a.nua = nua;
    a.call_id = call_id;
#else
    struct nua_stack_handle_by_call_id_args a = { NULL, nua, call_id };
#endif

    if (su_task_execute(nua->nua_server,
			nua_stack_handle_by_call_id_call, (void *)&a,
			NULL) == 0) {
      nua_handle_t *nh = a.retval;

      if (nh && !NH_IS_DEFAULT(nh) && nh->nh_valid)
	return nua_handle_ref(nh);
    }
  }
  return NULL;
}


64GTELTE{Val: 257}, 1)
	validateData(&cases.SFixed64ExGTELTE{Val: 128}, &cases.SFixed64ExGTELTE{Val: 129}, 1)
	validateData(&cases.SFixed64ExGTELTE{Val: 256}, &cases.SFixed64ExGTELTE{Val: 255}, 1)
	validateData(&cases.SFixed64Ignore{Val: 0}, &cases.SFixed64Ignore{Val: 1}, 1)
	validateData(&cases.SFixed64Ignore{Val: -129}, &cases.SFixed64Ignore{Val: 1}, 1)

	v := int64(64)
	vv := int64(65)
	validateData(&cases.Int64LTEOptional{Val: &v}, &cases.Int64LTEOptional{Val: &vv}, 1)
	validateData(&cases.Int64LTEOptional{}, &cases.Int64LTEOptional{}, 0)

	// oneofs.proto
	validateData(&cases.TestOneOfMsg{Val: true}, &cases.TestOneOfMsg{Val: false}, 1)
	validateData(&cases.OneOfNone{}, &cases.OneOfNone{}, 0)
	validateData(&cases.OneOf{O: &cases.OneOf_X{X: "foobar"}}, &cases.OneOf{O: &cases.OneOf_X{X: "barfoo"}}, 1)
	validateData(&cases.OneOf{O: &cases.OneOf_Y{Y: 1}}, &cases.OneOf{O: &cases.OneOf_Y{Y: 0}}, 1)
	validateData(&cases.OneOf{O: &cases.OneOf_Z{Z: nil}}, &cases.OneOf{}, 0)
	validateData(&cases.OneOf{O: &cases.OneOf_Z{Z: &cases.TestOneOfMsg{Val: true}}}, &cases.OneOf{O: &cases.OneOf_Z{Z: &cases.TestOneOfMsg{Val: false}}}, 1)
	validateData(&cases.OneOfRequired{O: &cases.OneOfRequired_X{X: "foobar"}}, &cases.OneOfRequired{O: nil}, 1)
	validateData(&cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_X{X: ""}}, &cases.OneOfIgnoreEmpty{O: nil}, 0)
	validateData(&cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_X{X: "foo"}}, &cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_X{X: "foobar"}}, 1)
	validateData(&cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_Y{Y: nil}}, &cases.OneOfIgnoreEmpty{O: nil}, 0)
	validateData(&cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_Y{Y: []byte("foo")}}, &cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_Y{Y: []byte("foobar")}}, 1)
	validateData(&cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_Z{Z: 0}}, &cases.OneOfIgnoreEmpty{O: nil}, 0)
	validateData(&cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_Z{Z: -128}}, &cases.OneOfIgnoreEmpty{O: &cases.OneOfIgnoreEmpty_Z{Z: 129}}, 1)

	// repeated.proto
	validateData(&cases.Embed{Val: 1}, &cases.Embed{Val: 0}, 1)
	validateData(&cases.RepeatedEmbedNone{Val: nil}, &cases.RepeatedEmbedNone{Val: []*cases.Embed{{Val: 0}}}, 1)
	validateData(&cases.RepeatedEmbedNone{Val: []*cases.Embed{{Val: 1}}}, &cases.RepeatedEmbedNone{Val: []*cases.Embed{{Val: 0}}}, 1)

	// strings.proto
	validateData(&cases.StringConst{Val: "foo"}, &cases.StringConst{Val: "bar"}, 1)
	validateData(&cases.StringIn{Val: "bar"}, &cases.StringIn{Val: "foo"}, 1)
	validateData(&cases.StringNotIn{Val: "foo"}, &cases.StringNotIn{Val: "fizz"}, 1)
	v


V       DS 0H
         B RET

RS       DS 0H
         LG 7,(2176+(((DSASZ+31)/32)*32)+24)(,4)
         LG 14,(2176+(((DSASZ+31)/32)*32)+8)(,4)
         LG 14,0(,14)           ecif->cif
         LG 9,16(,14)           cif->rtype
         LG 14,0(,9)            rtype->size
         CGIBH 14,24,RSP

* now we need to determine how to return the struct
* the rules for return types are
* integral types <= 8 bytes returned in gpr3
* floating point type returned in fpr0-fpr6 (left adjusted)
*    using as many registers as needed
*    ie. 1 for double
*        2 for long double or complex double
* structures containing exactly 2 floating point types are returned
*        in fprs 0-6 using as many as needed
* structures of size > 24 bytes
*        are returned using a pointer passed in gpr1
* structures <= 24 bytes are returned in gprs 1-3 (left adjusted)
*        size <= 8  bytes are returned in gpr3
*        size <= 16 bytes are returned in gpr2 and gpr3
*        size <= 24 bytes are returned in gpr1, gpr2 and gpr3

* currently we have
* r9 = cif->rtype
* r7 = ecif->rvalue
RSREG    DS 0H
         LLGH 11,10(,9)       rtype->type
         LA 15,SSTOR
         CFI 11,16            rtype->type == FFI_TYPE_STRUCT_FF
         BE STOREF1
         CFI 11,17            rtype->type == FFI_TYPE_STRUCT_DD
         BE STORED1
         STG  1,0(,15)
         STG  2,8(,15)
         STG  3,16(,15)
         B RSCPY

STOREF1  DS 0H
         STE 0,0(,15)
         STE 2,4(,15)
         B RSCPY

STORED1  DS 0H
         STD 0,0(,15)
         STD 2,8(,15)

* label to copy the struct to the return area
* just move one byte at a time from r15 to r7
* while r14 is non-zero
RSCPY    DS 0H
         CGIJNH 14,0,RET
         LB 1,0(,15)
         STC 1,0(,7)
         LA 15,1(,15)
         LA 7,1(,7)
         AFI 14,-1
         B RSCPY

* return struct in pointer passed as dummy first argument
* this should be the same pointer passed to ffi_call
* and should have been set up in  prep_args
* only using an explicit label for clarity
RSP      DS 0H
         B RET

RET      DS 0H
         CELQEPLG

ATABLE DC A(I)                Labels for parm types
 DC A(D)
 DC A(LD)
 DC A(UI8)
 DC A(SI8)
 DC A(UI16)
 DC A(SI16)
 DC A(UI32)
 DC A(SI64)
 DC A(PTR)
 DC A(UI64)
 DC A(FLT)
 DC A(STRCT)
 DC A(VOID)
 DC A(I)
 DC A(D)
 DC A(CPXF)
 DC A(CPXD)
I32 DC A(IGPR1)               Labels for passing INT in gpr
 DC A(IGPR2)
 DC A(IGPR3)
 DC A(IARGA)                  Label to store INT in arg area
I8 DC A(I8GPR1)               Labels for passing CHAR in gpr
 DC A(I8GPR2)
 DC A(I8GPR3)
 DC A(I8ARGA)                 Label to store CHAR in arg area
U16 DC A(U16GPR1)             Labels for passing u_SHORT in gpr
 DC A(U16GPR2)
 DC A(U16GPR3)
 DC A(U16ARGA)                Label to store u_SHORT in arg


one in the right place
and—(Frantic babbling.)

Ross: (To Chandler) All right! All right! All right! (To Joey) We are
fixing it.

(Matt starts laughing.)

David: He’s gone. He’s…

(Matt mimics Chandler.)

[Cut back to the cast and Conan.]

David: We enjoy watching each other. And I settle for watching each other’s
performance, and we like each other.

[Cut to Ross’s second wedding reception, Joey has just told him the band is ready
with Rachel looking on.]

Ross: Oh the band’s ready! And well—I-I—we gotta do what the band
says, right? I don’t care about the stinkin’ band!!

(Jennifer starts laughing.)

[Cut back to the cast and Conan.]

Conan: Okay Friends gang, thanks for doing it.

David: Well thank you so much.

Jennifer: Thank you Conan!

Matthew: Well thank for coming here, it’s good to see you.

[Cut to Central Perk, Phoebe at the mike.]

Phoebe: Thank you my babies. (Waves good-bye.)

Ending Credits

[Cut to Monica’s work kitchen, she’s on fire again and Joey is putting her
out.]

Monica: Oh what are doing?!

Joey: You’re still a tiny bit on fire there!

Monica: I think you got it!

Courtney: I’m sorry, I messed up.

Matt: I’ll do it again and again if you want.

[Cut to Monica and Chandler's, the bad desert Ross is quickly eating the mound on his
plate.]

Ross: No-no! I’ll-I’ll… (He takes too much and some falls out of
his mouth, which starts him laughing.)

David: That is too much!

(Matt grabs his plate and takes some of what’s on Ross’s plate.)

[We close with a bunch of scenes where they screw up and make weird noises. It finishes
with.]

Matthew: Let me start that again.

End

<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0">
<title>The One With The Dirty Girl</title>
<meta NAME="Template" CONTENT="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">

The One With The Dirty Girl

Written by: Scott Silveri & Shana Goldberg-Meehan

Transcribed by: Darcy & Julie Partridge


, // 25: mockgrafeas.v1.Note.deployment:type_name -> mockgrafeas.v1.DeploymentNote
	43, // 26: mockgrafeas.v1.Note.discovery:type_name -> mockgrafeas.v1.DiscoveryNote
	44, // 27: mockgrafeas.v1.Note.attestation:type_name -> mockgrafeas.v1.AttestationNote
	45, // 28: mockgrafeas.v1.Note.upgrade:type_name -> mockgrafeas.v1.UpgradeNote
	46, // 29: mockgrafeas.v1.Note.compliance:type_name -> mockgrafeas.v1.ComplianceNote
	47, // 30: mockgrafeas.v1.Note.dsse_attestation:type_name -> mockgrafeas.v1.DSSEAttestationNote
	48, // 31: mockgrafeas.v1.Note.vulnerability_assessment:type_name -> mockgrafeas.v1.VulnerabilityAssessmentNote
	49, // 32: mockgrafeas.v1.Note.sbom_reference:type_name -> mockgrafeas.v1.SBOMReferenceNote
	50, // 33: mockgrafeas.v1.Note.secret:type_name -> mockgrafeas.v1.SecretNote
	0,  // 34: mockgrafeas.v1.ListOccurrencesResponse.occurrences:type_name -> mockgrafeas.v1.Occurrence
	0,  // 35: mockgrafeas.v1.CreateOccurrenceRequest.occurrence:type_name -> mockgrafeas.v1.Occurrence
	0,  // 36: mockgrafeas.v1.UpdateOccurrenceRequest.occurrence:type_name -> mockgrafeas.v1.Occurrence
	51, // 37: mockgrafeas.v1.UpdateOccurrenceRequest.update_mask:type_name -> google.protobuf.FieldMask
	1,  // 38: mockgrafeas.v1.ListNotesResponse.notes:type_name -> mockgrafeas.v1.Note
	1,  // 39: mockgrafeas.v1.CreateNoteRequest.note:type_name -> mockgrafeas.v1.Note
	1,  // 40: mockgrafeas.v1.UpdateNoteRequest.note:type_name -> mockgrafeas.v1.Note
	51, // 41: mockgrafeas.v1.UpdateNoteRequest.update_mask:type_name -> google.protobuf.FieldMask
	0,  // 42: mockgrafeas.v1.ListNoteOccurrencesResponse.occurrences:type_name -> mockgrafeas.v1.Occurrence
	21, // 43: mockgrafeas.v1.BatchCreateNotesRequest.notes:type_name -> mockgrafeas.v1.BatchCreateNotesRequest.NotesEntry
	1,  // 44: mockgrafeas.v1.BatchCreateNotesResponse.notes:type_name -> mockgrafeas.v1.Note
	0,  // 45: mockgrafeas.v1.BatchCreateOccurrencesRequest.occurrences:type_name -> mockgrafeas.v1.Occurrence
	0,  // 46: mockgrafeas.v1.BatchCreateOccurrencesResponse.occurrences:type_name -> mockgrafeas.v1.Occurrence
	1,  // 47: mockgrafeas.v1.BatchCreateNotesRequest.NotesEntry.value:type_name -> mockgrafeas.v1.Note
	2,  // 48: mockgrafeas.v1.Grafeas.GetOccurrence:input_type -> mockgrafeas.v1.GetOccurrenceRequest
	3,  // 49: mockgrafeas.v1.Grafeas.ListOccurrences:input_type -> mockgrafeas.v1.ListOccurrencesRequest
	5,  // 50: mockgrafeas.v1.Grafeas.DeleteOccurrence:input_type -> mockgrafeas.v1.DeleteOccurrenceRequest
	6,  // 51: mockgrafeas.v1.Grafeas.CreateOccurrence:input_type -> mockgrafeas.v1.CreateOccurrenceRequest
	19, // 52: mockgrafeas.v1.Grafeas.BatchCreateOccurrences:input_type -> mock


379883 -19.8301 10.8398\nc3.98047 25.2002 34.1699 42.1201 59.8604 42.1201zM168 208c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32s32 -14.3301 32 -32s-14.3301 -32 -32 -32zM353.55 143.36c10.04 3.13965 19.3906 -5.4502 17.71 -15.3408\nc-7.92969 -47.1494 -71.3193 -80.0195 -123.26 -80.0195s-115.33 32.8701 -123.26 80.0195c-1.69043 9.9707 7.76953 18.4707 17.71 15.3408c25.9297 -8.31055 64.3994 -13.0605 105.55 -13.0605s79.6201 4.75977 105.55 13.0605zM248 440c136.97 0 248 -111.03 248 -248\ns-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z\" />\n    <glyph glyph-name=\"kiss\" unicode=\"\" horiz-adv-x=\"496\" \nd=\"M168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5\nc-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002\nc12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM248 440c137 0 248 -111 248 -248\ns-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\n\" />\n    <glyph glyph-name=\"kiss-beam\" unicode=\"\" horiz-adv-x=\"496\" \nd=\"M168 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2


/**
 *  Copyright (C) 2010-2024 The Catrobat Team
 *  (http://developer.catrobat.org/credits)
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as
 *  published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 *
 *  An additional term exception under section 7 of the GNU Affero
 *  General Public License, version 3, is available at
 *  (http://developer.catrobat.org/license_additional_term)
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see http://www.gnu.org/licenses/.
 */

#import <Foundation/Foundation.h>

@interface UIImage (Rotate)

- (UIImage *)imageRotatedByRadians:(CGFloat)radians;
- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees;
- (UIImage *)fixOrientation;
@end


func newStopFd() (stopFd, error) {
	efd, err := unix.Eventfd(0, unix.EFD_NONBLOCK)
	if err != nil {
		return stopFd{efd: -1}, fmt.Errorf("failed to create eventfd: %w", err)
	}
	return stopFd{efd: efd}, nil
}

// stop writes to the eventfd and notifies the dispatcher to stop. It does not
// block.
func (s *stopFd) stop() error {
	if s.efd == invalidfd || s.efd <= 2 {
		return nil
	}
	increment := []byte{1, 0, 0, 0, 0, 0, 0, 0}
	if n, err := unix.Write(s.efd, increment); n != len(increment) || err != nil {
		// There are two possible errors documented in eventfd(2) for writing:
		// 1. We are writing 8 bytes and not 0xffffffffffffff, thus no EINVAL.
		// 2. stop is only supposed to be called once, it can't reach the limit,
		// thus no EAGAIN.
		return fmt.Errorf("write(efd) = (%d, %s), want (%d, nil)", n, err, len(increment))
	}
	return nil
}

type fds struct {
	stopFd stopFd
	tunFd  int

	read      atomic.Int64 // number of bytes read
	written   atomic.Int64 // number of bytes written
	since     atomic.Int64 // when fd was created
	death     atomic.Int64 // age in millis
	lastRead  atomic.Int64 // last read time in millis
	lastWrite atomic.Int64 // last write time in millis

	closed atomic.Bool
	once   sync.Once // ensures that stop() is called only once
}

// Takes ownership of fd, which must be a valid TUN file descriptor.
// Never returns nil, but may return an invalid fds (with tunFd = -1).
func newTun(fd int) (*fds, error) {
	if fd == invalidfd {
		return invalidFds, nil
	}
	err := unix.SetNonblock(fd, true)
	if err != nil {
		clos(fd)
		return invalidFds, err
	}
	stopFd, err := newStopFd()
	if err != nil {
		clos(fd)
		return invalidFds, err
	}
	f := &fds{
		stopFd: stopFd,
		tunFd:  fd,
	}
	f.since.Store(time.Now().UnixMilli())
	return f, nil
}

func (f *fds) ok() bool {
	return f != nil && f.tun() != invalidfd && !f.closed.Load()
}

func (f *fds) eve() int {
	if f != nil && f.stopFd.efd > 2 {
		return f.stopFd.efd
	}
	return invalidfd
}

func (f *fds) tun() int {
	if f != nil && f.tunFd > 2 {
		return f.tunFd
	}
	return invalidfd
}

func (f *fds) stop() {
	if f.ok() {
		f.once.Do(func() {
			defer f.closed.Store(true)

			now := time.Now().UnixMilli()
			f.death.Store(now)
			age := now - f.since.Load()

			err1 := f.stopFd.stop()
			err2 := syscall.Close(f.tunFd)
			logeif(err1)("ns: dispatch: fds: stop: eve(%d) tun(%d) age(%s); errs? %v %v",
				f.stopFd.efd, f.tunFd, core.FmtMillis


块尺寸为64KB，每次I/O操作的数据量为4KB，那么一个条块可以容纳16次这样的I/O操作数据。磁盘只需要在处理这16次操作时进行较少的寻道操作，而不是频繁地在磁盘的不同位置之间切换。
   - **提高数据存储的连续性**：较大的条块尺寸使得数据在磁盘上的存储更加连续。对于事务型应用，虽然每次操作的数据量小，但多个操作的数据组合在一起可以更好地利用磁盘的连续存储空间。这种连续性有利于提高磁盘的读写性能，因为磁盘在读写连续的数据块时，数据传输速率会更高。比如，当一个事务操作需要读取多个小数据块时，如果这些数据块在磁盘上是连续存储的，磁盘的读取操作可以更高效地进行。

## 二、大数据传输（条块尺寸小些好）
1. **大数据传输的特点**
   - 大数据传输通常涉及大量数据的连续读写操作。例如，在数据中心之间的数据备份、大规模视频文件的传输等场景，每次I/O操作的数据量可能达到MB甚至GB级别。
2. **RAID 0条块尺寸小的优势**
   - **提高数据分散性**：小的条块尺寸可以让数据在多个磁盘上更均匀地分散。对于大数据传输，这意味着数据可以同时在多个磁盘上进行读写操作。由于数据被分割成较小的块，每个磁盘可以并行地处理这些小块数据，从而充分利用多个磁盘的带宽。例如，假设条块尺寸为4KB，对于一个1MB的数据块，它可以被分割成256个小的4KB块。这些小块可以同时在多个磁盘上进行读写，大大提高了数据传输的速度。
   - **更好的容错性（相对而言）**：虽然RAID 0本身没有冗余，但在大数据传输过程中，小条块尺寸可以让数据在磁盘上的分布更加分散。如果某个磁盘出现故障，虽然数据会丢失，但由于数据是分散存储的，单个磁盘故障对整个数据传输的影响相对较小。例如，对于一个1GB的数据文件，如果条块尺寸小，它被分散存储在多个磁盘上，即使一个磁盘损坏，丢失的数据只是文件的一部分，而不是整个文件。

# 二、
在一个UNIX类操作系统的文件系统中,i-结点有10个直接地址域和3个间接地址域(3级间接地址):
一个逻辑块的容量是1K字节:磁盘块指针为4个字�


': 'Opakovat ',
    'serverErrorTitle': 'Chyba serveru ',
    'serverErrorBody':
        'Počasí Pluvia nemohlo získat data. Servery OpenWeatherap mohou být dočasně offline. ',
    'networkErrorText': 'Zapněte WiFi nebo mobilní data a zkuste to znovu ',
    'gettingLocationMessage': 'Načítání umístění ... ',
    'temperature': 'Teplota ',
    'precipitation': 'Srážky ',
    'addLocation': 'Přidat umístění ',
    'pressAndHold': 'Stisknutím a podržením umístění odstraníte ',
    'searchForLocation': 'Hledat místo ',
    'tapTheSearchBar': 'Klepnutím na tlačítko Hledat nahoře najdete umístění ',
    'tapToSeeWeatherCurrent': 'Klepnutím zobrazíte počasí pro aktuální polohu ',
    'use24HourTime': 'Použít 24hodinový čas ',
    'appLanguage': 'Jazyk aplikace ',
    'advancedSettings': 'Pokročilá nastavení ',
    'defaultLocation': 'Výchozí umístění ',
    'useDefaultLocationOnStartup':
        'Při spuštění aplikace použít výchozí umístění ',
    'customAPIKeys': 'Vlastní klíč API ',
    'owmKey': 'Zadejte klíč API OpenWeather ',
    'mbKey': 'Zadejte klíč API MapBox ',
    'customKeyInfo':
        'Ponechte prázdné pro použití výchozích hodnot. Pokud jsou klíče API nesprávné, budou místo toho použity výchozí hodnoty. ',
    'thankYouForUsing': 'Děkujeme za používání Počasí Pluvia. ',
    'changelog': 'Seznam změn ',
    'getAKey': 'Zde získat klíč ',
    'getAKeyNote':
        'Poznámka: může nějakou dobu trvat, než bude váš klíč aktivován ',
    'serverErrorText':
        'Server počasí zablokoval váš požadavek. Použijte prosím vlastní klíč API. '
  },
  'da': {
    'current': 'Nuværende ',
    'forecast': 'Vejrudsigt ',
    'locations': 'Placeringer ',
    'more': 'Mere ',
    'feelsLike': 'Føles som ',
    'wind': 'Vind ',
    'sunrise': 'Solopgang ',
    'sunset': 'Solnedgang ',
    'humidity': 'Fugtighed ',
    'pressure': 'Tryk ',
    'currentLocationTitle': 'Nuværende lokation ',
    'weatherRadar': 'Vejrradar ',
    'weatherRadarAboutTitle': 'Om vejrradar ',
    'weatherRadarAboutBody':
        "Pluvia Vejret 'Vejrradar' bruger en 'Openweathap' webside. Det understøtter visning af nedbør, tryk, temperatur, vindhastighed og skyprognoser globalt. Dette kan føre til højere dataforbrug. ",
    'lastUpdatedAt': 'Sidst opdateret på ',
    'locationDisabledPrompt':
        'For Pluvia vejr for at vise vejret i din nuværende placering, aktiver placering. ',
    'darkMode': 'Mørk tilstand ',
    'useFahrenheit': 'Brug Fahrenheit. ',
    'refreshToSee': 'Opdater for at se ændringer ',
    'windSpeedUnit


using System.Collections.Generic;
using System.Linq;
using NBitcoin;
using ReactiveUI;
using WalletWasabi.Blockchain.Analysis.Clustering;
using WalletWasabi.Blockchain.TransactionBuilding;
using WalletWasabi.Blockchain.TransactionOutputs;
using WalletWasabi.WebClients.PayJoin;

namespace WalletWasabi.Fluent.ViewModels.Wallets.Send;

public partial class TransactionInfo
{
	[AutoNotify] private FeeRate _feeRate = FeeRate.Zero;
	[AutoNotify] private IEnumerable<SmartCoin> _coins = Enumerable.Empty<SmartCoin>();

	public TransactionInfo(Destination destination, int anonScoreTarget)
	{
		Destination = destination;
		PrivateCoinThreshold = anonScoreTarget;

		this.WhenAnyValue(x => x.FeeRate)
			.Subscribe(_ => OnFeeChanged());

		this.WhenAnyValue(x => x.Coins)
			.Subscribe(_ => OnCoinsChanged());
	}

	public int PrivateCoinThreshold { get; }

	public Money Amount { get; init; } = Money.Zero;

	public Destination Destination { get; init; }

	public LabelsArray Recipient { get; set; } = LabelsArray.Empty;

	public FeeRate? MaximumPossibleFeeRate { get; set; }

	public TimeSpan ConfirmationTimeSpan { get; set; }

	public IEnumerable<SmartCoin> ChangelessCoins { get; set; } = Enumerable.Empty<SmartCoin>();

	public IPayjoinClient? PayJoinClient { get; set; }

	public bool IsP