ion: SnackBarAction(
            label: 'New Tab',
            onPressed: () {
              onAdd(null);
            },
          ),
          duration: duration,
        );

  if (context.mounted) {
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }
}

void showTabSwitchMessage(
  BuildContext context, {
  String? tabName,
  void Function()? onSwitch,
}) {
  ScaffoldMessenger.of(context).clearSnackBars();

  final message = switch (tabName.whenNotEmpty) {
    String() => "New tab '$tabName' opened",
    null => 'New tab opened',
  };

  final snackBar = SnackBar(
    content: Text(message),
    action: onSwitch.mapNotNull(
      (onPressed) => SnackBarAction(label: 'Switch', onPressed: onPressed),
    ),
  );

  ScaffoldMessenger.of(context).showSnackBar(snackBar);
}

Future<void> launchUrlFeedback(
  BuildContext context,
  Uri url, {
  LaunchMode mode = LaunchMode.externalApplication,
}) async {
  if (await canLaunchUrl(url)) {
    if (!await launchUrl(url, mode: mode)) {
      if (context.mounted) {
        showErrorMessage(context, 'Could not launch URL ($url)');
      }
    }
  } else {
    if (context.mounted) {
      showErrorMessage(context, 'Can not handle "${url.scheme}"');
    }
  }
}

void showTabUndoClose(
  BuildContext context,
  VoidCallback onUndo, {
  int count = 1,
  Duration duration = const Duration(seconds: 2),
}) {
  ScaffoldMessenger.of(context).clearSnackBars();

  final snackBar = SnackBar(
    content: (count > 1)
        ? Text('$count Tabs closed')
        : const Text('Tab closed'),
    action: SnackBarAction(label: 'Undo', onPressed: onUndo),
    duration: duration,
  );

  ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'defaults.dart';

// **************************************************************************
// RiverpodGenerator
// **************************************************************************

// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning

@ProviderFor(lightSeedColorFallback)
const lightSeedColorFallbackProvider = LightSeedColorFallbackProvider._();

final class LightSeedColorFallbackProvider
    extends $FunctionalProvider<Color, Color, Color>
    with $Provider<Color> {
  const LightSeedColorFallbackProvider._()
    : super(
        from: null,
        argument: null,
        retry: null,
        name: r'lightSeedColorFallbackProvider',
        isAutoDispose: false,
        dependencies: null,
        $allTransitiveDependencies: null,
      );

  @override
  String debugGetCreateSourceHash() => _$lightSeedColorFallbackHash();

  @$internal
  @override
  $ProviderElement<Color> $createElement($ProviderPointer pointer) =>
      $ProviderElement(pointer);

  @override
  Color create(Ref ref) {
    return lightSeedColorFallback(ref);
  }

  /// {@macro riverpod.override_with_value}
  Override overrideWithValue(Color value) {
    return $ProviderOverride(
      origin: this,
      providerOverride: $SyncValueProvider<Color>(value),
    );
  }
}

String _$lightSeedColorFallbackHash() =>
    r'af151d3293d372f5df451aa8c3a75136377b6ce1';

@ProviderFor(darkSeedColorFallback)
const darkSeedColorFallbackProvider = DarkSeedColorFallbackProvider._();

final class DarkSeedColorFallbackProvider
    extends $FunctionalProvider<Color, Color, Color>
    with $Provider<Color> {


= r" Writes raw bits to the register"]
    #[inline]
    pub unsafe fn bits(&mut self, bits: u32) -> &mut Self {
        self.bits = bits;
        self
    }
    #[doc = "Bit 31 - GPIO15 interrupt direction."]
    #[inline]
    pub fn gpio15intd(&mut self) -> _GPIO15INTDW {
        _GPIO15INTDW { w: self }
    }
    #[doc = "Bits 29:30 - GPIO15 output configuration."]
    #[inline]
    pub fn gpio15outcfg(&mut self) -> _GPIO15OUTCFGW {
        _GPIO15OUTCFGW { w: self }
    }
    #[doc = "Bit 28 - GPIO15 input enable."]
    #[inline]
    pub fn gpio15incfg(&mut self) -> _GPIO15INCFGW {
        _GPIO15INCFGW { w: self }
    }
    #[doc = "Bit 27 - GPIO14 interrupt direction."]
    #[inline]
    pub fn gpio14intd(&mut self) -> _GPIO14INTDW {
        _GPIO14INTDW { w: self }
    }
    #[doc = "Bits 25:26 - GPIO14 output configuration."]
    #[inline]
    pub fn gpio14outcfg(&mut self) -> _GPIO14OUTCFGW {
        _GPIO14OUTCFGW { w: self }
    }
    #[doc = "Bit 24 - GPIO14 input enable."]
    #[inline]
    pub fn gpio14incfg(&mut self) -> _GPIO14INCFGW {
        _GPIO14INCFGW { w: self }
    }
    #[doc = "Bit 23 - GPIO13 interrupt direction."]
    #[inline]
    pub fn gpio13intd(&mut self) -> _GPIO13INTDW {
        _GPIO13INTDW { w: self }
    }
    #[doc = "Bits 21:22 - GPIO13 output configuration."]
    #[inline]
    pub fn gpio13outcfg(&mut self) -> _GPIO13OUTCFGW {
        _GPIO13OUTCFGW { w: self }
    }
    #[doc = "Bit 20 - GPIO13 input enable."]
    #[inline]
    pub fn gpio13incfg(&mut self) -> _GPIO13INCFGW {
        _GPIO13INCFGW { w: self }
    }
    #[doc = "Bit 19 - GPIO12 interrupt direction."]
    #[inline]
    pub fn gpio12intd(&mut self) -> _GPIO12INTDW {
        _GPIO12INTDW { w: self }
    }
    #[doc = "Bits 17:18 - GPIO12 output configuration."]
    #[inline]
    pub fn gpio12outcfg(&mut self) -> _GPIO12OUTCFGW {
        _GPIO12OUTCFGW { w: self }
    }
    #[doc = "Bit 16 - GPIO12 input enable."]
    #[inline]
    pub fn gpio12incfg(&mut self) -> _GPIO12INCFGW {
        _GPIO12INCFGW { w: self }
    }
    #[doc = "Bit 15 - GPIO11 interrupt direction."]
    #[inline]
    pub fn gpio11intd(&mut self) -> _GPIO11INTDW {
        _GPIO11INTDW { w: self }
    }
    #[doc = "Bits 13:14 - GPIO11 output configuration."]
    #[inline]
    pub fn gpio11outcfg(&mut self) -> _GPIO11OUTCFGW {
        _GPIO11OUTCFGW { w: self }
    }
    #[doc = "Bit 12 - GPIO11 input enable."]
    #[inline]
    pub fn gpio11incfg(&mut self) -> _GPIO11INCFGW {
        _GPIO11INCFGW { w: self }
    }
    #[doc = "Bit 11 - GPIO10 interrupt direction."]
    #[inline]
    pub fn gpio10intd(&mut self) -> _GPIO10INTDW {
        _GPIO10INTDW { w: self }
    }
    #[doc = "Bits 9:10 - GPIO10 output configuration."]
    #[


// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Threading.Tasks;
using Microsoft.DotNet.Scaffolding.Shared;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualStudio.Web.CodeGeneration;
using Microsoft.VisualStudio.Web.CodeGeneration.CommandLine;
using Microsoft.VisualStudio.Web.CodeGeneration.DotNet;

namespace Microsoft.VisualStudio.Web.CodeGenerators.Mvc.Razor
{
    [Alias("razorpage")]
    public class RazorPageGenerator : CommonGeneratorBase, ICodeGenerator
    {
        private readonly IServiceProvider _serviceProvider;
        private readonly ILogger _logger;

        public RazorPageGenerator(
            IApplicationInfo applicationInfo,
            IServiceProvider serviceProvider,
            ILogger logger)
            : base(applicationInfo)
        {
            if (applicationInfo == null)
            {
                throw new ArgumentNullException(nameof(applicationInfo));
            }

            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _serviceProvider = serviceProvider;
            _logger = logger;
        }

        public async Task GenerateCode(RazorPageGeneratorModel razorPageGeneratorModel)
        {


ar s = new Star();
            // the distribution from the center should follow a bell curve.
            double radius = random.nextGaussian()*min;
            // the angle should be random
            double angle = random.nextDouble()*Math.PI*2;

            s.pos.set(
                    Math.cos(angle)*radius,
                    Math.sin(angle)*radius);
            // the velocity should be higher in the center and lower at the edges.

            s.vel.set(s.pos.y*mul,-s.pos.x*mul);

            var v = min*4-radius;
            s.mass = Math.random()*(maxMass-v)+v;
            stars.add(s);
            // color is related to mass.  heavier stars are red and light stars are blue.
            int r = (int)(Math.min(255,Math.max(0,s.mass/maxMass*255)));
            s.c = new Color(
                    r,
                    r,
                    (int)(Math.min(255,Math.max(0,(maxMass-s.mass)/maxMass*255))));
        }
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        if(!isPaused) {
            updateEverything();
        }

        drawEverything(g);
    }

    private void updateEverything() {
        // update the star accelerations in parallel
        stars.stream().parallel().forEach(s -> {
            Vector2d delta = new Vector2d();
            s.acc.set(0, 0);
            for (Star other : stars) {
                if (s != other) {
                    delta.sub(other.pos,s.pos);
                    // F = G * m1*m2 / (r*r)
                    double r = delta.lengthSquared();
                    if (r > 0) {
                        delta.normalize();
                        delta.scale(G * s.mass * other.mass / r);
                        s.acc.add(delta);
                    }
                }
            }
        });

        double dt = 1.0/FPS;
        // move stars in parallel
        stars.stream().parallel().forEach(s -> {
            // acc is now force.  F=ma -> a=F/m
            s.vel.scaleAdd(dt / s.mass, s.acc, s.vel);
            s.pos.scaleAdd(dt, s.vel, s.pos);
        });
    }

    private void drawEverything(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;

        // Smooth rendering
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // clear screen
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0, 0, getWidth(), getHeight());
        g2d.translate( getWidth()/2, getHeight()/2);

        // draw stars
        for(Star s : stars) {
            g2d.setColor(s.c);
            int r = (int)Math.ceil(s.mass*15/maxMass);
            int r2 = r*2;
            //g2d.fillOval((int)s.pos.x-r, (int)s.pos.y-r, r2, r2);
            g2d.drawImage(starImage,(int)s.pos.x-r, (int)s.pos.y-r, r2, r2,null);
        }
        g2d.dispose();
    }

    public static void main(String[] args) {
        // create a new JFrame
        var frame = new JFrame("Show Galaxy");
        // set the size of the JFrame
        frame.setSize(800, 600);
        // add the JPanel to the JFrame
        var galaxy = new ShowGalaxy();

        JPanel container = new JPanel(new BorderLayout());
        container.add(galaxy, BorderLayout.CENTER);
        container.add(new GUI(galaxy), BorderLayout.EAST);
        frame.add(container, BorderLayout.CENTER);
        // set the JFrame to exit the application when it is closed
        frame.setDefaultClose


PLY_ID_2;
      bannerRequests[1].params.region = REGION_2;

      const requests = spec.buildRequests(bannerRequests, BIDDER_REQUEST);
      expect(requests[0]).to.have.property('url', `https://openrtb-${REGION_1}.axonix.com/supply/prebid/${SUPPLY_ID_1}`);
      expect(requests[1]).to.have.property('url', `https://openrtb-${REGION_2}.axonix.com/supply/prebid/${SUPPLY_ID_2}`);
    });

    it('creates ServerRequests pointing to default region if missing', function () {
      const bannerRequest = utils.deepClone(BANNER_REQUEST);
      delete bannerRequest.params.region;

      const requests = spec.buildRequests([bannerRequest], BIDDER_REQUEST);
      expect(requests[0]).to.have.property('url', `https://openrtb-${REGION_1}.axonix.com/supply/prebid/${SUPPLY_ID_1}`);
    });
  });

  describe('buildRequests: can handle video ad requests', function () {
    it('creates ServerRequests with the correct data', function () {
      const [request] = spec.buildRequests([VIDEO_REQUEST], BIDDER_REQUEST);

      expect(request).to.have.property('url', `https://openrtb-${REGION_1}.axonix.com/supply/prebid/${SUPPLY_ID_1}`);
      expect(request).to.have.property('method', 'POST');
      expect(request).to.have.property('data');

      const { data } = request;
      expect(data.app).to.be.undefined;

      expect(data).to.have.property('site');
      expect(data.site).to.have.property('page', 'https://www.prebid.org');

      expect(data).to.have.property('validBidRequest', VIDEO_REQUEST);
      expect(data).to.have.property('connectionType').to.exist;
      expect(data).to.have.property('effectiveType').to.exist;
      expect(data).to.have.property('devicetype', 2);
      expect(data).to.have.property('bidfloor', 0);
      expect(data).to.have.property('dnt', 0);
      expect(data).to.have.property('language').to.be.a('string');
      expect(data).to.have.property('prebidVersion').to.be.a('string');
      expect(data).to.have.property('screenHeight').to.be.a('number');
      expect(data).to.have.property('screenWidth').to.be.a('number');
      expect(data).to.have.property('tmax').to.be.a('number');
      expect(data).to.have.property('ua').to.be.a('string');
    });

    it('creates ServerRequests pointing to the correct region and endpoint if it changes', function () {
      const videoRequests = [utils.deepClone(VIDEO_REQUEST), utils.deepClone(VIDEO_REQUEST)];
      videoRequests[0].params.endpoint = 'https://the.url';
      videoRequests[1].params.endpoint = 'https://the.other.url';

      const requests = spec.buildRequests(videoRequests, BIDDER_REQUEST);

      requests.forEach((request, index) => {
        expect(request).to.have.property('url', videoRequests[index].params.endpoint);
      });
    });

    it('creates ServerRequests pointing to default endpoint if missing', function () {
      const videoRequests = [utils.deepClone(VIDEO_REQUEST), utils.deepClone(VIDEO_REQUEST)];
      videoRequests[1].params.supplyId = SUPPLY_ID_2;
      videoRequests[1].params.region = REGION_2;

      const requests = spec.buildRequ


-748D, U+7491-7492, U+7494-7497, U+7499, U+749B, U+74A1-74A2, U+74A4-74A5, U+74AB-74AD, U+74AF, U+74B3-74B5, U+74B7, U+74BB-74BC, U+74BE, U+74C0, U+74C2, U+74C4, U+74C6-74C7, U+74C9, U+74CB, U+74CD-74CE, U+74D0, U+74D3, U+74D6-74D7, U+74DD, U+74E1;
}
@font-face {
  font-family: "IBM Plex Sans SC";
  font-style: normal;
  font-weight: 300;
  src: local("IBM Plex Sans SC Light"), local("IBMPlexSansSC-Light"), url("https://cdn.jsdelivr.net/npm/@ibm/plex-sans-sc@1.1.0/fonts/split/woff2/hinted/IBMPlexSansSC-Light-144.woff2") format("woff2");
  unicode-range: U+7225-7227, U+7229, U+722F, U+7233-7234, U+7243-7245, U+7249-724A, U+724F-7251, U+7253-7255, U+7257, U+725E, U+7263, U+7268, U+726B, U+726D, U+7270, U+7276-7277, U+727C, U+727F, U+7283, U+7285-7286, U+7288-7289, U+728B-728C, U+728E, U+7290-7291, U+7293-729A, U+729C-729E, U+72A1-72A6, U+72A8-72AB, U+72BF, U+72C7, U+72C9-72CB, U+72CF, U+72D1, U+72D3-72D5, U+72D8, U+72DA, U+72DC, U+72E2-72E4, U+72E7, U+72EA-72EB, U+72F5, U+72FE-72FF, U+7305-7306, U+7308-7309, U+730D, U+730F-7312, U+7318-731A, U+7323-7324, U+7326, U+7328, U+732F, U+7332, U+7338, U+733A-733C, U+7341, U+7343, U+7346-7349, U+734B-734C, U+7351, U+7353-7354, U+7356, U+7358, U+735A-735E, U+7361, U+7364, U+7366-7367, U+7369-736A;
}
@font-face {
  font-family: "IBM Plex Sans SC";
  font-style: normal;
  font-weight: 300;
  src: local("IBM Plex Sans SC Light"), local("IBMPlexSansSC-Light"), url("https://cdn.jsdelivr.net/npm/@ibm/plex-sans-sc@1.1.0/fonts/split/woff2/hinted/IBMPlexSansSC-Light-145.woff2") format("woff2");
  unicode-range: U+7133-7135, U+7137-713B, U+713D-7141, U+7143, U+7148, U+714D, U+714F, U+7151, U+7153-7154, U+7157-7158, U+715B, U+715D, U+715F-


ansi-blue: #54aeff;--color-checks-ansi-blue-bright: #80ccff;--color-checks-ansi-magenta: #c297ff;--color-checks-ansi-magenta-bright: #d8b9ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #24292f;--color-project-sidebar-bg: #ffffff;--color-project-gradient-in: #ffffff;--color-project-gradient-out: rgba(255,255,255,0);--color-mktg-btn-bg: #1b1f23;--color-mktg-btn-shadow-outline: rgb(0 0 0 / 15%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(0 0 0 / 15%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 3px 2px rgba(0, 0, 0, 0.07), 0 7px 5px rgba(0, 0, 0, 0.04), 0 12px 10px rgba(0, 0, 0, 0.03), 0 22px 18px rgba(0, 0, 0, 0.03), 0 42px 33px rgba(0, 0, 0, 0.02), 0 100px 80px rgba(0, 0, 0, 0.02);--color-mktg-btn-shadow-hover-muted: rgb(0 0 0 / 70%) 0 0 0 2px inset;--color-control-border-color-emphasis: #858F99;--color-avatar-bg: #ffffff;--color-avatar-border: rgba(27,31,36,0.15);--color-avatar-stack-fade: #afb8c1;--color-avatar-stack-fade-more: #d0d7de;--color-avatar-child-shadow: 0 0 0 2px rgba(255,255,255,0.8);--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: rgba(0,0,0,0);--color-select-menu-tap-highlight: rgba(175,184,193,0.5);--color-select-menu-tap-focus-bg: #b6e3ff;--color-overlay-shadow: 0 1px 3px rgba(27,31,36,0.12), 0 8px 24px rgba(66,74,83,0.12);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #24292f;--color-header-divider: #57606a;--color-header-logo: #ffffff;--color-header-search-bg: #24292f;--color-header-search-border: #57606a;--color-sidenav-selected-bg: #ffffff;--color-menu-bg-active: rgba(0,0,0,0);--color-input-disabled-bg: rgba(175,184,193,0.2);--color-timeline-badge-bg: #eaeef2;--color-ansi-black: #24292f;--color-ansi-black-bright: #57606a;--color-ansi-white: #6e7781;--color-ansi-white-bright: #8c959f;--color-ansi-gray: #6e7781;--color-ansi-red: #cf222e;--color-ansi-red-bright: #a40e26;--color-ansi-green: #0550ae;--color-ansi-green-bright: #0969da;--color-ansi-yellow: #4d2d00;--color-ansi-yellow-bright: #633c01;--color-ansi-blue: #0969da;--color-ansi-blue-bright: #218bff;--color-ansi-magenta: #8250df;--color-ansi-magenta-bright: #a475f9;--color-ansi-cyan: #1b7c83;--color-ansi-cyan-bright: #3192aa;--color-


6f':'\u23ba',  // o -> scan1
      '\x70':'\u23bb',  // p -> scan3
      '\x71':'\u2500',  // q -> scan5
      '\x72':'\u23bc',  // r -> scan7
      '\x73':'\u23bd',  // s -> scan9
      '\x74':'\u251c',  // t -> left-tee
      '\x75':'\u2524',  // u -> right-tee
      '\x76':'\u2534',  // v -> bottom-tee
      '\x77':'\u252c',  // w -> top-tee
      '\x78':'\u2502',  // x -> vertical-line
      '\x79':'\u2264',  // y -> less-equal
      '\x7a':'\u2265',  // z -> greater-equal
      '\x7b':'\u03c0',  // { -> pi
      '\x7c':'\u2260',  // | -> not-equal
      '\x7d':'\u00a3',  // } -> british-pound
      '\x7e':'\u00b7',  // ~ -> dot
    });

/**
 * British character map.
 * http://vt100.net/docs/vt220-rm/table2-5.html
 */
hterm.VT.CharacterMaps.DefaultMaps['A'] = new hterm.VT.CharacterMap(
    'british', {
      '\x23': '\u00a3',  // # -> british-pound
    });

/**
 * US ASCII map, no changes.
 */
hterm.VT.CharacterMaps.DefaultMaps['B'] = new hterm.VT.CharacterMap(
    'us', null);

/**
 * Dutch character map.
 * http://vt100.net/docs/vt220-rm/table2-6.html
 */
hterm.VT.CharacterMaps.DefaultMaps['4'] = new hterm.VT.CharacterMap(
    'dutch', {
      '\x23': '\u00a3',  // # -> british-pound

      '\x40': '\u00be',  // @ -> 3/4

      '\x5b': '\u0132',  // [ -> 'ij' ligature (xterm goes with \u00ff?)
      '\x5c': '\u00bd',  // \ -> 1/2
      '\x5d': '\u007c',  // ] -> vertical bar

      '\x7b': '\u00a8',  // { -> two dots
      '\x7c': '\u0066',  // | -> f
      '\x7d': '\u00bc',  // } -> 1/4
      '\x7e': '\u00b4',  // ~ -> acute
    });

/**
 * Finnish character map.
 * http://vt100.net/docs/vt220-rm/table2-7.html
 */
hterm.VT.CharacterMaps.DefaultMaps['C'] =
hterm.VT.CharacterMaps.DefaultMaps['5'] = new hterm.VT.CharacterMap(
    'finnish', {
      '\x5b': '\u00c4',  // [ -> 'A' umlaut
      '\x5c': '\u00d6',  // \ -> 'O' umlaut
      '\x5d': '\u00c5',  // ] -> 'A' ring
      '\x5e': '\u00dc',  // ~ -> 'u' umlaut

      '\x60': '\u00e9',  // ` -> 'e' acute

      '\x7b': '\u00e4',  // { -> 'a' umlaut
      '\x7c': '\u00f6',  // | -> 'o' umlaut
      '\x7d': '\u00e5',  // } -> 'a' ring
      '\x7e': '\u00fc',  // ~ -> 'u' umlaut
    });

/**
 * French character map.
 * http://vt100.net/docs/vt220-rm/table2-8.html
 */
hter


from app.shared.config.endpoints.tags import EndpointTag

class RouterSetup:
    class Router:
        def __init__(self, prefix: str, tag: str):
            self.prefix = prefix
            self.tag = tag

    sample_router_v0 = Router(prefix='/sample/V0',
                              tag=EndpointTag.sample_V0)


			      tro.tracr=1+ixo;
			      tro.tracl=1+ixoffset+nxoffset*ixo;
			      tro.cdp=gd->fxo+ixo*gd->dxo;
			      tro.cdpt=1+ixoffset;

			      /*write out*/
			      fputtr(outfp,&tro);
			}
		  }
	    }
      }

      fprintf(gd->jpfp,"\n");
      fprintf(gd->jpfp,"Output done\n");
      fflush(gd->jpfp);

      efclose(gd->jpfp);
      efclose(outfp);

      free6ushort(tbuf);
      free5uchar(cbuf);
      free5uchar(rbuf);
      free6float(ttab);
      free5float(ctab);
      free5float(rtab);
      free5float(mig);
      su2cs->setEOF();
      pthread_exit(NULL);
      return retPtr;
}
catch( cseis_geolib::csException& exc ) {
  su2cs->setError("%s",exc.getMessage());
  pthread_exit(NULL);
  return retPtr;
}
}

void mig3d( struct GD *gd, float *trace, float *trf, float ***mig,
      unsigned short ******tbuf, unsigned char  *****cbuf,
      unsigned char  *****rbuf)
/******************************************************************
mig3d - migrate a single trace
*******************************************************************
Function prototype:
void mig3d( struct GD *gd, float *trace, float *trf, float ***mig,
      unsigned short ******tbuf, unsigned char  *****cbuf,
      unsigned char  *****rbuf);
*******************************************************************
Inputs:
struct *gd   grid information
float *trace trace data
float *trf   integrated trace
unsigned short *******tbuf traveltime buffer
unsigned char  *****cbuf  cosine buffer
unsigned char  *****rbuf  path buffer
Outputs:
float ***mig migrated section

*******************************************************************
Notes:

For formulations:
		    |    ps  + pg    |
	h(y,xi)=det | d(ps+pg)/d xi1 |
		    | d(ps+pg)/d xi2 |

	       = 2 cos(theta)^2 z (rs+rg)(rs^2+rg^2)/(c^3 rs^3 rg^3);

	a(y,xi)=A(x,xs)A(x,xg)
	       =1/(16 pi^2 rs rg);

	|\Delta_y phi|= 2cos(theta)/c(y);

	here y is (y_1,y_2,y_3) meaning the outputing points.

	The correct correction factor is:

	| h |/a /|\Delta_y phi| =
	16 pi^2 cos(theta) y_3 (r_s+rg)(rs^2+rg^2)/(v^2 rs^2 rg^2);

*******************************************************************
Author: CWP: Zhaobo Meng, Sept 1997
*******************************************************************/

{
      int nyof;	        /*starting index for y scope: 0<=nyof<nyo*/
      int nyoe;	        /*ending index for y scope: 0<=nyoe<nyo*/
      int nxof;	        /*starting index for x scope: 0<=nxof<nx */
      int nxoe;	        /*ending index for x scope: 0<=nxoe<nx */
      int iyo;	        /*index for nyof and nyoe*/
      int ixo;	        /*index for nxof and nxoe*/
      float ym;	        /*y midpoint position*/
      float xm;


53 GiB, 15597568000 bytes, 30464000 sectors
Disk model: Cruzer Blade
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x436cedd0

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sdb1  *        2048 30398463 30396416 14.5G  7 HPFS/NTFS/exFAT
/dev/sdb2       30398464 30463999    65536   32M ef EFI (FAT-12/16/32)
```

现在打开你的文件管理器，把 ISO 文件复制到第一个分区。不用担心你分不清楚哪个是第一个分区，你的文件管理器将只显示第一个分区。

![将 ISO 文件复制到用 Ventoy 创建的 USB 启动盘上][4]

你甚至可以为不同的 ISO 文件类型创建子文件夹。例如，你可以为存储 Linux ISO 文件创建一个子文件夹，为 BSD ISO 文件创建一个子文件夹，为 Windows ISO 文件创建一个子文件夹。

Ventoy 将扫描整个 U 盘，为所有可用的 ISO 文件创建菜单项，并自动将它们添加到 Ventoy 的主启动菜单中。

如果你喜欢用命令行方式复制 ISO 文件，请到你保存 ISO 文件的地方，用 `rsync` 程序从命令行复制所有 ISO 文件，如下所示：

```
$ rsync *.iso /media/$USER/ventoy/ --progress -ah
```

请注意，在某些 Linux 发行版中，U 盘可能被挂载在 `/run/media/` 位置。

大功告成！我们刚刚用 Ventoy 创建了多重引导的 U 盘。

用新制作的可引导 U 盘启动你的系统，你会对 Ventoy 的启动菜单感到满意：

![Ventoy 的多重启动菜单][5]

选择你想启动的操作系统，并按下回车键加载它！

下面是用 Ventoy 创建的多重启动 U 盘的简短视频演示：

![][7]

很酷，不是吗？确实如此！

如果你想在 Oracle Virtualbox 中用 U 盘启动，请参考以下指南：

> **[如何在 Linux 中从 U 盘 启动 Virtualbox 的虚拟系统？][8]**

#### 2. 使用 Ventoy 图形化界面创建多重启动的 U 盘

最初，Ventoy 在 Linux 平台上没有任何图形化的用户界面。我们在 Linux 中只能使用Ventoy 的命令行模式创建 USB 启动盘。

幸运的是，Ventoy 从 1.0.36 版开始提供


mension(self, checklist_mapping):
        """Test that point distribution matches expected allocations."""
        dimension_totals = {}

        for item in checklist_mapping['checklist_items']:
            dimension = item['dimension']
            if dimension not in dimension_totals:
                dimension_totals[dimension] = 0
            dimension_totals[dimension] += item['max_points']

        # Expected distribution from ai-code-review-judgement.md
        expected_totals = {
            'code_quality': 40,
            'testing': 35,
            'documentation': 25
        }

        for dimension, expected in expected_totals.items():
            actual = dimension_totals.get(dimension, 0)
            assert actual == expected, f"Dimension {dimension}: expected {expected} points, got {actual}"

    def test_checklist_loader_functionality(self):
        """Test that ChecklistLoader works with the checklist mapping."""
        from src.metrics.checklist_loader import ChecklistLoader

        # ChecklistLoader should successfully load the configuration
        loader = ChecklistLoader()
        assert loader.config_data is not None
        assert 'checklist_items' in loader.config_data
        assert 'language_adaptations' in loader.config_data

        # Should have the expected number of checklist items
        assert len(loader.checklist_items_config) == 11

    def test_scoring_mapper_functionality(self):
        """Test that ScoringMapper can be instantiated."""
        from src.metrics.scoring_mapper import ScoringMapper

        # ScoringMapper should instantiate without errors
        mapper = ScoringMapper()
        assert mapper is not None


.m19.1.1.2">𝐶</ci><apply id="S2.SS1.p1.19.m19.1.1.3.cmml" xref="S2.SS1.p1.19.m19.1.1.3"><times id="S2.SS1.p1.19.m19.1.1.3.1.cmml" xref="S2.SS1.p1.19.m19.1.1.3.1"></times><ci id="S2.SS1.p1.19.m19.1.1.3.2.cmml" xref="S2.SS1.p1.19.m19.1.1.3.2">𝑖</ci><ci id="S2.SS1.p1.19.m19.1.1.3.3.cmml" xref="S2.SS1.p1.19.m19.1.1.3.3">𝑗</ci></apply></apply></annotation-xml><annotation encoding="application/x-tex" id="S2.SS1.p1.19.m19.1c">C_{ij}</annotation><annotation encoding="application/x-llamapun" id="S2.SS1.p1.19.m19.1d">italic_C start_POSTSUBSCRIPT italic_i italic_j end_POSTSUBSCRIPT</annotation></semantics></math> (which is the same as the censoring time for CS data) is independent of the continuous-time multistate process <math alttext="\{S_{ij}(t):t\geq 0\}" class="ltx_Math" display="inline" id="S2.SS1.p1.20.m20.3"><semantics id="S2.SS1.p1.20.m20.3a"><mrow id="S2.SS1.p1.20.m20.3.3.2" xref="S2.SS1.p1.20.m20.3.3.3.cmml"><mo id="S2.SS1.p1.20.m20.3.3.2.3" stretchy="false" xref="S2.SS1.p1.20.m20.3.3.3.1.cmml">{</mo><mrow id="S2.SS1.p1.20.m20.2.2.1.1" xref="S2.SS1.p1.20.m20.2.2.1.1.cmml"><msub id="S2.SS1.p1.20.m20.2.2.1.1.2" xref="S2.SS1.p1.20.m20.2.2.1.1.2.cmml"><mi id="S2.SS1.p1.20.m20.2.2.1.1.2.2" xref="S2.SS1.p1.20.m20.2.2.1.1.2.2.cmml">S</mi><mrow id="S2.SS1.p1.20.m20.2.2.1.1.2.3" xref="S2.SS1.p1.20.m20.2.2.1.1.2.3.cmml"><mi id="S2.SS1.p1.20.m20.2.2.1.1.2.3.2" xref="S2.SS1.p1.20.m20.2.2.1.1.2.3.2.cmml">i</mi><mo id="S2.SS1.p1.20.m20.2.2.1.1.2.3.1" xref="S2.SS1.p1.20.m20.2.2.1.1.2.3.1.cmml"></mo><mi id="S2.SS1.p1.20.m20.2.


Observable.new(function(sub)
		local maid = Maid.new()

		maid:GiveTask(binderGroup.BinderAdded:Connect(function(binder)
			sub:Fire(binder)
		end))

		for _, binder in binderGroup:GetBinders() do
			sub:Fire(binder)
		end

		return maid
	end)
end

--[=[
	Observes all classes in a given binder group.
	@param binderGroup BinderGroup<T>
	@return Observable<Brio<T>>
]=]
function RxBinderGroupUtils.observeAllClassesBrio(binderGroup)
	assert(type(binderGroup) == "table", "Bad binderGroup")

	return RxBinderGroupUtils.observeBinders(binderGroup):Pipe({
		Rx.flatMap(RxBinderUtils.observeAllBrio) :: any,
	}) :: any
end

return RxBinderGroupUtils


local table = table
local tableInsert = table.insert
local tableSort = table.sort

XFubenBossSingleConfigs = XFubenBossSingleConfigs or {}

-- 宿舍激活状态
XFubenBossSingleConfigs.Platform = {
    Win  = 0,
    Android = 1,
    IOS = 2,
    All = 3
}

local TABLE_BOSS_SINGLE_GRADE = "Share/Fuben/BossSingle/BossSingleGrade.tab"
local TABLE_RABK_REWARD = "Share/Fuben/BossSingle/BossSingleRankReward.tab"
local TABLE_SCORE_REWARD = "Share/Fuben/BossSingle/BossSingleScoreReward.tab"
local TABLE_SECTION = "Share/Fuben/BossSingle/BossSingleSection.tab"
local TABLE_STAGE = "Share/Fuben/BossSingle/BossSingleStage.tab"
local TABLE_SOCRE_ROLE = "Share/Fuben/BossSingle/BossSingleScoreRule.tab"
local TABLE_GROUP = "Share/Fuben/BossSingle/BossSingleGroup.tab"

-- templates
local BossSingleGradeCfg = {}
local RankRewardCfg = {}    -- key = levelType, value = {cfg}
local ScoreRewardCfg = {}   -- key = levelType, value = {cfg}
local BossSectionCfg = {}
local BossStageCfg = {}
local BossSectionInfo = {}
local RankRole = {}
local BossGourpCfg = {}

XFubenBossSingleConfigs.AUTO_FIGHT_COUNT = CS.XGame.Config:GetInt("BossSingleAutoFightCount")
XFubenBossSingleConfigs.AUTO_FIGHT_REBATE = CS.XGame.Config:GetInt("BossSingleAutoFightRebate")

function XFubenBossSingleConfigs.Init()
    BossSingleGradeCfg = XTableManager.ReadByIntKey(TABLE_BOSS_SINGLE_GRADE, XTable.XTableBossSingleGrade, "LevelType")
    local rankRewardCfg = XTableManager.ReadByIntKey(TABLE_RABK_REWARD, XTable.XTableBossSingleRankReward, "Id")
    local scoreRewardCfg = XTableManager.ReadByIntKey(TABLE_SCORE_REWARD, XTable.XTableBossSingleScoreReward, "Id")
    BossSectionCfg = XTableManager.ReadByIntKey(TABLE_SECTION, XTable.XTableBossSingleSection, "Id")
    BossStageCfg = XTableManager.ReadByIntKey(TABLE_STAGE, XTable.XTableBossSingleStage, "StageId")
    BossGourpCfg = XTableManager.ReadByIntKey(TABLE_GROUP, XTable.XTableBossSingleGroup, "Id")
    RankRole = XTableManager.ReadByIntKey(TABLE_SOCRE_ROLE, XTable.XTableBossSingleScoreRule, "Id")

    -- 讨伐值奖励排序
    for id, cfg in pairs(scoreRewardCfg) do
        if ScoreRewardCfg[cfg.LevelType] then


36% 0 0;--nc:86.736% 0 0;--inc:89.0403% 0.062643 264.052021;--suc:90.395% 0.035372 142.495339;--wac:19.3597% 0.042201 109.769232;--erc:12.5591% 0.051537 29.233885;--border-btn:1px;--tab-border:1px;--p:33.6799% 0 0;--s:33.6799% 0 0;--a:33.6799% 0 0;--b1:0% 0 0;--b2:19.1251% 0 0;--b3:26.8618% 0 0;--bc:87.6096% 0 0;--n:33.6799% 0 0;--in:45.2014% 0.313214 264.052021;--su:51.9752% 0.176858 142.495339;--wa:96.7983% 0.211006 109.769232;--er:62.7955% 0.257683 29.233885;--rounded-box:0;--rounded-btn:0;--rounded-badge:0;--animation-btn:0;--animation-input:0;--btn-focus-scale:1;--tab-radius:0}[data-theme=luxury]{color-scheme:dark;--pc:20% 0 0;--sc:85.5163% 0.012821 261.069149;--ac:87.3349% 0.010348 338.82597;--inc:15.8122% 0.024356 237.133883;--suc:15.6239% 0.038579 132.154381;--wac:17.2255% 0.027305 102.89115;--erc:14.3506% 0.035271 22.568916;--rounded-box:1rem;--rounded-btn:0.5rem;--rounded-badge:1.9rem;--animation-btn:0.25s;--animation-input:.2s;--btn-focus-scale:0.95;--border-btn:1px;--tab-border:1px;--tab-radius:0.5rem;--p:100% 0 0;--s:27.5815% 0.064106 261.069149;--a:36.6744% 0.051741 338.82597;--n:24.27% 0.057015 59.825019;--nc:93.2033% 0.089631 90.861683;--b1:14.0765% 0.004386 285.822869;--b2:20.2191% 0.004211 308.22937;--b3:29.8961% 0.003818 308.318612;--bc:75.6879% 0.123666 76.890484;--in:79.0612% 0.121778 237.133883;--su:78.1197% 0.192894 132.154381;--wa:86.1274% 0.136524 102.89115;--er:71.7531% 0.176357 22.568916}:root:has(input.theme-controller[value=luxury]:checked){color-scheme:dark;--pc:20% 0 0;--sc:85.5163% 0.012821 261.069149;--ac:87.3349% 0.010348 338.82597;--inc:15.8122% 0.024356 237.133883;--suc:15.6239% 0.038579 132.154381;--wac:17.2255% 0.027305 102.89115;--erc:14.3506% 0.035271 22.568916;--rounded-box:1rem;--rounded-btn:0.5rem;--rounded-badge:1.9rem;--animation-btn:0.25s;--animation-input:.2s;--btn-focus-scale:0.95;--border-btn:1px;--tab-border:1px;--tab-radius:0.5rem;--p:100% 0 0;--s:27.5815% 0.064106


ENTRY_0108
---

## -description

The **D3D12DDI_NODE_LIST_ENTRY_0108** structure is used as part of a linked list to represent individual nodes in a work graph. Each node represents a unit of work or operation that can be executed on the GPU.

## -struct-fields

### -field pNode

Pointer to a [**D3D12DDI_NODE_0108**](ns-d3d12umddi-d3d12ddi_node_0108.md) structure that describes the node.

### -field pNext

Pointer to the next node in the list.

## -remarks

This linked list structure enables the definition of complex execution flows where each node can depend on the completion of others, forming a directed acyclic graph (DAG) of operations.

For more information, see [Work graphs](/windows-hardware/drivers/display/work-graphs).

## -see-also

[**D3D12DDI_WORK_GRAPH_DESC_0108**](ns-d3d12umddi-d3d12ddi_work_graph_desc_0108.md)

[**PFND3D12DDI_ADD_TO_STATE_OBJECT_0072**](nc-d3d12umddi-pfnd3d12ddi_add_to_state_object_0072.md)

[**PFND3D12DDI_CREATE_STATE_OBJECT_0054**](nc-d3d12umddi-pfnd3d12ddi_create_state_object_0054.md)

[**PFND3D12DDI_DISPATCH_GRAPH_0108**](nc-d3d12umddi-pfnd3d12ddi_dispatch_graph_0108.md)
---
UID: NF:certenc.ICertEncodeCRLDistInfo.Reset
title: ICertEncodeCRLDistInfo::Reset (certenc.h)
description: Resets a certificate revocation list (CRL) distribution information array to a specified number of distribution point structures.
helpviewer_keywords: ["CCertEncodeCRLDistInfo object [Security]","Reset method","ICertEncodeCRLDistInfo interface [Security]","Reset method","ICertEncodeCRLDistInfo.Reset","ICertEncodeCRLDistInfo::Reset","Reset","Reset method [Security]","Reset method [Security]","CCertEncodeCRLDistInfo object","Reset method [Security]","ICertEncodeCRLDistInfo interface","_certsrv_icertencodecrldistinfo_reset","certenc/ICertEncodeCRLDistInfo::Reset","security.icertencodecrldistinfo_reset"]
old-location: security\icertencodecrldistinfo_reset.htm
tech.root: security
ms.assetid: 899de888-918f-4202-a324-0e603eba2324
ms.date: 12/05/2018
ms.keywords: CCertEncodeCRLDistInfo object [Security],Reset method, ICertEncodeCRLDistInfo interface [Security],Reset method, ICertEncodeCRLDistInfo.Reset, ICertEncodeCRLDistInfo::Reset, Reset, Reset method [Security], Reset method [Security],CCertEncodeCRLDistInfo object, Reset method [Security],ICertEncodeCRLDistInfo interface, _certsrv_icertencodecrldistinfo_reset, certenc/ICertEncodeCRLDistInfo::Reset, security.icertencodecrldistinfo_reset
req.header: certenc.h
req.include-header: Certsrv.h
req.target-type: Windows
req.target-min-winverclnt: None supported
req.target-min-winversvr: Windows Server 2003 [desktop apps only]
req.kmdf-ver:
req.umdf-ver:
req.ddi-compliance:
req.unicode-ansi:
req.idl:
req.max-support:
req.namespace:
req.assembly:
req.type-library:
req.lib: Certidl.lib
req.dll: Certenc.dll
req.irql:
targetos: Windows
req.typenames:
req.redist:
ms.custom: 19H1
f1_keywords:
 - ICertEncodeCRLDistInfo::Reset
 - certenc/ICertEncodeCRLDistInfo::Reset
dev_langs:
 - c++
topic_type:
 - APIRef
 - kbSyntax
api_type:
 - COM
api_location:
 - Certenc.dll
ap


urce, Func<int, bool> predicate)
        {
            // Arrange
            var wrapped = (ReadOnlySpan<int>)source.AsSpan();
            var expected = source
                .Any(predicate);

            // Act
            var result = wrapped.AsValueEnumerable()
                .Any(predicate);

            // Assert
            _ = result.Must()
                .BeEqualTo(expected);
        }

        [Theory]
        [MemberData(nameof(TestData.PredicateAtEmpty), MemberType = typeof(TestData))]
        [MemberData(nameof(TestData.PredicateAtSingle), MemberType = typeof(TestData))]
        [MemberData(nameof(TestData.PredicateAtMultiple), MemberType = typeof(TestData))]
        public void Any_PredicateAt_With_ValidData_Must_Succeed(int[] source, Func<int, int, bool> predicate)
        {
            // Arrange
            var wrapped = (ReadOnlySpan<int>)source.AsSpan();
            var expected = source
                .Where(predicate).Count() != 0;

            // Act
            var result = wrapped.AsValueEnumerable()
                .Any(predicate);

            // Assert
            _ = result.Must()
                .BeEqualTo(expected);
        }
    }
}


(0x%03x) at 0x%08lx\n",
		inf->name, fsr, addr);

	info.si_signo = inf->sig;
	info.si_errno = 0;
	info.si_code  = inf->code;
	info.si_addr  = (void __user *)addr;
	arm_notify_die("", regs, &info, fsr, 0);
}

static struct fsr_info ifsr_info[] = {
	{ do_bad,		SIGBUS,  0,		"unknown 0"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 1"			   },
	{ do_bad,		SIGBUS,  0,		"debug event"			   },
	{ do_bad,		SIGSEGV, SEGV_ACCERR,	"section access flag fault"	   },
	{ do_bad,		SIGBUS,  0,		"unknown 4"			   },
	{ do_translation_fault,	SIGSEGV, SEGV_MAPERR,	"section translation fault"	   },
	{ do_bad,		SIGSEGV, SEGV_ACCERR,	"page access flag fault"	   },
	{ do_page_fault,	SIGSEGV, SEGV_MAPERR,	"page translation fault"	   },
	{ do_bad,		SIGBUS,	 0,		"external abort on non-linefetch"  },
	{ do_bad,		SIGSEGV, SEGV_ACCERR,	"section domain fault"		   },
	{ do_bad,		SIGBUS,  0,		"unknown 10"			   },
	{ do_bad,		SIGSEGV, SEGV_ACCERR,	"page domain fault"		   },
	{ do_bad,		SIGBUS,	 0,		"external abort on translation"	   },
	{ do_sect_fault,	SIGSEGV, SEGV_ACCERR,	"section permission fault"	   },
	{ do_bad,		SIGBUS,	 0,		"external abort on translation"	   },
	{ do_page_fault,	SIGSEGV, SEGV_ACCERR,	"page permission fault"		   },
	{ do_bad,		SIGBUS,  0,		"unknown 16"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 17"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 18"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 19"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 20"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 21"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 22"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 23"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 24"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 25"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 26"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 27"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 28"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 29"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 30"			   },
	{ do_bad,		SIGBUS,  0,		"unknown 31"			   },
};

asmlinkage void __exception
do_PrefetchAbort(unsigned long addr, unsigned int ifsr, struct pt_regs *regs)
{
	const struct fsr_info *inf = ifsr_info + fsr_fs(ifsr);
	struct siginfo info;

	if (!inf->fn(addr, ifsr | FSR_LNX_PF, regs))
		return;

	printk(KERN_ALERT "Unhandled prefetch abort: %s (0x%03x) at 0x%08lx\n",
		inf->name, ifsr, addr);

	info.si_signo = inf->sig;
	info.si_errno = 0;
	info.si_code  = inf->code;
	info.si_addr  = (void __user *)addr;
	arm_notify_die("", regs, &info, ifsr, 0);
}


    }

    updateProducto = (producto:Producto) => {
        this.getProductos().forEach(prod => {
            if(prod.id === producto.id) {
                prod.title = producto.title;
                prod.price = producto.price;
                prod.thumbnail = producto.thumbnail;
            }
        })
    }

    deleteProducto = (id:number) => this.productos = this.getProductos().filter(producto => producto.id !== id);

    findProducto = (id:number) => this.getProductos().find(producto => producto.id === id)
}import { ContentDelivery, Taxonomy, ComponentTypes } from '@episerver/spa-core'
/**
 * Teaser Block
 *
 * Image block with overlay for text
 *
 * @GUID eb67a99a-e239-41b8-9c59-20eaa5936047
 */
export default interface TeaserBlockData extends Taxonomy.IContent {
    /**
     * Categories
     *
     * Categories associated with this content
     */
    categories: ContentDelivery.ContentReferenceListProperty

    /**
     * Padding
     *
     * No description available
     */
    padding: ContentDelivery.StringProperty

    /**
     * Margin
     *
     * No description available
     */
    margin: ContentDelivery.StringProperty

    /**
     * Background color
     *
     * No description available
     */
    backgroundColor: ContentDelivery.StringProperty

    /**
     * Block opacity (0 to 1)
     *
     * No description available
     */
    blockOpacity: ContentDelivery.NumberProperty

    /**
     * Heading text
     *
     * No description available
     */
    heading: ContentDelivery.StringProperty

    /**
     * Heading size
     *
     * No description available
     */
    headingSize: ContentDelivery.NumberProperty

    /**
     * Heading style
     *
     * No description available
     */
    headingStyle: ContentDelivery.StringProperty

    /**
     * Heading color
     *
     * No description available
     */
    headingColor: ContentDelivery.StringProperty

    /**
     * Description
     *
     * No description available
     */
    description: ContentDelivery.StringProperty

    /**
     * Link
     *
     * No description available
     */
    link: ContentDelivery.ContentReferenceProperty

    /**
     * Text
     *
     * No description available
     */
    text: ContentDelivery.StringProperty

    /**
     * Image
     *
     * No description available
     */
    image: ContentDelivery.ContentReferenceProperty

    /**
     * Image size (%)
     *
     * No description available
     */
    imageSize: ContentDelivery.NumberProperty

    /**
     * Second Image
     *
     * No description available
     */
    secondImage: ContentDelivery.ContentReferenceProperty

    /**
     * Image size (%)
     *
     * No description available
     */
    secondImageSize: ContentDelivery.NumberProperty

    /**
     * Text color
     *
     * No description available
     */
    textColor: ContentDelivery.StringProperty

    /**
     * Height
     *
     * No description available
     */
    height: ContentDelivery.StringProperty

}

/**
 * Convenience interface for componentDidUpdate & componentDidMount methods.
 */
export interface TeaserBlockProps extends ComponentTypes.AbstractComponentProps<TeaserBlockData> {}

export class TeaserBlockType extends Taxonomy.AbstractIContent<TeaserBlockData> implements TeaserBlock


   {{0x7c3acd42,0x7bcf4e2a,0x246c928a,0x6d439867}},	//   putr, socu, _těm_, _gcna,
   {{0x63a2829b,0x855784de,0xb5fb4e86,0x98480081}},	//   khon, _חשוב_, _aráp, мята_,
   {{0x1b1900c8,0x27e6814a,0x7e6d8390,0xab5b02d0}},	//   _থাকে_, _jhon_, _šapi, ylüy,
   {{0x7f4d00f1,0x63a2803d,0x6567022c,0x27e682f7}},	// [3f90] rfaq, dhon, _pajh, _mhon_,
   {{0xd9e306b7,0xaad28105,0xdb0b8216,0x995400e1}},	//   _गठित_, _तड़क, rigí, _päť_,
   {{0x6567022c,0x27e68bb1,0x7c28ce87,0xddc2866f}},	//   _vajh, _ohon_, nsdr, _spoś,
   {{0xa3a98063,0x2b44802a,0xd6d00019,0x63a2ce88}},	//   गों_, _ccmc_, اقے_, ghon,
   {{0x6b8d4e89,0xdcf881d0,0xf54e8129,0x7d0ac4f2}},	//   _moag, _pově, _rụng_, _offs,
   {{0xa3e60fd5,0x2b44808e,0x2bb8826c,0x6845bc3d}},	//   _बीन_, _ecmc_, dčcu_, енка,
   {{0x27e68014,0x200102f1,0x442a0bfd,0x00000000}},	//   _bhon_, _juhi_, _gvb_, --,
   {{0xd0f80bea,0x7afbce8a,0x9e65a240,0x2bbb056b}},	//   ומות_, _ugut, евид, _उदगा,
   {{0xa3cc81fe,0xb8d6816f,0xa3be816f,0xea0080ff}},	//   रकर_, _चे_, ीकर_, _đầm_,
   {{0x2121008e,0x4c8586e9,0x89388dca,0x27e68362}},	//   _nehh_, елов, _опус_, _ehon_,
   {{0xe572093f,0x3f158009,0x33200722,0x6e3b82ec}},	//   אַר_, _здес, _peix_, suub,
   {{0xfe71815b,0x27f94e8b,0xf1bf0118,0xcf2780d7}},	//   _مدت_, _nisn_, usán_, _آراي,
   {{0x27edce8c,0xc33282f6,0x661d01c0,0x998401d0}},	//   mmen_, נוך_, _nwsk, émů_,
   {{0xc2128451,0x6e298234,0x20010420,0x74ca8a27}},	//   רהם_, mseb, _buhi_, _सुकृ,
   {{0xddc40289,0xa3c1ce8d,0x212102f7,0x9f5e82d6}},	//   jviš, ुवा_, _dehh_, _butè_,
   {{0x27ed8205,0x6f0983ac,0x442a05db,


voidrice](https://www.github.com/Lukesmithxyz/voidrice)!
---
jupytext:
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.12
    jupytext_version: 1.9.1
kernelspec:
  display_name: Python 3
  language: python
  name: python3
---

```{code-cell}
:tags: [remove-cell]

import msprime
import numpy as np
import io
from IPython.display import SVG
from matplotlib import pyplot as plt
from matplotlib_inline.backend_inline import set_matplotlib_formats

set_matplotlib_formats("svg")
```

(sec_rate_maps)=
# Rate Maps

It is often useful to express a variable rate of some sort along the chromosome.
For example, most organisms have mutation rates and recombination rates which vary
depending on genomic position. Rates of this sort can be stored as an instance
of a {class}`.RateMap`, and then passed as a parameter to the relevant `msprime`
method. For instance, {func}`.sim_ancestry` accepts a {class}`.RateMap`
for the {ref}`recombination_rate<sec_ancestry_recombination>`
parameter and {func}`.sim_mutations` accepts a {class}`.RateMap`
for the {ref}`rate<sec_mutations_rate>` parameter.

A rate map is defined as a set of constant rates which apply piecewise
over contiguous regions of the genome.
For example, here we create a simple rate map over a 30kb genome:

```{code-cell}
rate_map = msprime.RateMap(
    position=[0, 4000, 9000, 11000, 20000, 30000],
    rate=[0, 0.1, 0.6, 0.2, 0.1]
)
rate_map
```
See the {ref}`sec_rate_maps_basics` section for details on these columns.
We can see how these rates vary along the genome by plotting:

```{code-cell}
:tags: [hide-input]
plt.figure(figsize=(10, 4))
plt.stairs(rate_map.rate, rate_map.position)
plt.title("Example RateMap with 5 rates, and a hotspot around position 10000")
plt.xlabel("Genome position")
plt.ylabel("Rate")
plt.xlim(0, rate_map.sequence_length)
plt.show()
```

---

(sec_rate_maps_quickref)=

## Quick reference

{class}`.RateMap`
: Represent the varying rate of processes along the genome as a piecewise function.

**Creating rate maps**

{meth}`.RateMap.uniform`
: Create a RateMap with a single rate over the entire chromosome

{meth}`.RateMap.read_hapmap`
: Read in a RateMap from a file in "HapMap" format (common in recombination maps)

{meth}`.RateMap.slice`
: Create a new RateMap by slicing out a portion of an existing RateMap

**Computing rates**

{attr}`.RateMap.mean_rate`
: The weighted average rate

{attr}`.RateMap.total_mass`
: The cumulative sum of rates over the entire map

{meth}`.RateMap.get_rate`
: Compute rate at a set of positions

{meth}`.RateMap.get_cumulative_mass`
: Compute the cumulative rate at a set of positions

(sec_rate_maps_basics)=
## Working with RateMaps

In this section we illustrate the ways in which we can interact
with a {class}`.RateMap` object. Throughout we'll use the example
map from the introduction, defined over a 30kb genome:

```{code-cell}
rate_map = msprime.RateMap(
    position=[0, 4000, 9000, 11000, 20000, 30000],
    rate=[0, 0.1, 0.6, 0.2, 0.1]
)
rate_map
```

:::{seealso}
See the {ref}`sec_rate_maps_creating` section for different ways of
creating {class}`.RateMap` instances with various properties.
:::

To create the {class}`.RateMap` instance we called the constructor
with two


e"));
		hid_t ctype = H5Tcreate(H5T_COMPOUND, msize);
		handleError((int)ctype, QStringLiteral("H5Tcreate"));
		m_status = H5Tinsert(ctype, H5Tget_member_name(tid, m), 0, mtype);
		handleError(m_status, QStringLiteral("H5Tinsert"));

		QStringList mdataString;
		if (H5Tequal(mtype, H5T_STD_I8LE) || H5Tequal(mtype, H5T_STD_I8BE))
			mdataString = readHDF5Data1D<qint8>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
		else if (H5Tequal(mtype, H5T_NATIVE_CHAR)) {
			switch (sizeof(H5T_NATIVE_CHAR)) {
			case 1:
				mdataString = readHDF5Data1D<qint8>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			case 2:
				mdataString = readHDF5Data1D<qint16>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			case 4:
				mdataString = readHDF5Data1D<qint32>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			case 8:
				mdataString = readHDF5Data1D<qint64>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			}
		} else if (H5Tequal(mtype, H5T_STD_U8LE) || H5Tequal(mtype, H5T_STD_U8BE))
			mdataString = readHDF5Data1D<uint8_t>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
		else if (H5Tequal(mtype, H5T_NATIVE_UCHAR)) {
			switch (sizeof(H5T_NATIVE_UCHAR)) {
			case 1:
				mdataString = readHDF5Data1D<uint8_t>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			case 2:
				mdataString = readHDF5Data1D<uint16_t>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			case 4:
				mdataString = readHDF5Data1D<uint32_t>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			case 8:
				mdataString = readHDF5Data1D<uint64_t>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
				break;
			}
		} else if (H5Tequal(mtype, H5T_STD_I16LE) || H5Tequal(mtype, H5T_STD_I16BE) || H5Tequal(mtype, H5T_NATIVE_SHORT))
			mdataString = readHDF5Data1D<short>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer[m]);
		else if (H5Tequal(mtype, H5T_STD_U16LE) || H5Tequal(mtype, H5T_STD_U16BE) || H5Tequal(mtype, H5T_NATIVE_SHORT))
			mdataString = readHDF5Data1D<unsigned short>(dataset, H5Tget_native_type(ctype, H5T_DIR_DEFAULT), rows, lines, dataContainer


// SPDX-License-Identifier: GPL-2.0

/*
 * cros_ec_lid_angle - Driver for CrOS EC lid angle sensor.
 *
 * Copyright 2018 Google, Inc
 *
 * This driver uses the cros-ec interface to communicate with the Chrome OS
 * EC about counter sensors. Counters are presented through
 * iio sysfs.
 */

#include <linux/delay.h>
#include <linux/device.h>
#include <linux/iio/buffer.h>
#include <linux/iio/common/cros_ec_sensors_core.h>
#include <linux/iio/iio.h>
#include <linux/iio/kfifo_buf.h>
#include <linux/iio/trigger.h>
#include <linux/iio/triggered_buffer.h>
#include <linux/iio/trigger_consumer.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_data/cros_ec_commands.h>
#include <linux/platform_device.h>
#include <linux/slab.h>

#define DRV_NAME "cros-ec-lid-angle"

/*
 * One channel for the lid angle, the other for timestamp.
 */
static const struct iio_chan_spec cros_ec_lid_angle_channels[] = {
	{
		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
		.scan_type.realbits = CROS_EC_SENSOR_BITS,
		.scan_type.storagebits = CROS_EC_SENSOR_BITS,
		.scan_type.sign = 'u',
		.type = IIO_ANGL
	},
	IIO_CHAN_SOFT_TIMESTAMP(1)
};

/* State data for ec_sensors iio driver. */
struct cros_ec_lid_angle_state {
	/* Shared by all sensors */
	struct cros_ec_sensors_core_state core;
};

static int cros_ec_sensors_read_lid_angle(struct iio_dev *indio_dev,
					  unsigned long scan_mask, s16 *data)
{
	struct cros_ec_sensors_core_state *st = iio_priv(indio_dev);
	int ret;

	st->param.cmd = MOTIONSENSE_CMD_LID_ANGLE;
	ret = cros_ec_motion_send_host_cmd(st, sizeof(st->resp->lid_angle));
	if (ret) {
		dev_warn(&indio_dev->dev, "Unable to read lid angle\n");
		return ret;
	}

	*data = st->resp->lid_angle.value;
	return 0;
}

static int cros_ec_lid_angle_read(struct iio_dev *indio_dev,
				    struct iio_chan_spec const *chan,
				    int *val, int *val2, long mask)
{
	struct cros_ec_lid_angle_state *st = iio_priv(indio_dev);
	s16 data;
	int ret;

	mutex_lock(&st->core.cmd_lock);
	ret = cros_ec_sensors_read_lid_angle(indio_dev, 1, &data);
	if (ret == 0) {
		*val = data;
		ret = IIO_VAL_INT;
	}
	mutex_unlock(&st->core.cmd_lock);
	return ret;
}

static const struct iio_info cros_ec_lid_angle_info = {
	.read_raw = &cros_ec_lid_angle_read,
};

static int cros_ec_lid_angle_probe(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
	struct iio_dev *indio_dev;
	struct cros_ec_lid_angle_state *state;
	int ret;

	indio_dev = devm_iio_device_alloc(dev, sizeof(*state));
	if (!indio_dev)
		return -ENOMEM;

	ret = cros_ec_sensors_core_init(pdev, indio_dev, false, NULL);
	if (ret)
		return ret;

	indio_dev->info = &cros_ec_lid_angle_info;
	state = iio_priv(indio_dev);
	indio_dev->channels = cros_ec_lid_angle_channels;
	indio_dev->num_channels = ARRAY_SIZE(cros_ec_lid_angle_channels);

	state->core.read_ec_sensors_data = cros_ec_sensors_read_lid_angle;

	ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
			cros_ec_sensors_capture, NULL);
	if (ret)
		return ret;

	return cros_ec_sensors_core_register(dev, indio_dev, NULL);
}

static const struct platform_device_id cros_ec_lid_angle_ids[] = {
	{
		.name = DRV_NAME,
	},
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(platform, cros_ec_lid_angle_ids);

static struct platform_driver cros_ec_lid_angle_platform_driver = {
	.driver = {
		.name	= DRV_NAME,
	},
	.probe		= cros_ec_lid_angle_probe,
	.id_table	= cros_ec_lid_angle_ids,
};
module_platform_driver(cros_ec_lid_angle_platform_driver);

MODULE_DESCRIPTION("ChromeOS EC driver for reporting convertible lid angle.");
MODULE_LICENSE("GPL v2");


local spy = require "luassert.spy"
local configs = require "lspconfig.configs"
local servers = require "nvim-lsp-installer.servers"

describe("ensure_installed", function()
    it(
        "should install servers",
        async_test(function()
            local server1_installer_spy = spy.new()
            local server2_installer_spy = spy.new()
            local server1 = ServerGenerator {
                name = "ensure_installed1",
                installer = function()
                    server1_installer_spy()
                end,
            }
            local server2 = ServerGenerator {
                name = "ensure_installed2",


Type = 6
	// Comma-separated list of the strings in a SqlFlagType enum.
	SqlFlagType_REPEATED_STRING SqlFlagType = 7
)

// Enum value maps for SqlFlagType.
var (
	SqlFlagType_name = map[int32]string{
		0: "SQL_FLAG_TYPE_UNSPECIFIED",
		1: "BOOLEAN",
		2: "STRING",
		3: "INTEGER",
		4: "NONE",
		5: "MYSQL_TIMEZONE_OFFSET",
		6: "FLOAT",
		7: "REPEATED_STRING",
	}
	SqlFlagType_value = map[string]int32{
		"SQL_FLAG_TYPE_UNSPECIFIED": 0,
		"BOOLEAN":                   1,
		"STRING":                    2,
		"INTEGER":                   3,
		"NONE":                      4,
		"MYSQL_TIMEZONE_OFFSET":     5,
		"FLOAT":                     6,
		"REPEATED_STRING":           7,
	}
)

func (x SqlFlagType) Enum() *SqlFlagType {
	p := new(SqlFlagType)
	*p = x
	return p
}

func (x SqlFlagType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SqlFlagType) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_sql_v1beta4_cloud_sql_resources_proto_enumTypes[14].Descriptor()
}

func (SqlFlagType) Type() protoreflect.EnumType {
	return &file_google_cloud_sql_v1beta4_cloud_sql_resources_proto_enumTypes[14]
}

func (x SqlFlagType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SqlFlagType.Descriptor instead.
func (SqlFlagType) EnumDescriptor() ([]byte, []int) {
	return file_google_cloud_sql_v1beta4_cloud_sql_resources_proto_rawDescGZIP(), []int{14}
}

type ApiWarning_SqlApiWarningCode int32

const (
	// An unknown or unset warning type from Cloud SQL API.
	ApiWarning_SQL_API_WARNING_CODE_UNSPECIFIED ApiWarning_SqlApiWarningCode = 0
	// Warning when one or more regions are not reachable.  The returned result
	// set may be incomplete.
	ApiWarning_REGION_UNREACHABLE ApiWarning_SqlApiWarningCode = 1
)

// Enum value maps for ApiWarning_SqlApiWarningCode.
var (
	ApiWarning_SqlApiWarningCode_name = map[int32]string{
		0: "SQL_API_WARNING_CODE_UNSPECIFIED",
		1: "REGION_UNREACHABLE",
	}
	ApiWarning_SqlApiWarningCode_value = map[string]int32{
		"SQL_API_WARNING_CODE_UNSPECIFIED": 0,
		"REGION_UNREACHABLE":               1,
	}
)

func (x ApiWarning_SqlApiWarningCode) Enum() *ApiWarning_SqlApiWarningCode {
	p := new(ApiWarning_SqlApiWarningCode)
	*p = x
	return p
}

func (x ApiWarning_SqlApiWarningCode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ApiWarning_SqlApiWarningCode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_sql_v1beta4_cloud_sql_resources_proto_enumTypes[15].Descriptor()
}

func (ApiWarning_SqlApiWarningCode) Type() protoreflect.EnumType {
	return &file_google_cloud_sql_v1beta4_cloud_sql_resources_proto_enumTypes[15]
}

func (x ApiWarning_SqlApiWarningCode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ApiWarning_SqlApiWarningCode.Descriptor instead.
func (ApiWarning_SqlApiWarningCode) EnumDescriptor() ([]byte, []int) {
	return file_google_cloud_sql_v1beta4_cloud_sql_resources


.133-0.133 0.267-0.133 0.4s0 0.267 0.133 0.4l3.333 3.333zM18.533 20.533c0.133 0.133 0.267 0.133 0.4 0.133 0.267 0 0.533-0.267 0.533-0.533 0-0.133 0-0.267-0.133-0.4l-3.067-2.933 3.067-2.933c0.133-0.133 0.133-0.267 0.133-0.4 0-0.267-0.267-0.533-0.533-0.533-0.133 0-0.267 0-0.4 0.133l-3.333 3.333c-0.133 0.133-0.133 0.267-0.133 0.4s0 0.267 0.133 0.4l3.333 3.333z'/></svg>") no-repeat left -11px top -13px;

	--S-topBar-on:url("data:image/svg+xml;utf8,<svg fill='rgb(235, 87, 87)' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M21.067 10.667h-1.867c-0.133 0-0.133 0-0.267 0h-3.733c-0.133 0-0.133 0-0.267 0h-4c-0.8 0-1.6 0.8-1.6 1.6v10c0 0.933 0.8 1.733 1.6 1.733h10c0.933 0 1.6-0.8 1.6-1.6v-10.133c0.133-0.8-0.667-1.6-1.467-1.6zM15.333 12h2.4l-1.067 1.6h-2.4l1.067-1.6zM10.667 12.267c0-0.133 0.133-0.267 0.267-0.267h2.8l-1.067 1.6h-2v-1.333zM21.333 22.4c0 0.133-0.133 0.267-0.267 0.267h-10.133c-0.133 0-0.267-0.133-0.267-0.267v-7.333h10.667v7.333zM21.333 13.6h-3.067l1.067-1.6h1.6c0.267 0 0.4 0.133 0.4 0.267 0 0 0 1.333 0 1.333z'/></svg>") no-repeat left 0px top -2px;
	--S-topBar-off:url("data:image/svg+xml;utf8,<svg fill='rgb(55, 53, 47)' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M21.067 10.667h-1.867c-0.133 0-0.133 0-0.267 0h-3.733c-0.133 0-0.133 0-0.267 0h-4c-0.8 0-1.6 0.8-1.6 1.6v10c0 0.933 0.8 1.733 1.6 1.733h10c0.933 0 1.6-0.8 1.6-1.6v-10.133c0.133-0.8-0.667-1.6-1.467-1.6zM15.333 12h2.4l-1.067 1.6h-2.4l1.067-1.6zM10.667 12.267c0-0.133 0.133-0.267 0.267-0.267h2.8l-1.067 1.6h-2v-1.333zM21.333 22.4c0 0.133-0.133 0.267-0.267 0.267h-10.133c


`会被解析为`eslint-config-airbnb`。
            2. 可以是基于配置文件的绝对或相对路径。e.g. `"./node_modules/coding-standard/eslintDefaults.js"`、`require.resolve('仓库名/导出的文件路径')`。
            3. `eslint:recommended`或`eslint:all`。
        3. `plugins: []`添加扩展功能的npm包

            1. 可以省略包名中的`eslint-plugin-`前缀，e.g. `react`是`eslint-plugin-react`的缩写。
            2. 插件作用

                1. 自定义规则，以验证你的代码是否符合某个期望，以及如果不符合该期望该怎么做。
                2. 自定义配置。
                3. 自定义环境。
                4. 自定义处理器，从其他类型的文件中提取JS代码，或在提示前对代码进行预处理。
        4. `overrides: []`针对glob模式进行精细化配置，匹配的文件和规则优先级高于其他配置，overrides后面的项优先级更高

            1. 必须包含`files`字段。
            2. glob在项目级配置中是相对于当前配置文件，在`--config`命令行配置中相对于命令执行目录。
        5. `env: { 环境名 或 缩写插件名/插件自定义的环境名: true/false, }`是否开启环境提供预设的全局变量

            `browser`、`node`、`commonjs`、`shared-node-browser`、`es6`、`es2016~es2024`、`worker`、`amd`、`mocha`、`jasmine`、`jest`、`phantomjs`、`protractor`、`qunit`、`jquery`、`prototypejs`、`shelljs`、`meteor`、`mongo`、`applescript`、`nashorn`、`serviceworker`、`atomtest`、`embertest`、`webextensions`、`greasemonkey`
        6. `globals: { 全局变量名: "writable或readonly或off" }`
        7. `rules: { 规则名 或 缩写插件名/插件自定义的规则名: 值 或 [ 值, 额外选项 ] }`

            "off"===0，"warn"===1，"error"===2（触发时退出代码为1）
        8. `noInlineConfig: true/false`是否禁用所有内联配置注释
        9. `reportUnusedDisableDirectives: true/false`报告不需要的eslint-disable内置注释
        10. `parserOptions`指定解析器选项

            >设置解析器选项有助于 ESLint 确定解析错误是什么。所有的语言选项默认为 `false`。

            1. `.ecmaVersion: 3~15或"latest"`指定要使用的ECMAScript语法的版本
            1. `.sourceType: "script或module"`
            1. `.allowReserved: true/false`允许使用保留字作为标识符
            1. `.ecmaFeatures`想使用哪些额外的语言特性的对象

                1.


ount:  math.NewInt(20230000),
	},
	{
		Address: "elys1fq7vr623h07la8vk3jpxrnsqw4myul0f84xmnf",
		Amount:  math.NewInt(20230000),
	},
	{
		Address: "elys1a8pzmrxm2ph5cpue30putsc9pp5xla278c2wuj",
		Amount:  math.NewInt(20230000),
	},
	{
		Address: "elys1znwj766fkuxcje3qlgdwze04cp5mll4u6q9v2m",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1nflmlfnhza6xr4tncnx5k9vgtgvjkvvt0yqlpu",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys15h2lpysmlrsu052camh64x8g0k23e47g5043jv",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1chf4gpsp3k08r27w0674uwvvaztt2txmxywntg",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1kqx8f04v9d6zgzwfz6arvettax3pz4ewndkny3",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1r74s3zzye0ukwt04eveump6kuftm6c7fnrd8c5",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys12gkhm2kxpe9w9452z0ry0qkf8peejvpva9yv0l",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1yfrnmaq9q7z9532dnm4fyd5zp5z2pydken7e5x",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys129u9yne2zsrrxlztnwhv5jwpmnurn2sjh9z0rf",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1z26guyz2mjr5sa8ap9tvvs3f8dcu3hyuajw0tt",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys18nafhwxxqrxhnrf4n9yc2gek762p48hpjp8xcp",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1hj0r9z6plc3fj6ph78zy03j9fer96xaklgmzy7",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1vmrufwxxyytlnwkz4cmmscq4cllf96tdpwy5mj",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1g8652xl5kdeevc4eaepqgw76pdrz0f92tg9w3u",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1d00z4v2unkhvqwnm9c38hec6radvcmpjzz0quu",
		Amount:  math.NewInt(20240000),
	},
	{
		Address: "elys1xumhalcph6mxkucfq6apqwhj8wl4jj5c2kk0ht",
		Amount:  math.NewInt(20250000),
	},
	{


tchs a word form an address.
;
; Stack:
;   addr -- w
defcode w@, fetchword, 0
        pop ebx
        xor eax, eax
        mov ax, [ebx]
        push eax
        next

; function: c@c! (ccopy)
;   Copy a byte from an address to another and increments both addresses.
;
; Stack:
;   &src &dst -- (&src+1) (&dst+1)
defcode c@c!, ccopy, 0
        mov ebx, [esp + 4]  	;movl 4(%esp),%ebx	// source address
        mov al, [ebx]    		;movb (%ebx),%al		// get source character
        pop edi       			;pop %edi		// destination address
        stosb          			;stosb			// copy to destination
        push edi    			;push %edi		// increment destination address
        inc dword [esp + 4]     ;incl 4(%esp)		// increment source address
        next

; function: cmove
;   Block copy.
;
; Stack:
;   &s &d n --
;
; Params:
;   &s - Source Address
;   &d - Destination Address
;   n  - Number of bytes to copy
defcode cmove, cmove, 0
        mov edx, esi
        pop ecx
        pop edi
        pop esi
        rep movsb
        mov esi, edx
        next

; function:  >R (tor)
;
; Stack:
;   --
defcode >r, tor, 0
        pop eax
        pushrsp eax
        next

; function: R> (fromr)
;
; Stack:
;   --
defcode r>, fromr, 0
        poprsp eax
        push eax
        next

; function: rsp@ (rspfetch)
;
; Stack:
;   --
defcode rsp@, rspfetch, 0
        push ebp
        next

; function: rsp! (rspstore)
;   Pops the return stack and trow away.
;
; Stack:
;   --
defcode rsp!, rspstore, 0
        pop ebp
        next

; function: rdrop
;
; Stack:
;   --
defcode rdrop, rdrop, 0
        add ebp, 4
        next

; Branching

; function: branch
;   Unconditional relative branch.
;
; The next codeword is a literal which indicate how many bytes (positive
; or negative) it is going to jump. So, to jump four word ahead, the literal
; must be 8*4=32.
;
; Stack:
;   --
defcode branch, branch, 0
        add esi, [esi]
        next

; function: 0branch (zbranch)
;   branch if zero.
;
; The next codeword is a literal which indicate how many bytes (positive
; or negative) it is going to jump. So, to jump four word ahead, the literal
; must be 8*4=32.
;
; Stack:
;   n --
defcode 0branch, zbranch, 0
        pop eax
        test eax, eax
        jz code_branch
        lodsd
        next

; Data stack manipulation

; function: dsp@ (dspfetch)
;
; Stack:
;   --
defcode dsp@, dspfetch, 0
        mov eax, esp
        push eax
        next

; function: dsp! (dspstore)
;
; Stack:
;   --
defcode dsp!, dspstore, 0
        pop esp
        next

; function: shl
;   Shift to the left
;
; Stack:
;   n1 n2 -- n1 << n2
defcode shl, shl, 0
        pop ecx
        pop eax
        shl eax, cl
        push e


	bne lbl_801E90A8
/* 801E9050 001E4CB0  40 86 00 58 */	bne cr1, lbl_801E90A8
lbl_801E9054:
/* 801E9054 001E4CB4  81 2D A3 D8 */	lwz r9, render_context_ptr-_SDA_BASE_(r13)
/* 801E9058 001E4CB8  38 00 00 01 */	li r0, 1
/* 801E905C 001E4CBC  55 06 25 36 */	rlwinm r6, r8, 4, 0x14, 0x1b
/* 801E9060 001E4CC0  38 A0 00 07 */	li r5, 7
/* 801E9064 001E4CC4  80 E9 16 38 */	lwz r7, 0x1638(r9)
/* 801E9068 001E4CC8  38 80 00 00 */	li r4, 0
/* 801E906C 001E4CCC  7C 00 40 30 */	slw r0, r0, r8
/* 801E9070 001E4CD0  7C C7 32 14 */	add r6, r7, r6
/* 801E9074 001E4CD4  90 A6 04 44 */	stw r5, 0x444(r6)
/* 801E9078 001E4CD8  90 A6 04 48 */	stw r5, 0x448(r6)
/* 801E907C 001E4CDC  90 A6 04 4C */	stw r5, 0x44c(r6)
/* 801E9080 001E4CE0  90 86 04 50 */	stw r4, 0x450(r6)
/* 801E9084 001E4CE4  80 A9 16 38 */	lwz r5, 0x1638(r9)
/* 801E9088 001E4CE8  80 85 00 30 */	lwz r4, 0x30(r5)
/* 801E908C 001E4CEC  7C 80 03 78 */	or r0, r4, r0
/* 801E9090 001E4CF0  90 05 00 30 */	stw r0, 0x30(r5)
/* 801E9094 001E4CF4  80 89 16 38 */	lwz r4, 0x1638(r9)
/* 801E9098 001E4CF8  80 04 00 00 */	lwz r0, 0(r4)
/* 801E909C 001E4CFC  60 00 00 08 */	ori r0, r0, 8
/* 801E90A0 001E4D00  90 04 00 00 */	stw r0, 0(r4)
/* 801E90A4 001E4D04  48 00 00 54 */	b lbl_801E90F8
lbl_801E90A8:
/* 801E90A8 001E4D08  81 2D A3 D8 */	lwz r9, render_context_ptr-_SDA_BASE_(r13)
/* 801E90AC 001E4D0C  38 00 00 01 */	li r0, 1
/* 801E90B0 001E4D10  55 06 25 36 */	rlwinm r6, r8, 4, 0x14, 0x1b
/* 801E90B4 001E4D14  38 A0 00 07 */	li r5, 7
/* 801E90B8 001E4D18  80 E9 16 38 */	lwz r7, 0x1638(r9)
/* 801E90BC 001E4D1C  38 80 00 04 */	li r4, 4
/* 801E90C0 001E4D20  7C 00 40 30 */	slw r0, r0, r8
/* 801E90C4 001E4D24  7C C7 32 14 */	add r6, r7, r6
/* 801E90C8 001E4D28  90 A6 04 44 */	stw r5, 0x


 nR_alloc * sizeof(region));
			 if (!R) goto bad;
		    }
		    R[nR] = heap_pop(&regions);
		    for (j = 0; j < fdim; ++j) ee[j].err -= R[nR].ee[j].err;
		    if (cut_region(R+nR, R+nR+1)) goto bad;
		    numEval += r->num_points * 2;
		    nR += 2;
		    if (converged(fdim, ee, reqAbsError, reqRelError, norm))
			 break; /* other regions have small errs */
	       } while (regions.n > 0 && (numEval < maxEval || !maxEval));
	       if (eval_regions(nR, R, f, fdata, r)
		   || heap_push_many(&regions, nR, R))
		    goto bad;
	  }
	  else { /* minimize number of function evaluations */
	       R[0] = heap_pop(&regions); /* get worst region */
	       if (cut_region(R, R+1)
		   || eval_regions(2, R, f, fdata, r)
		   || heap_push_many(&regions, 2, R))
		    goto bad;
	       numEval += r->num_points * 2;
	  }
     }

     /* re-sum integral and errors */
     for (j = 0; j < fdim; ++j) val[j] = err[j] = 0;
     for (i = 0; i < regions.n; ++i) {
	  for (j = 0; j < fdim; ++j) {
	       val[j] += regions.items[i].ee[j].val;
	       err[j] += regions.items[i].ee[j].err;
	  }
	  destroy_region(&regions.items[i]);
     }

     /* printf("regions.nalloc = %d\n", regions.nalloc); */
     free(ee);
     heap_free(&regions);
     free(R);
     return SUCCESS;

bad:
     free(ee);
     heap_free(&regions);
     free(R);
     return FAILURE;
}

static int cubature(unsigned fdim, integrand_v f, void *fdata,
		    unsigned dim, const double *xmin, const double *xmax,
		    unsigned int maxEval, double reqAbsError, double reqRelError,
		    error_norm norm,
		    double *val, double *err, int parallel)
{
     rule *r;
     hypercube h;
     int status;
     unsigned i;

     if (fdim == 0) /* nothing to do */ return SUCCESS;
     if (dim == 0) { /* trivial integration */
	  if (f(0, 1, xmin, fdata, fdim, val)) return FAILURE;
	  for (i = 0; i < fdim; ++i) err[i] = 0;
	  return SUCCESS;
     }
     r = dim == 1 ? make_rule15gauss(dim, fdim)
 	          : make_rule75genzmalik(dim, fdim);
     if (!r) {
	  for (i = 0; i < fdim; ++i) {
	       val[i] = 0;
	       err[i] = HUGE_VAL;
	  }
	  return FAILURE;
     }
     h = make_hypercube_range(dim, xmin, xmax);
     status = !h.data ? FAILURE
	  : rulecubature(r, fdim, f, fdata, &h,
				maxEval, reqAbsError, reqRelError, norm,
				val, err, parallel);
     destroy_hypercube(&h);
     destroy_rule(r);
     return status;
}

int hcubature_v(unsigned fdim, integrand_v f, void *fdata,
                unsigned dim, const double *xmin, const double *xmax,
                unsigned int maxEval, double reqAbsError, double reqRelError,
                error_norm norm,
                double *val, double *err)
{
     return cubature(fdim, f, fdata, dim, xmin, xmax,
		     maxEval, reqAbsError, reqRelError, norm, val, err,
             0 /*disable evaluating multiple regions at once, as this deteriorates accuracy*/);
}

/* vectorized wrapper around non-vecto


 licensed under the GNU General Public License v2.
// Full text may be retrieved at http://www.gnu.org/licenses/gpl-2.0.txt
//---------------------------------------------------------------------------

namespace Gurux.DLMS.Internal
{
    /// <summary>
    /// CoAP success enumerates.
    /// </summary>
    public enum CoAPSuccess: byte
    {
        /// <summary>
        /// Empty success code.
        /// </summary>
        None = 0,
        /// <summary>
        /// Created.
        /// </summary>
        Created = 1,
        /// <summary>
        /// Deleted.
        /// </summary>
        Deleted = 2,
        /// <summary>
        /// Valid.
        /// </summary>
        Valid = 3,
        /// <summary>
        /// Changed.
        /// </summary>
        Changed = 4,
        /// <summary>
        /// Content.
        /// </summary>
        Content = 5,
        /// <summary>
        /// Continue.
        /// </summary>
        Continue = 31
    }
}


dialog-content {
  max-width: 28em;
  spacing: 20px;
}

.message-dialog-content .message-dialog-title {
  text-align: center;
  font-size: 18pt;
  text-shadow: 0 1px rgba(255,255,255,0.7);
  font-weight: 800;
}

.message-dialog-content .message-dialog-title.lightweight {
  font-size: 13pt;
  text-shadow: 0 1px rgba(255,255,255,0.7);
  font-weight: 800;
}

.message-dialog-content .message-dialog-description {
  text-align: center;
}

.message-dialog-icon {
  min-width: 48px;
  icon-size: 48px;
}

.message-dialog-subtitle {
text-shadow: 0 1px rgba(255,255,255,0.7);
  color: #424242;
  font-weight: bold;
}

/* Dialog List */
.dialog-list {
  spacing: 18px;
}

.dialog-list .dialog-list-title {
  text-align: center;
  font-weight: bold;
}

.dialog-list .dialog-list-scrollview {
  max-height: 200px;
}

.dialog-list .dialog-list-box {
  spacing: 1em;
}

.dialog-list .dialog-list-box .dialog-list-item {
  spacing: 1em;
}

.dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-title {
text-shadow: 0 1px rgba(255,255,255,0.7);
  font-weight: bold;
}

.dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-description {
text-shadow: 0 1px rgba(255,255,255,0.7);
  color: #424242;
  font-size: 15pt;
  font-weight: 500;
}

/* Run Dialog */
.run-dialog .modal-dialog-content-box {
  margin-top: 24px;
  margin-bottom: 14px;
}

.run-dialog .run-dialog-entry {
  width: 20em;
}

.run-dialog .run-dialog-description {
  text-align: center;
  text-shadow: 0 1px rgba(255,255,255,0.7);
  color: #424242;
  font-size: 15pt;
  font-weight: 500;
}

/* End Session Dialog */
.end-session-dialog {
  spacing: 42px;
  border: none;
}

.end-session-dialog-list {
  padding-top: 20px;
}

.end-session-dialog-layout {
  padding-left: 17px;
}

.end-session-dialog-layout:rtl {
  padding-right: 17px;
}

.end-session-dialog-description {
  width: 28em;
  padding-bottom: 10px;
}

.end-session-dialog-description:rtl {
  text-align: right;
}

.end-session-dialog-warning {
  width: 28em;
  color: #F27835;
  text-shadow: none;
  padding-top: 6px;
}

.end-session-dialog-warning:rtl {
  text-align: right;
}

.end-session-dialog-logout-icon {
  border-radius: 5px;
  width: 48px;
  height: 48px;
  background-size: contain;
}

.end-session-dialog-shutdown-icon {
  color: #565656;
  width: 48px;
  height: 48px;
}

.end-session-dialog-inhibitor-layout {
  spacing: 16px;
  max-height: 200px;
  padding-right: 65px;
  padding-left: 65px;
}

.end-session-dialog-se


F3_RXI, SCIF3_ERI,
	    SCIF2_TXI, SCIF2_BRI, SCIF2_RXI, SCIF2_ERI,
	    SCIF1_TXI, SCIF1_BRI, SCIF1_RXI, SCIF1_ERI,
	    SCIF0_TXI, SCIF0_BRI, SCIF0_RXI, SCIF0_ERI },
	    INTC_SMP_BALANCING(INT2DISTCR2) },
};

static struct intc_prio_reg prio_registers[] __initdata = {
	{ 0xfe410010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3 } },

	{ 0xfe410800, 0, 32, 4, /* INT2PRI0 */ { 0, HUDII, TMU5, TMU4,
						 TMU3, TMU2, TMU1, TMU0 } },
	{ 0xfe410804, 0, 32, 4, /* INT2PRI1 */ { DTU3, DTU2, DTU1, DTU0,
						 SCIF3, SCIF2,
						 SCIF1, SCIF0 } },
	{ 0xfe410808, 0, 32, 4, /* INT2PRI2 */ { DMAC1, DMAC0,
						 PCII56789, PCII4,
						 PCII3, PCII2,
						 PCII1, PCII0 } },
	{ 0xfe41080c, 0, 32, 4, /* INT2PRI3 */ { FE1, FE0, ATAPI, VCORE0,
						 VIN1, VIN0, IIC, DU} },
	{ 0xfe410810, 0, 32, 4, /* INT2PRI4 */ { 0, 0, PAM, GPIO3,
						 GPIO2, GPIO1, GPIO0, IRM } },
	{ 0xfe410090, 0xfe4100a0, 32, 4, /* CnICIPRI / CnICIPRICLR */
	  { INTICI7, INTICI6, INTICI5, INTICI4,
	    INTICI3, INTICI2, INTICI1, INTICI0 }, INTC_SMP(4, 4) },
};

static DECLARE_INTC_DESC(intc_desc, "shx3", vectors, groups,
			 mask_registers, prio_registers, NULL);

/* Support for external interrupt pins in IRQ mode */
static struct intc_vect vectors_irq[] __initdata = {
	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
	INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
};

static struct intc_sense_reg sense_registers[] __initdata = {
	{ 0xfe41001c, 32, 2, /* ICR1 */   { IRQ0, IRQ1, IRQ2, IRQ3 } },
};

static DECLARE_INTC_DESC(intc_desc_irq, "shx3-irq", vectors_irq, groups,
			 mask_registers, prio_registers, sense_registers);

/* External interrupt pins in IRL mode */
static struct intc_vect vectors_irl[] __initdata = {
	INTC_VECT(IRL_LLLL, 0x200), INTC_VECT(IRL_LLLH, 0x220),
	INTC_VECT(IRL_LLHL, 0x240), INTC_VECT(IRL_LLHH, 0x260),
	INTC_VECT(IRL_LHLL, 0x280), INTC_VECT(IRL_LHLH, 0x2a0),
	INTC_VECT(IRL_LHHL, 0x2c0), INTC_VECT(IRL_LHHH, 0x2e0),
	INTC_VECT(IRL_HLLL, 0x300), INTC_VECT(IRL_HLLH, 0x320),
	INTC_VECT(IRL_HLHL, 0x340), INTC_VECT(IRL_HLHH, 0x360),
	INTC_VECT(IRL_HHLL, 0x380), INTC_VECT(IRL_HHLH, 0x3a0),
	INTC_VECT(IRL_HHHL, 0x3c0),
};

static DECLARE_INTC_DESC(intc_desc_irl, "shx3-irl", vectors_irl, groups,
			 mask_registers, prio_registers, NULL);

void __init plat_irq_setup_pins(int mode)
{
	int ret = 0;

	switch (mode) {
	case IRQ_MODE_IRQ:
		ret |= gpio_request(GPIO_FN_IRQ3, intc_desc_irq.name);
		ret |= gpio_request(GPIO_FN_IRQ2, intc_desc_irq.name);
		ret |= gpio_request(GPIO_FN_IRQ1, intc_desc_irq.name);
		ret |= gpio_request(GPIO_FN_IRQ0, intc_desc_irq.name);

		if (unlikely(ret)) {
			pr_err("Failed to set IRQ mode\n");
			return;
		}

		register_intc_controller(&intc_desc_irq);
		break;
	case IRQ_MODE_IRL3210:
		ret |= gpio_request(GPIO_FN_IRL3, intc_desc_irl.name);
		ret |= gpio_request(GPIO_FN_IRL2, intc_desc_irl.name);
		ret |= gpio_request(GPIO_FN_IRL1, intc_desc_irl.name);
		ret |= gpio_request(GPIO_FN_IRL0, intc_desc_irl.name);

		if (unlikely(ret)) {
			pr_err("Failed to set IRL mode\n");
			return;
		}

		register_intc_controller(&intc_desc_irl);
		break;
	default:
		BUG();
	}
}

void __init plat_irq_setup(void)
{
	register_intc_controller(&intc_desc);
}

void __init plat_mem_setup(void)
{
	unsigned int nid = 1;

	/* Register CPU#0 URAM space as Node 1 */
	setup_bootmem_node(nid++, 0x145f0000, 0x14610000);	/* CPU0 */

#if 0
	/* XXX: Not yet.. */
	setup_bootmem_node(nid++, 0x14df0000, 0x14e10000);	/* CPU1 */
	setup_bootmem_node(nid++, 0x155f0000, 0x15610000);	/* CPU2 */
	setup_bootmem_node(nid++, 0x15df0000, 0x15e10000);	/* CPU3 */
#endif

	setup_bootmem_node(nid++, 0x16000000, 0x16020000);	/* CSM */
}


 percig), és a behelyezett játéknak a Wiimmfi patch-el együtt kell elindulnia.

## Kézi lemezkép javítás az Internet Channel csatornán keresztül

::: warning

Ha UPnP-vel kapcsolatos problémákba ütközöl (például a patcher 10 másodpercnél tovább megáll a ""Init network..." vagy az "add UPnP port forward" lépéseknél), akkor a Wii Remote - gombját vagy a GameCube kontroller Y gombját nyomd meg, amint a patcher betöltődik, hogy ezt megkerüld.

:::

A Wiimmfi patchelés egy módszere, amely a kiskereskedelmi játéklemezeken fut, de manuálisan kell elindítani az internetes csatornán keresztül (a [Flashhax](flashhax)-ból származik). A folyamat jellegéből adódóan homebrew nélkül is futtatható Wii-ken. [Ez](nintendowfc#manual-disc-patching-via-eula-user-agreement) a metódus általábban jobban megbízható és ajánlott is helyette.

### Követelmények

- Egy Wii internet kapcsolattal 60Hz módban futva
- Az Internet Channel

### Lépések

1. Nyisd meg a következő weboldalt az Internet Channel-ben: `http://chadsoft.co.uk/wiimmfi`
2. Add hozzá az oldalt a böngésző kedvenceidhez a csillag ikonra, majd az `Add Favorite` gombra kattintva.
3. Lépj vissza a Wii menübe.
4. Nyisd meg újra az Internet Channel-t, és lépj be az imént létrehozott kedvenchez.
5. A Wiimmfi patchernek el kell indulnia. Légy türelmes, mivel a Flashhax nagyon megbízhatatlan tud lenni - több próbálkozásra is szükség lehet, hogy sikerüljön.

## Kézi WiiWare patchelés PC-vel

A Wiimmfi patchelés egy módszere, amely a WiiWare játékokon fut, de kézzel kell futtatni a PC-n egy szkript segítségével.

### Követelmények

- Egy SD kártya
- A játékod másolata (WAD formátumban)
- [WiiWare Patcher](https://github.com/RiiConnect24/WiiWare-Patcher/releases/latest) (cross platform)
- [YAWM ModMii Edition](https://oscwii.org/library/app/yawmme)

### Lépések

1. Csomagold ki a WiiWare Patcher legújabb verziójának .zip csomagját, és tedd bele a WAD-edet.
2. Futtasd le az operációs rendszeredhez tartozó patch scriptet: Windows esetén általában `.bat`, Mac/Linux esetén `.sh` végződésű. Ha a RiiConnect24 Patchert használod, válaszd ki a készülékedet (Wii, vWii vagy Dolphin), és válaszd a WiiWare patchert.
3. Ha sikeresen befejeződött, telepítsd a `wiiware-wads`-szel készük WAD fájl a [YAWM ModMii Edition](yawmme)-nel.

## Kézi lemezkép-foltozás PC-n keresztül

A Wiimmfi patchelés egy módszere, amely játék-lemezképeken fut, de kézzel kell futtatni a PC-n egy


  dba.AdvanceCommand();
  // Test MATCH (n) -[r*]-> (m) RETURN r
  auto edge = EDGE_VARIABLE("r", Type::DEPTH_FIRST, Direction::OUT);
  auto *query = QUERY(SINGLE_QUERY(MATCH(PATTERN(NODE("n"), edge, NODE("m"))), RETURN("r")));
  // We expect to get a single column with the following rows:
  TypedValue r1_list(std::vector<TypedValue>{TypedValue(r1)});  // [r1]
  TypedValue r2_list(std::vector<TypedValue>{TypedValue(r2)});  // [r2]
  // [r1, r2]
  TypedValue r1_r2_list(std::vector<TypedValue>{TypedValue(r1), TypedValue(r2)});
  CheckPlansProduce(3, query, this->storage, &dba, [&](const auto &results) {
    AssertRows(results, {{r1_list}, {r2_list}, {r1_r2_list}}, dba);
  });
}

TYPED_TEST(TestVariableStartPlanner, MatchVariableExpandReferenceNode) {
  auto storage_dba = this->db->Access();
  memgraph::query::DbAccessor dba(storage_dba.get());
  auto id = dba.NameToProperty("id");
  // Graph (v1 {id:1}) -[:r1]-> (v2 {id: 2}) -[:r2]-> (v3 {id: 3})
  auto v1 = dba.InsertVertex();
  ASSERT_TRUE(v1.SetProperty(id, memgraph::storage::PropertyValue(1)).HasValue());
  auto v2 = dba.InsertVertex();
  ASSERT_TRUE(v2.SetProperty(id, memgraph::storage::PropertyValue(2)).HasValue());
  auto v3 = dba.InsertVertex();
  ASSERT_TRUE(v3.SetProperty(id, memgraph::storage::PropertyValue(3)).HasValue());
  auto r1 = *dba.InsertEdge(&v1, &v2, dba.NameToEdgeType("r1"));
  auto r2 = *dba.InsertEdge(&v2, &v3, dba.NameToEdgeType("r2"));
  dba.AdvanceCommand();
  // Test MATCH (n) -[r*..n.id]-> (m) RETURN r
  auto edge = EDGE_VARIABLE("r", Type::DEPTH_FIRST, Direction::OUT);
  edge->upper_bound_ = PROPERTY_LOOKUP(dba, "n", id);
  auto *query = QUERY(SINGLE_QUERY(MATCH(PATTERN(NODE("n"), edge, NODE("m"))), RETURN("r")));
  // We expect to get a single column with the following rows:
  // [r1] (v1 -[*..1]-> v2)
  TypedValue r1_list(std::vector<TypedValue>{TypedValue(r1)});
  // [r2] (v2 -[*..2]-> v3)
  TypedValue r2_list(std::vector<TypedValue>{TypedValue(r2)});
  CheckPlansProduce(3, query, this->storage, &dba, [&](const auto &results) {
    AssertRows(results, {{r1_list}, {r2_list}}, dba);
  });
}

TYPED_TEST(TestVariableStartPlanner, MatchVariableExpandBoth) {
  auto storage_dba = this->db->Access();
  memgraph::query::DbAccessor dba(storage_dba.get());
  auto id = dba.NameToProperty("id");
  // Graph (v1 {id:1}) -[:r1]-> (v2) -[:r2]-> (v3)
  auto v1 = dba.InsertVertex();
  ASSERT_TRUE(v1.SetProperty(id, memgraph::storage::PropertyValue(1)).HasValue());
  auto v2 = dba.InsertVertex();
  auto v


/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2018, Erik Moqvist
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * This file is part of the Simba project.
 */

#ifndef __SHELL_MOCK_H__
#define __SHELL_MOCK_H__

#include "simba.h"

int mock_write_shell_module_init(int res);

int mock_write_shell_init(void *chin_p,
                          void *chout_p,
                          void *arg_p,
                          const char *name_p,
                          const char *username_p,
                          const char *password_p,
                          int res);

int mock_write_shell_main(void *arg_p,
                          void *res);

#endif


 1 * SIZE
	;;
	(p14) LDFD	f101 = [X1], 1 * SIZE
	;;
	(p15) LDFD	f102 = [X1], 1 * SIZE
	;;
	(p13) FMA	f8  = f96,  f32, f8
	(p13) FMA	f9  = f96,  f40, f9
	(p13) FMA	f10 = f96,  f48, f10
	(p13) FMA	f11 = f96,  f56, f11
	(p13) FMA	f12 = f96,  f64, f12
	(p13) FMA	f13 = f96,  f72, f13
	(p13) FMA	f14 = f96,  f80, f14
	(p13) FMA	f15 = f96,  f88, f15
	;;
	(p13) FMA	f8  = f97,  f33, f8
	(p13) FMA	f9  = f97,  f41, f9
	(p13) FMA	f10 = f97,  f49, f10
	(p13) FMA	f11 = f97,  f57, f11
	(p13) FMA	f12 = f97,  f65, f12
	(p13) FMA	f13 = f97,  f73, f13
	(p13) FMA	f14 = f97,  f81, f14
	(p13) FMA	f15 = f97,  f89, f15
	;;
	(p13) FMA	f8  = f98,  f34, f8
	(p13) FMA	f9  = f98,  f42, f9
	(p13) FMA	f10 = f98,  f50, f10
	(p13) FMA	f11 = f98,  f58, f11
	(p13) FMA	f12 = f98,  f66, f12
	(p13) FMA	f13 = f98,  f74, f13
	(p13) FMA	f14 = f98,  f82, f14
	(p13) FMA	f15 = f98,  f90, f15
	;;
	(p13) FMA	f8  = f99,  f35, f8
	(p13) FMA	f9  = f99,  f43, f9
	(p13) FMA	f10 = f99,  f51, f10
	(p13) FMA	f11 = f99,  f59, f11
	(p13) FMA	f12 = f99,  f67, f12
	(p13) FMA	f13 = f99,  f75, f13
	(p13) FMA	f14 = f99,  f83, f14
	(p13) FMA	f15 = f99,  f91, f15
	;;
	(p14) FMA	f8  = f100, f36, f8
	(p14) FMA	f9  = f100, f44, f9
	(p14) FMA	f10 = f100, f52, f10
	(p14) FMA	f11 = f100, f60, f11
	(p14) FMA	f12 = f100, f68, f12
	(p14) FMA	f13 = f100, f76, f13
	(p14) FMA	f14 = f100, f84, f14
	(p14) FMA	f15 = f100, f92, f15
	;;
	(p14) FMA	f8  = f101, f37, f8
	(p14) FMA	f9  = f101, f45, f9
	(p14) FMA	f10 = f101, f53, f10
	(p14) FMA	f11 = f101, f61, f11
	(p14) FMA	f12 = f101, f69, f12
	(


ainAppChain}} -j {{.MangleProxyAppChain}}
{{.MangleTable}} {{.MainAppChain}} -m connmark --mark {{.DefaultExternalConnmark}} -j ACCEPT
{{.MangleTable}} {{.MainAppChain}} -p udp -m connmark --mark {{.DefaultDropConnmark}} -m comment --comment "Drop UDP ACL" -j DROP
{{.MangleTable}} {{.MainAppChain}} -m connmark --mark {{.DefaultConnmark}} -p tcp ! --tcp-flags FIN,RST,URG,PSH,SYN,ACK SYN,ACK  -j ACCEPT
{{.MangleTable}} {{.MainAppChain}} -m connmark --mark {{.DefaultConnmark}} -p udp -j ACCEPT
{{.MangleTable}} {{.MainAppChain}} -m mark --mark {{.RawSocketMark}} -j ACCEPT
{{$.MangleTable}} {{$.MainAppChain}} -p tcp -m tcp --tcp-flags FIN,RST,URG,PSH,SYN,ACK SYN,ACK -j {{.NfqueueOutput}}

{{if isLocalServer}}
{{.MangleTable}} {{.MainAppChain}} -j {{.TriremeOutput}}
{{.MangleTable}} {{.MainAppChain}} -j {{.NetworkSvcOutput}}
{{.MangleTable}} {{.MainAppChain}} -j {{.HostOutput}}
{{end}}

{{.MangleTable}} {{.MangleProxyAppChain}} -m mark --mark {{.ProxyMark}} -j ACCEPT
{{.MangleTable}} {{.MangleProxyNetChain}} -m mark --mark {{.ProxyMark}} -j ACCEPT

{{.NatTable}} {{.NatProxyAppChain}} -m mark --mark {{.ProxyMark}} -j ACCEPT
{{.NatTable}} {{.NatProxyNetChain}} -m mark --mark {{.ProxyMark}} -j ACCEPT
`

// cgroupCaptureTemplate is not used for rhel6
var cgroupCaptureTemplate = ``

// containerChainTemplate is not used for rhel6
var containerChainTemplate = ``

// istioChainTemplate is not used for rhel6
var istioChainTemplate = ``

var acls = `
{{range .RejectObserveContinue}}
{{joinRule .}}
{{end}}

{{range .RejectNotObserved}}
{{joinRule .}}
{{end}}

{{range .RejectObserveApply}}
{{joinRule .}}
{{end}}

{{range .AcceptObserveContinue}}
{{joinRule .}}
{{end}}

{{range .AcceptNotObserved}}
{{joinRule .}}
{{end}}

{{range .AcceptObserveApply}}
{{joinRule .}}
{{end}}

{{range .ReverseRules}}
{{joinRule .}}
{{end}}
`

var preNetworkACLRuleTemplate = `
{{/* matches syn and ack packets */}}
{{$.MangleTable}} {{$.NetChain}} -p tcp -m tcp --tcp-option 34 -m tcp --tcp-flags FIN,RST,URG,PSH NONE -j {{.NfqueueInput}}
`

// packetCaptureTemplate are the rules that trap traffic towards the user space.
var packetCaptureTemplate = `

{{.MangleTable}} {{.AppChain}} -p icmp -j NFQUEUE --queue-balance {{queueBalance}}
{{.MangleTable}} {{.NetChain}} -p icmp -j NFQUEUE --queue-balance {{queueBalance}}

{{$.MangleTable}} {{$.AppChain}} -m set --match-set {{$.TargetTCPNetSet}} dst -p tcp -m tcp --tcp-flags FIN FIN -j ACCEPT
{{$.MangleTable}} {{$.AppChain}} -m set --match-set {{$.TargetTCPNetSet}} dst -p tcp -j MARK --set-mark {{packetMark}}
{{$.MangleTable}} {{$.AppChain}} -p udp -m set --match-set {{$.TargetUDPNetSet}} dst -j MARK --set-mark {{packetMark}}
{{$.MangleTable}} {{$.AppChain}} -m mark --mark {{


strlen(needle);
  if (len1 < len2) return nullptr;
  for (size_t pos = 0; pos <= len1 - len2; pos++) {

    if (internal_memcmp(haystack + pos, needle, len2) == 0)
      return const_cast<char *>(haystack) + pos;

  }

  return nullptr;

}

extern "C" {

// Weak hooks forward-declared to avoid dependency on
// <sanitizer/common_interface_defs.h>.
void __sanitizer_weak_hook_memcmp(void *called_pc, const void *s1,
                                  const void *s2, size_t n, int result);
void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1,
                                   const char *s2, size_t n, int result);
void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1,
                                       const char *s2, size_t n, int result);
void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1,
                                  const char *s2, int result);
void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1,
                                      const char *s2, int result);
void __sanitizer_weak_hook_strstr(void *called_pc, const char *s1,
                                  const char *s2, char *result);
void __sanitizer_weak_hook_strcasestr(void *called_pc, const char *s1,
                                      const char *s2, char *result);
void __sanitizer_weak_hook_memmem(void *called_pc, const void *s1, size_t len1,
                                  const void *s2, size_t len2, void *result);

DEFINE_REAL(int, bcmp, const void *, const void *, size_t)
DEFINE_REAL(int, memcmp, const void *, const void *, size_t)
DEFINE_REAL(int, strncmp, const char *, const char *, size_t)
DEFINE_REAL(int, strcmp, const char *, const char *)
DEFINE_REAL(int, strncasecmp, const char *, const char *, size_t)
DEFINE_REAL(int, strcasecmp, const char *, const char *)
DEFINE_REAL(char *, strstr, const char *, const char *)
DEFINE_REAL(char *, strcasestr, const char *, const char *)
DEFINE_REAL(void *, memmem, const void *, size_t, const void *, size_t)

ATTRIBUTE_INTERFACE int bcmp(const char *s1, const char *s2, size_t n) {

  if (!FuzzerInited) return internal_memcmp(s1, s2, n);
  int result = REAL(bcmp)(s1, s2, n);
  __sanitizer_weak_hook_memcmp(GET_CALLER_PC(), s1, s2, n, result);
  return result;

}

ATTRIBUTE_INTERFACE int memcmp(const void *s1, const void *s2, size_t n) {

  if (!FuzzerInited) return internal_memcmp(s1, s2, n);
  int result = REAL(memcmp)(s1, s2, n);
  __sanitizer_weak_hook_memcmp(GET_CALLER_PC(), s1, s2, n, result);
  return result;

}

ATTRIBUTE_INTERFACE int strncmp(const char *s1, const char *s2, size_t n) {

  if (!FuzzerInited) return internal_strncmp(s1, s2, n);
  int result = REAL(strncmp)(s1, s2, n);
  __sanitizer_weak_hook_strncmp(GET_CALLER_PC(), s1, s2, n, result);
  return result;

}

ATTR


 client.raw_get(&get_req).unwrap();
        assert_eq!(get_resp.value, v3);
    }
    sleep_ms(50);
    let store_id = 1;
    let hot_peers = cluster.pd_client.get_store_hotspots(store_id).unwrap();
    let peer_stat = hot_peers.get(&left.id).unwrap();
    assert!(peer_stat.get_read_keys() > 0);
    assert!(peer_stat.get_read_bytes() > 0);
    fail::remove("mock_tick_interval");
    fail::remove("mock_hotspot_threshold");
}

type Query = dyn Fn(Context, &Cluster<ServerCluster>, TikvClient, u64, u64, Vec<u8>);

#[test]
fn test_query_stats() {
    let raw_get: Box<Query> = Box::new(|ctx, cluster, client, store_id, region_id, start_key| {
        let mut req = RawGetRequest::default();
        req.set_context(ctx);
        req.key = start_key.clone();
        client.raw_get(&req).unwrap();
        assert!(check_query_num_read(
            cluster,
            store_id,
            region_id,
            QueryKind::Get,
            1
        ));
        assert!(check_split_key(cluster, start_key));
    });
    let raw_batch_get: Box<Query> =
        Box::new(|ctx, cluster, client, store_id, region_id, start_key| {
            let mut req = RawBatchGetRequest::default();
            req.set_context(ctx);
            req.set_keys(protobuf::RepeatedField::from(vec![start_key.clone()]));
            client.raw_batch_get(&req).unwrap();
            assert!(check_query_num_read(
                cluster,
                store_id,
                region_id,
                QueryKind::Get,
                1
            ));
            assert!(check_split_key(cluster, start_key));
        });
    let raw_scan: Box<Query> = Box::new(|ctx, cluster, client, store_id, region_id, start_key| {
        let mut req = RawScanRequest::default();
        req.set_context(ctx);
        req.start_key = start_key.clone();
        req.end_key = vec![];
        client.raw_scan(&req).unwrap();
        assert!(check_query_num_read(
            cluster,
            store_id,
            region_id,
            QueryKind::Scan,
            1
        ));
        assert!(check_split_key(cluster, start_key));
    });
    let raw_batch_scan: Box<Query> =
        Box::new(|ctx, cluster, client, store_id, region_id, start_key| {
            let mut req = RawBatchScanRequest::default();
            let mut key_range = KeyRange::default();
            key_range.set_start_key(start_key.clone());
            key_range.set_end_key(vec![]);
            req.set_context(ctx);
            req.set_ranges(protobuf::RepeatedField::from(vec![key_range]));
            client.raw_batch_scan(&req).unwrap();
            assert!(check_query_num_read(
                cluster,
                store_id,
                region_id,
                QueryKind::Scan,
                1
            ));
            assert!(check_split_key(cluster, start_key));
        });
    let get: Box<Query> = Box::new(|ctx, cluster, client, store_id, region_id, start_key| {
        let mut req = GetRequest::default();


ty) {
      // ignore: parameter_assignments
      json = json.cast<String, dynamic>();
      for (final entry in json.entries) {
        map[entry.key] = SearchExploreResponseDto.listFromJson(entry.value, growable: growable,);
      }
    }
    return map;
  }

  /// The list of required keys that must be present in a JSON.
  static const requiredKeys = <String>{
    'fieldName',
    'items',
  };
}

//
// AUTO-GENERATED FILE, DO NOT MODIFY!
//
// @dart=2.12

// ignore_for_file: unused_element, unused_import
// ignore_for_file: always_put_required_named_parameters_first
// ignore_for_file: constant_identifier_names
// ignore_for_file: lines_longer_than_80_chars

part of openapi.api;

class APIKeyCreateDto {
  /// Returns a new [APIKeyCreateDto] instance.
  APIKeyCreateDto({
    this.name,
  });

  ///
  /// Please note: This property should have been non-nullable! Since the specification file
  /// does not include a default value (using the "default:" property), however, the generated
  /// source code must fall back to having a nullable type.
  /// Consider adding a "default:" property in the specification file to hide this note.
  ///
  String? name;

  @override
  bool operator ==(Object other) => identical(this, other) || other is APIKeyCreateDto &&
     other.name == name;

  @override
  int get hashCode =>
    // ignore: unnecessary_parenthesis
    (name == null ? 0 : name!.hashCode);

  @override
  String toString() => 'APIKeyCreateDto[name=$name]';

  Map<String, dynamic> toJson() {
    final json = <String, dynamic>{};
    if (this.name != null) {
      json[r'name'] = this.name;
    } else {
    //  json[r'name'] = null;
    }
    return json;
  }

  /// Returns a new [APIKeyCreateDto] instance and imports its values from
  /// [value] if it's a [Map], null otherwise.
  // ignore: prefer_constructors_over_static_methods
  static APIKeyCreateDto? fromJson(dynamic value) {
    if (value is Map) {
      final json = value.cast<String, dynamic>();

      return APIKeyCreateDto(
        name: mapValueOfType<String>(json, r'name'),
      );
    }
    return null;
  }

  static List<APIKeyCreateDto> listFromJson(dynamic json, {bool growable = false,}) {
    final result = <APIKeyCreateDto>[];
    if (json is List && json.isNotEmpty) {
      for (final row in json) {
        final value = APIKeyCreateDto.fromJson(row);
        if (value != null) {
          result.add(value);
        }
      }
    }
    return result.toList(growable: growable);
  }

  static Map<String, APIKeyCreateDto> mapFromJson(dynamic json) {
    final map = <String, APIKeyCreateDto>{};
    if (json is Map && json.isNotEmpty) {
      json = json.cast<String, dynamic>(); // ignore: parameter_assignments
      for (final entry in json.entries) {
        final value = APIKeyCreateDto.fromJson(entry.value);
        if (value != null) {
          map[entry.key] = value;
        }
      }
    }
    return map;
  }

  // maps a json object with a list of APIKeyCreateDto-objects as value to a dart map
  static Map<String, List<APIKeyCreateDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
    final map = <String, List<APIKeyCreateDto>>{};
    if (json is Map && json.isNotEmpty) {
      // ignore: parameter_


其与原始实例的平方距离。然后，您可以选择最小化重建前图像错误的核和超参数。

![](img/8-11.jpeg)

图 8-11 核 PCA 和重建前图像误差

您可能想知道如何进行这种重建。一种解决方案是训练一个监督回归模型，将预计实例作为训练集，并将原始实例作为训练目标。如果您设置了`fit_inverse_transform = True`，Scikit-Learn 将自动执行此操作，代码如下所示：

```py
rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.0433,fit_inverse_transform=True)
X_reduced = rbf_pca.fit_transform(X)
X_preimage = rbf_pca.inverse_transform(X_reduced)
```

> 概述：默认条件下，`fit_inverse_transform = False`并且`KernelPCA`没有`inverse_tranfrom()`方法。这种方法仅仅当`fit_inverse_transform = True`的情况下才会创建。

你可以计算重建前图像误差：

```py
>>> from sklearn.metrics import mean_squared_error
>>> mean_squared_error(X, X_preimage) 32.786308795766132
```

现在你可以使用交叉验证的方格搜索来寻找可以最小化重建前图像误差的核方法和超参数。

### LLE

局部线性嵌入（Locally Linear Embedding）是另一种非常有效的非线性降维（NLDR）方法。这是一种流形学习技术，不依赖于像以前算法那样的投影。简而言之，LLE 首先测量每个训练实例与其最近邻（c.n.）之间的线性关系，然后寻找能最好地保留这些局部关系的训练集的低维表示（稍后会详细介绍） 。这使得它特别擅长展开扭曲的流形，尤其是在没有太多噪音的情况下。

例如，以下代码使用 Scikit-Learn 的`LocallyLinearEmbedding`类来展开瑞士卷。得到的二维数据集如图 8-12 所示。正如您所看到的，瑞士卷被完全展开，实例之间的距离保存得很好。但是，距离不能在较大范围内保留的很好：展开的瑞士卷的左侧被挤压，而右侧的部分被拉长。尽管如此，LLE 在对流形建模方面做得非常好。

```py
from sklearn.manifold import LocallyLinearEmbedding

lle=LocallyLinearEmbedd


#pragma once

/*
 *      Copyright (C) 2005-2013 Team XBMC
 *      http://xbmc.org
 *
 *  This Program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  This Program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with XBMC; see the file COPYING.  If not, see
 *  <http://www.gnu.org/licenses/>.
 *
 */

#include "guilib/GUIWindow.h"
#ifdef HAS_SCREENSAVER
#include "addons/ScreenSaver.h"
#endif

#include "threads/CriticalSection.h"

#define SCREENSAVER_FADE   1
#define SCREENSAVER_BLACK  2
#define SCREENSAVER_XBS    3

class CGUIWindowScreensaver : public CGUIWindow
{
public:
  CGUIWindowScreensaver(void);
  virtual ~CGUIWindowScreensaver(void);

  virtual bool OnMessage(CGUIMessage& message);
  virtual bool OnAction(const CAction &action);
  virtual void Render();
  virtual void Process(unsigned int currentTime, CDirtyRegionList &regions);

protected:
  virtual EVENT_RESULT OnMouseEvent(const CPoint &point, const CMouseEvent &event);

private:
  bool m_bInitialized;
  CCriticalSection m_critSection;
#ifdef HAS_SCREENSAVER
  std::shared_ptr<ADDON::CScreenSaver> m_addon;
#endif
};