 {
            return -1;
        } else  {
            return 1;
        }
    }

    public boolean equals(Object x) {
    	if (this == x) {
    		return true;
    	}
    	if (x instanceof BigDecimal) {
    	    BigDecimal x1 = (BigDecimal) x;
    	    return x1.scale == scale
                   && (bitLength < 64 ? (x1.smallValue == smallValue)
                    : intVal.equals(x1.intVal));

    	}
    	return false;
    }

    public BigDecimal min(BigDecimal val) {
        return ((compareTo(val) <= 0) ? this : val);
    }

    public BigDecimal max(BigDecimal val) {
        return ((compareTo(val) >= 0) ? this : val);
    }

    public int hashCode() {
    	if (hashCode != 0) {
    		return hashCode;
    	}
    	if (bitLength < 64) {
    		hashCode = (int)(smallValue & 0xffffffff);
    		hashCode = 33 * hashCode +  (int)((smallValue >> 32) & 0xffffffff);
    		hashCode = 17 * hashCode + scale;
    		return hashCode;
    	}
    	hashCode = 17 * intVal.hashCode() + scale;
    	return hashCode;
    }

    public String toString() {
        if (toStringImage != null) {
            return toStringImage;
        }
        if(bitLength < 32) {
            toStringImage = Conversion.toDecimalScaledString(smallValue,scale);
            return toStringImage;
        }
        String intString = getUnscaledValue().toString();
        if (scale == 0) {
            return intString;
        }
        int begin = (getUnscaledValue().signum() < 0) ? 2 : 1;
        int end = intString.length();
        long exponent = -(long)scale + end - begin;
        StringBuffer result = new StringBuffer();

        result.append(intString);
        if ((scale > 0) && (exponent >= -6)) {
            if (exponent >= 0) {
                result.insert(end - scale, '.');
            } else {
                result.insert(begin - 1, "0."); //$NON-NLS-1$
                result.insert(begin + 1, CH_ZEROS, 0, -(int)exponent - 1);
            }
        } else {
            if (end - begin >= 1) {
                result.insert(begin, '.');
                end++;
            }
            result.insert(end, 'E');
            if (exponent > 0) {
                result.insert(++end, '+');
            }
            result.insert(++end, Long.toString(exponent));
        }
        toStringImage = result.toString();
        return toStringImage;
    }

    public BigInteger toBigInteger() {
        if ((scale == 0) || (isZero())) {
            return getUnscaledValue();
        } else if (scale < 0) {
            return getUnscaledValue().multiply(Multiplication.powerOf10(-(long)scale));
        } else {// (scale > 0)
            return getUnscaledValue().divide(Multiplication.powerOf10(scale));
        }
    }

    public long longValue() {
        /* If scale <= -64 there are at least 64 trailing bits zero in 10^(-scale).
         * If the scale is positive and very large the long value could be zero. */
        return ((scale <= -64) || (scale > aproxPrecision())
        ? 0L
                : toBigInteger().longValue());
    }

    public int intValue() {
        /* If scale <= -32 there are at least 32 trailing bits zero in 10^(-scale).
         * If the scale is positive and very large the long value could be zero. */
        return ((scale <= -32) || (scale > aproxPrecision())
        ? 0
                : toBigInteger().intValue());
    }

    public float floatValue() {
        /* A si


 Vec3)> {
        let target = record.point + record.normal + random_in_unit_sphere();
        let scattered = Ray{ from: record.point, to: target - record.point };

        Some((scattered, self.albedo))
    }
}

/// Описывает отражающее тело.
#[allow(dead_code)]
struct Metal {
    albedo: Vec3,
    fuzz: f32,
}

impl Metal {
    /// Создает металлический материал с идеальной отражающей поверхностью.
    #[allow(dead_code)]
    fn with_albedo(albedo: Vec3) -> Self {
        Metal { albedo, fuzz: 0.0 }
    }

    /// Создает металлический материал с матовой отражающей поверхностью.
    ///
    /// Степень матовости определяется вторым параметром в диапазоне `[0; 1]`.
    #[allow(dead_code)]
    fn with_albedo_fuzz(albedo: Vec3, fuzz: f32) -> Self {
        let f = if fuzz < 0.0 {
            0.0
        } else if fuzz > 1.0 {
            1.0
        } else {
            fuzz
        };

        Metal { albedo, fuzz: f }
    }
}

impl Material for Metal {
    fn scatter(&self, ray: &Ray, record: &HitRecord) -> Option<(Ray, Vec3)> {
        let reflected = reflect(unit_vector(ray.direction()), record.normal);
        let scattered = Ray{ from: record.point, to: reflected + self.fuzz * random_in_unit_sphere()};

        if dot(scattered.direction(), record.normal) > 0.0 {
            Some((scattered, self.albedo))
        } else {
            None
        }
    }
}

/// Описывает преломляющее свет тело.
struct Dielectric {
    ref_index: f32
}

impl Material for Dielectric {
    fn scatter(&self, ray: &Ray, record: &HitRecord) -> Option<(Ray, Vec3)> {
        let outward_normal;
        let ni_over_nt;
        let attenuation: Vec3 = [1.0, 1.0, 1.0].into();
        let cosine;

        if dot(ray.direction(), record.normal) > 0.0 {
            outward_normal = -record.normal;
            ni_over_nt = self.ref_index;
            cosine = self.ref_index * dot(ray.direction(), record.normal) / ray.direction().length();
        } else {
            outward_normal = record.normal;
            ni_over_nt = 1.0 / self.ref_index;
            cosine = -dot(ray.direction(), record.normal) / ray.direction().length();
        }

        let mut rng = rand::thread_rng();
        let dist = Uniform::from(0.0..1.0 as f32);
        let reflected = reflect(ray.direction(), record.normal);
        if let Some(refracted) = refract(ray.direction(), outward_normal, ni_over_nt) {
            let reflect_prob = schlick(cosine, self.ref_index);
            if dist.sample(&mut rng) < reflect_prob {
                Some((Ray{from: record.point, to: reflected}, attenuation))
            } else {
                Some((Ray{from: record.point,


.5 5.7C5.9 6.2 5.4 6.8 4.9 7.5C4.5 8.2 4.2 9 4.1 9.8Z",hex:"F1A77",version:"6.7.96"},{name:"sun-clock-outline",data:"M18.1 9.32L19.65 6L15.5 5.64C16.1 6.15 16.63 6.78 17.05 7.5C17.37 8.05 17.58 8.63 17.73 9.22C17.18 9.08 16.6 9 16 9C15.86 9 15.72 9 15.58 9C14.81 7.25 13.06 6 11 6C8.24 6 6 8.24 6 11C6 13.06 7.25 14.81 9 15.58C9 15.72 9 15.86 9 16C9 19.87 12.13 23 16 23S23 19.87 23 16C23 12.87 20.94 10.21 18.1 9.32M8 11C8 9.35 9.35 8 11 8C12.08 8 13.03 8.58 13.56 9.45C11.66 10.15 10.15 11.66 9.45 13.56C8.58 13.03 8 12.08 8 11M16 21C13.24 21 11 18.76 11 16S13.24 11 16 11 21 13.24 21 16 18.76 21 16 21M16.5 16.25L19.36 17.94L18.61 19.16L15 17V12H16.5V16.25M11 4C10.16 4 9.35 4.15 8.61 4.42L11 1L13.39 4.42C12.65 4.15 11.84 4 11 4M4.95 14.5C5.37 15.24 5.91 15.86 6.5 16.37L2.36 16L4.12 12.23C4.26 13 4.53 13.78 4.95 14.5M4.11 9.79L2.34 6L6.5 5.65C5.9 6.16 5.36 6.78 4.94 7.5C4.5 8.24 4.25 9 4.11 9.79Z",hex:"F1A78",version:"6.7.96"},{name:"sun-compass",data:"M9.7 4.3L12 1L14.3 4.3C13.6 4.1 12.8 4 12 4S10.4 4.1 9.7 4.3M17.5 6.2C18.6 7.3 19.5 8.7 19.8 10.3L21.5 6.6L17.5 6.2M5 8.1C5.1 8 5.1 8 5 8.1C5.1 8 5.1 8 5.1 7.9C5.5 7.3 6 6.7 6.5 6.2L2.5 6.5L4.2 10.2C4.4 9.5 4.7 8.7 5 8.1M19.2 15.4C19.2 15.4 19.2 15.5 19.2 15.4C19.1 15.6 19 15.8 18.9 15.9V16.1C18.5 16.8 18 17.3 17.5 17.9L21.6 17.6L19.9 13.9C19.7 14.4 19.5 14.9 19.2 15.4M5.2 16.2C5.2 16.1 5.1 16.1 5.1 16C5 15.9 5 15.9 5 15.8C4.9 15.6 4.8 15.5 4.8 15.3C4.6 14.8 4.4 14.3 4.3 13.8L2.6 17.5L6.7 17.8C6 17.3 5.6 16.8 5.2 16.2M12.6 20H11.4C10.8 20 10.2 19.8 9.7 19.7L12 23L14.3 19.7C13.8 19.8 13.2 19.9 12.6 20M16.2 7.8C13.9 5.5 10.1 5.5 7.7 7.8S5.4 13.9 7.7 16.3 13.8 18.6 16.2 16.3 18.6 10


::EOS => { break; },
                _ => {},
            }
        }
        debug!(self.debug, "Done");
        debug!(self.debug, "------------------------------");
        return Ok((bytes_read, bytes_written));
    }

}

// An implementation of LZW 12 bit fixed width compression
pub fn compress(input: &mut dyn Read, output: &mut dyn Write, debug: bool) -> std::io::Result<(usize,usize)> {
    let mut c = Compressor::with_debug(debug);
    let (r, mut w) = c.compress(input, output)?;
    w += c.end_of_file(output)?;
    if debug {
        c.print_dictionary();
    }
    return Ok((r,w));
}

// An implementation of LZW 12 bit fixed width decompression
pub fn decompress(input: &mut dyn Read, output: &mut dyn Write, debug: bool) -> std::io::Result<(usize,usize)> {
    let mut d = Decompressor::with_debug(debug);
    let (r,w) = d.decompress(input, output)?;
    if debug {
        d.print_dictionary();
    }
    return Ok((r,w));
}

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

    fn uncompressed() -> Vec<u8> {
        "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum ipsum nulla, pretium at leo sed, condimentum
        consectetur nisi.".as_bytes().to_vec()
    }

    fn compressed() -> Vec<u8> {
        vec![
            76, 6, 240, 114, 6, 80, 109, 2, 0, 105,
            7, 0, 115, 7, 80, 2, 22, 64, 111, 6,
            192, 111, 7, 32, 32, 7, 48, 105, 7, 64,
            32, 6, 16, 109, 6, 80, 116, 2, 192, 32,
            6, 48, 111, 6, 224, 115, 6, 80, 99, 7,
            64, 101, 7, 64, 117, 7, 32, 10, 22, 64,
            3, 22, 144, 115, 6, 48, 105, 6, 224, 103,
            2, 0, 101, 6, 192, 9, 18, 224, 10, 2,
            0, 32, 2, 0, 27, 18, 0, 27, 21, 96,
            101, 7, 48, 116, 6, 144, 98, 7, 80, 108,
            7, 80, 2, 22, 144, 112, 7, 48, 117, 6,
            208, 32, 6, 224, 117, 6, 192, 108, 6, 16,
            44, 2, 0, 112, 7, 32, 17, 22, 144, 36,
            18, 0, 97, 7, 64, 32, 6, 192, 101, 6,
            240, 8, 22, 80, 100, 2, 192, 13, 22, 240,
            110, 6, 64, 105, 6, 208, 101, 6, 224, 116,
            7, 80, 109, 0, 160, 28, 18, 0, 55, 22,
            48, 14, 23, 48, 101, 6, 48, 116, 6, 80,
            53, 23, 32, 37, 22, 144, 115, 6, 144, 46,
            15, 191, 254, 255, 239
        ]
     }

     #[test]
     fn test_simple_compress() -> std::io::Result<()> {
         let mut input: &[u8] = "          ".as_bytes();
         let expected: Vec<u8> = vec![32, 2, 0, 0, 18, 0, 1, 18, 0, 32, 15, 191, 254, 255, 239];
         let mut output: Vec<u8> = Vec::new();
         let (r, w) = compress(&mut input, &mut output, true)?;
         let ratio = compression_ratio(r, w);
         eprintln!("[Compress] Bytes Read: {}, Bytes Written: {}, Compression Ratio: {:3} %", r, w, ratio);
         assert_eq!(expected, output);
         return Ok(());
     }

    #[test]
    fn test_simple_decompress() -> std::io::Result<()> {
        let mut inpu


Query instanceof SpatialDistanceQuery ? //
        RStarTreeUtil.getDistancePrioritySearcher(this, (SpatialDistanceQuery<O>) distanceQuery, maxradius, flags) : null;
  }

  @Override
  protected Logging getLogger() {
    return LOG;
  }
}
/*
 * This file is part of ELKI:
 * Environment for Developing KDD-Applications Supported by Index-Structures
 *
 * Copyright (C) 2022
 * ELKI Development Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package elki.index.tree.spatial.rstarvariants.strategies.reinsert;

import java.util.Arrays;

import elki.data.DoubleVector;
import elki.data.spatial.SpatialComparable;
import elki.data.spatial.SpatialUtil;
import elki.distance.SpatialPrimitiveDistance;
import elki.math.MathUtil;
import elki.utilities.datastructures.arraylike.ArrayAdapter;
import elki.utilities.datastructures.arrays.DoubleIntegerArrayQuickSort;
import elki.utilities.documentation.Reference;

/**
 * Reinsert objects on page overflow, starting with farther objects first (even
 * when they will likely be inserted into the same page again!)
 *

 * Alternative strategy mentioned in the R*-tree
 *

 * Reference:
 *

 * Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider, Bernhard Seeger

 * The R*-tree: an efficient and robust access method for points and
 * rectangles

 * Proc. 1990 ACM SIGMOD Int. Conf. Management of Data
 *
 * @author Erich Schubert
 * @since 0.5.0
 */
@Reference(authors = "Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider, Bernhard Seeger", //
    title = "The R*-tree: an efficient and robust access method for points and rectangles", //
    booktitle = "Proc. 1990 ACM SIGMOD Int. Conf. Management of Data", //
    url = "https://doi.org/10.1145/93597.98741", //
    bibkey = "DBLP:conf/sigmod/BeckmannKSS90")
public class FarReinsert extends AbstractPartialReinsert {
  /**
   * Constructor.
   *
   * @param reinsertAmount Amount to reinsert
   * @param distance Distance function
   */
  public FarReinsert(double reinsertAmount, SpatialPrimitiveDistance<?> distance) {
    super(reinsertAmount, distance);
  }

  @Override
  public  int[] computeReinserts(A entries, ArrayAdapter<? extends SpatialComparable, ? super A> getter, SpatialComparable page) {
    DoubleVector centroid = DoubleVector.wrap(SpatialUtil.centroid(page));
    final int size = getter.size(entries);
    double[] dist = new double[size];
    int[] idx = MathUtil.sequence(0, size);
    for(int i = 0; i < size; i++) {
      dist[i] = distance.minDist(DoubleVector.wrap(SpatialUtil.centroid(getter.get(entries, i))), centroid);
    }
    DoubleIntegerArrayQuickSort.sortReverse(dist, idx, size);

    return Arrays.copyOf(idx, (int) (reinsertAmount * size));
  }

  /**
   * Parameterization class.
   *
   * @author Erich Schubert
   */
  public static class Par extends AbstractPartialReinsert.Par {
    @Override
    public FarReinsert ma


": "Album name",
		"bitrate": 320055.29661016946,
		"bitrate_mode": "vbr"
	},
	"authorName": "Author Name",
	"filesizeInBytes": 6123133,
	"filesizeHumanReadable": "6 MB",
	"context": "",
	"fileLength": "2:31",
	"image": {
		"src": "http://example.org/wp-content/uploads/2018/04/audio-file-name-mp3-image.jpg",
		"width": 400,
		"height": 400
	},
	"thumb": {
		"src": "http://example.org/wp-content/uploads/2018/04/audio-file-name-mp3-image-240x184.jpg",
		"width": 240,
		"height": 184
	},
	"compat": {
		"item": "",
		"meta": ""
	}
}
```

## Example Usage ( ES5 )

```js
wp.blocks.registerBlockType( 'gb-m-example/single-field-block-audio', {
	title: 'Single Field Block Audio.',
	attributes: {
		audio: {
			type: 'object',
			field: {
				type: 'audio',
				fileUpload: true,
				inputUrl: true,
				mediaUploadButton: true,
				placeholder: true,
				helperFields: {
					caption: 'audioCaption', // If required.
				},
			},
		},
		audioCaption: {
			type: 'array',
			field: {
				type: 'rich-text',
				placeholder: 'Enter caption',
			},
			source: 'children',
			selector: '.audio-caption',
		},
	},

	edit: function( props, middleware ) {
		return [
			middleware.fields.audio,
		];
	},

	save: function( props ) {
		return wp.element.createElement( 'div', {},
			wp.element.createElement( 'audio', {
					className: 'audio',
					controls: true,
				},
				wp.element.createElement( 'source', {
					src: props.attributes.audio ? props.attributes.audio.url : null,
					type: props.attributes.audio ? props.attributes.audio.mime : null,
				}, null )
			),
			wp.element.createElement( 'div', {
					className: 'audio-caption'
				},
				props.attributes.audioCaption || ''
			)
		);
	},
} );
```

Read more about defining attributes on official Gutenberg [handbook](https://wordpress.org/gutenberg/handbook/designers-developers/developers/block-api/block-attributes/).

After uploading audio:

![image](https://user-images.githubusercontent.com/6297436/39365283-50925716-4a4e-11e8-8141-ffd2e2374a53.png)
# button-editable

See Example Usage

![image](https://user-images.githubusercontent.com/6297436/39367532-9f094584-4a54-11e8-8531-6825cb642d00.png)

## Properties

#### label:

A label for the field. Should not be used when field goes in block-controls.

- Type: `String`
- Required: No

#### help:

Used to add help text below the field. Should not be used when field goes in block-controls.

- Type: `String`
- Required: No

#### placement:

Defines where you want to show the field. By default a field would be added to the block however it can be added to the sidebar settings by using `inspector` or in the block-controls by using `block-controls`.

- Accepts: `block-controls`, `inspector`
- Type: `String`
- Required: No

#### helperFields:

If some helper fields are required, define a new attribute field and use the attribute key name as

`{ lin


GF0ZU1hc2s=');

@$core.Deprecated('Use repairApplicationRequestDescriptor instead')
const RepairApplicationRequest$json = {
  '1': 'RepairApplicationRequest',
  '2': [
    {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
  ],
};

/// Descriptor for `RepairApplicationRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List repairApplicationRequestDescriptor =
    $convert.base64Decode(
        'ChhSZXBhaXJBcHBsaWNhdGlvblJlcXVlc3QSEgoEbmFtZRgBIAEoCVIEbmFtZQ==');

@$core.Deprecated('Use listServicesRequestDescriptor instead')
const ListServicesRequest$json = {
  '1': 'ListServicesRequest',
  '2': [
    {'1': 'parent', '3': 1, '4': 1, '5': 9, '10': 'parent'},
    {'1': 'page_size', '3': 2, '4': 1, '5': 5, '10': 'pageSize'},
    {'1': 'page_token', '3': 3, '4': 1, '5': 9, '10': 'pageToken'},
  ],
};

/// Descriptor for `ListServicesRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List listServicesRequestDescriptor = $convert.base64Decode(
    'ChNMaXN0U2VydmljZXNSZXF1ZXN0EhYKBnBhcmVudBgBIAEoCVIGcGFyZW50EhsKCXBhZ2Vfc2'
    'l6ZRgCIAEoBVIIcGFnZVNpemUSHQoKcGFnZV90b2tlbhgDIAEoCVIJcGFnZVRva2Vu');

@$core.Deprecated('Use listServicesResponseDescriptor instead')
const ListServicesResponse$json = {
  '1': 'ListServicesResponse',
  '2': [
    {
      '1': 'services',
      '3': 1,
      '4': 3,
      '5': 11,
      '6': '.google.appengine.v1beta.Service',
      '10': 'services'
    },
    {'1': 'next_page_token', '3': 2, '4': 1, '5': 9, '10': 'nextPageToken'},
  ],
};

/// Descriptor for `ListServicesResponse`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List listServicesResponseDescriptor = $convert.base64Decode(
    'ChRMaXN0U2VydmljZXNSZXNwb25zZRI8CghzZXJ2aWNlcxgBIAMoCzIgLmdvb2dsZS5hcHBlbm'
    'dpbmUudjFiZXRhLlNlcnZpY2VSCHNlcnZpY2VzEiYKD25leHRfcGFnZV90b2tlbhgCIAEoCVIN'
    'bmV4dFBhZ2VUb2tlbg==');

@$core.Deprecated('Use getServiceRequestDescriptor instead')
const GetServiceRequest$json = {
  '1': 'GetServiceRequest',
  '2': [
    {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
  ],
};

/// Descriptor for `GetServiceRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List getServiceRequestDescriptor = $convert
    .base64Decode('ChFHZXRTZXJ2aWNlUmVxdWVzdBISCgRuYW1lGAEgASgJUgRuYW1l');

@$core.Depr


t.getGroup(groupId)?.get(memberId)?.mute(duration)
            }
        }
        return 0
    }

    fun setGroupCard(pluginId: Int, groupId: Long, memberId: Long, card: String) =
        call("CQ_setGroupCard", pluginId, 0) {
            MiraiNative.bot.getGroup(groupId)?.get(memberId)?.nameCard = card
            return 0
        }

    fun setGroupLeave(pluginId: Int, groupId: Long) = call("CQ_setGroupLeave", pluginId, 0) {
        MiraiNative.launch {
            MiraiNative.bot.getGroup(groupId)?.quit()
        }
        return 0
    }

    fun setGroupSpecialTitle(pluginId: Int, group: Long, member: Long, title: String, duration: Long) =
        call("CQ_setGroupSpecialTitle", pluginId, 0) {
            MiraiNative.bot.getGroup(group)?.get(member)?.specialTitle = title
            return 0
        }

    fun setGroupWholeBan(pluginId: Int, group: Long, enable: Boolean) = call("CQ_setGroupWholeBan", pluginId, 0) {
        MiraiNative.bot.getGroup(group)?.settings?.isMuteAll = enable
        return 0
    }

    fun getStrangerInfo(pluginId: Int, account: Long) = call("CQ_getStrangerInfo", pluginId, "") {
        return@call runBlocking {
            val profile = Mirai.queryProfile(MiraiNative.bot, account)
            return@runBlocking buildPacket {
                writeLong(account)
                writeString(profile.nickname)
                writeInt(profile.sex.ordinal)
                writeInt(profile.age)
                writeInt(profile.qLevel)
                writeString(profile.email)
                writeString(profile.sign)
            }.encodeBase64()
        }
    }

    fun getFriendList(pluginId: Int) = call("CQ_getFriendList", pluginId, "") {
        val list = MiraiNative.bot.friends
        return buildPacket {
            writeInt(list.size)
            list.forEach { qq ->
                writeShortLVPacket {
                    writeLong(qq.id)
                    writeString(qq.nick)
                    writeString(qq.remark)
                }
            }
        }.encodeBase64()
    }

    fun getGroupInfo(pluginId: Int, id: Long) = call("CQ_getGroupInfo", pluginId, "") {
        val info = MiraiNative.bot.getGroup(id)
        return if (info != null) {
            buildPacket {
                writeLong(id)
                writeString(info.name)
                writeInt(info.members.size + 1)
                //TODO: 上限
                writeInt(1000)
            }.encodeBase64()
        } else ""
    }

    fun getGroupList(pluginId: Int) = call("CQ_getGroupList", pluginId, "") {
        val list = MiraiNative.bot.groups
        return buildPacket {
            writeInt(list.size)
            list.forEach {
                writeShortLVPacket {
                    writeLong(it.id)
                    writeString(it.name)
                }
            }
        }.encodeBase64()
    }

    fun getGroupMemberInfo(pluginId: Int, groupId: Long, memberId: Long) =
        call("CQ_getGroupMemberInfoV2", pluginId, "") {
            val member = MiraiNative.bot.getGroup(groupId)?.get(memberId) ?: return ""
            return@call runBlocking {
                return@runBlocking buildPacket {
                    writeMember(member)
                }.encodeBase64()
            }
        }

    fun getGroupMemberList(pluginId: Int, groupId: Long) = call("CQ_getGroupMemberList", pluginId, "") {
        val group = MiraiNative.bot.getGroup(groupId) ?: return ""
        return@call runBlocking {


par.(*ast.FieldList)
		// Yuck.
		for i, f := range op.List {
			if m == f {
				np.List[i] = n.(*ast.Field)
			}
		}

	case *ast.FuncType:
		np := cw.newpar.(*ast.FuncType)
		switch m {
		case op.Params:
			np.Params = n.(*ast.FieldList)
		case op.Results:
			np.Results = n.(*ast.FieldList)
		}

	case *ast.InterfaceType:
		np := cw.newpar.(*ast.InterfaceType)
		np.Methods = n.(*ast.FieldList)

	case *ast.MapType:
		np := cw.newpar.(*ast.MapType)
		switch m {
		case op.Key:
			np.Key = n.(ast.Expr)
		case op.Value:
			np.Value = n.(ast.Expr)
		}

	case *ast.ParenExpr:
		np := cw.newpar.(*ast.ParenExpr)
		np.X = n.(ast.Expr)

	case *ast.SelectorExpr:
		np := cw.newpar.(*ast.SelectorExpr)
		switch m {
		case op.Sel:
			np.Sel = n.(*ast.Ident)
		case op.X:
			np.X = n.(ast.Expr)
		}

	case *ast.StarExpr:
		np := cw.newpar.(*ast.StarExpr)
		np.X = n.(ast.Expr)

	case *ast.StructType:
		np := cw.newpar.(*ast.StructType)
		np.Fields = n.(*ast.FieldList)

	default:
		if op != nil {
			panic(fmt.Sprintf("unsupported ast.Node type %T", n))
		}
		// Only the initial cw starts with nils.
		cw.newtype.expr = n.(ast.Expr)

	}
	if !isParentOfType(m) {
		return nil
	}
	return cloneWalker{
		oldtype: cw.oldtype,
		newtype: cw.newtype,
		oldpar:  m,
		newpar:  n,
	}
}

// subtype returns a Type for the subexpression e.
func (p *Type) subtype(e ast.Expr) *Type {
	// Take advantage of cloning technology.
	return (&Type{
		paramToIdents:   p.paramToIdents,
		identToParam:    p.identToParam,
		selectorToScope: p.selectorToScope,
		expr:            e,
	}).clone()
}

// Plain is true if the type has no parameters (is not generic).
func (p *Type) Plain() bool { return len(p.paramToIdents) == 0 }

type byScopeAndIdent []TypeParam

func (p byScopeAndIdent) Len() int      { return len(p) }
func (p byScopeAndIdent) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p byScopeAndIdent) Less(i, j int) bool {
	if p[i].Scope == p[j].Scope {
		return p[i].Ident < p[j].Ident
	}
	return p[i].Scope < p[j].Scope
}

// Params returns a sorted slice of parameter names.
func (p *Type) Params() []TypeParam {
	if p == nil {
		return nil
	}
	params := make([]TypeParam, 0, len(p.paramToIdents))
	for param := range p.paramToIdents {
		params = append(params, param)
	}
	sort.Sort(byScopeAndIdent(params))
	return params
}

// Refine fills in type parameters according to the provided map.
// It returns true if the refinement had any effect.
// If a parameter is not in the input map, it is left unrefined.
// If no parameters are in the input map, it does nothing.
func (p *Type) Refine(in TypeInferenceMap) (bool, error) {
	if p == nil {
		return false, ni


_1(L_1);
		return;
	}
}
IL2CPP_EXTERN_C  void KeyValuePair_2__ctor_m0E2B8624D7996D6A5BA2A81383EE983F4A9DC078_AdjustorThunk (RuntimeObject * __this, int32_t ___key0, RuntimeObject * ___value1, const RuntimeMethod* method)
{
	int32_t _offset = 1;
	KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C * _thisAdjusted = reinterpret_cast<KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C *>(__this + _offset);
	KeyValuePair_2__ctor_m0E2B8624D7996D6A5BA2A81383EE983F4A9DC078(_thisAdjusted, ___key0, ___value1, method);
}
// TKey System.Collections.Generic.KeyValuePair`2<System.Int32,System.Object>::get_Key()
IL2CPP_EXTERN_C IL2CPP_METHOD_ATTR int32_t KeyValuePair_2_get_Key_m89B687D373FBE3D230647CA0C536235E12AD829C_gshared (KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C * __this, const RuntimeMethod* method)
{
	{
		int32_t L_0 = (int32_t)__this->get_key_0();
		return (int32_t)L_0;
	}
}
IL2CPP_EXTERN_C  int32_t KeyValuePair_2_get_Key_m89B687D373FBE3D230647CA0C536235E12AD829C_AdjustorThunk (RuntimeObject * __this, const RuntimeMethod* method)
{
	int32_t _offset = 1;
	KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C * _thisAdjusted = reinterpret_cast<KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C *>(__this + _offset);
	return KeyValuePair_2_get_Key_m89B687D373FBE3D230647CA0C536235E12AD829C_inline(_thisAdjusted, method);
}
// TValue System.Collections.Generic.KeyValuePair`2<System.Int32,System.Object>::get_Value()
IL2CPP_EXTERN_C IL2CPP_METHOD_ATTR RuntimeObject * KeyValuePair_2_get_Value_mAD6801F3BC9BA1E99D4E0F72B2B420182D0494FC_gshared (KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C * __this, const RuntimeMethod* method)
{
	{
		RuntimeObject * L_0 = (RuntimeObject *)__this->get_value_1();
		return (RuntimeObject *)L_0;
	}
}
IL2CPP_EXTERN_C  RuntimeObject * KeyValuePair_2_get_Value_mAD6801F3BC9BA1E99D4E0F72B2B420182D0494FC_AdjustorThunk (RuntimeObject * __this, const RuntimeMethod* method)
{
	int32_t _offset = 1;
	KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C * _thisAdjusted = reinterpret_cast<KeyValuePair_2_tC1FD9633618D9B27E2552BBAD347EC14A6C07C2C *>(__this + _offset);
	return KeyValuePair_2_get_Value_mAD6801F3BC9BA1E99D4E0F72B2B420182D0494FC


, NullObservation): like 'think' the same thought over and over
                logger.debug('Action, NullObservation loop detected')
                return True
            elif all(
                isinstance(self.state.history[-i][1], ErrorObservation)
                for i in range(1, 4)
            ):
                # (NullAction, ErrorObservation): errors coming from an exception
                # (Action, ErrorObservation): the same action getting an error, even if not necessarily the same error
                logger.debug('Action, ErrorObservation loop detected')
                return True

        return False


Unable to determine SDK version vs. in-tree"),
    }
}

/// Download data related to the product.
///
/// The emulator may then be run with the data downloaded.
///
/// If `product_name` is None and only one viable PBM is available, that entry
/// is used.
///
/// `writer` is used to output user messages.
pub async fn get_product_data<W>(product_name: &Option<String>, mut writer: W) -> Result<()>
where
    W: Write + Sync,
{
    let data_path: PathBuf =
        ffx_config::get("pbms.data.path").await.context("config get pbms.data.path")?;
    let entries = get_pbms(/*update_metadata=*/ true).await.context("get pbms")?;
    let product_bundle =
        find_product_bundle(&entries, product_name).context("find product bundle")?;
    writeln!(writer, "Get product data for {:?}", product_bundle)?;
    let local_dir = data_path.join(&product_bundle.name);
    for image in &product_bundle.images {
        writeln!(writer, "    image: {:?}", image)?;
        match image.format.as_str() {
            "files" => {
                fetch_bundle_uri(&image.base_uri, &local_dir).await?;
            }
            "tgz" => {
                fetch_bundle_uri(&image.base_uri, &local_dir).await?;
            }
            _ =>
            // The schema currently defines only "files" or "tgz" (see RFC-100).
            // This error could be a typo in the product bundle or a new image
            // format has been added and this code needs an update.
            {
                bail!(
                    "Unexpected image format ({:?}) in product bundle ({:?}). \
                Supported formats are \"files\" and \"tgz\". \
                Please report as a bug.",
                    image.format,
                    product_name
                )
            }
        }
    }
    for package in &product_bundle.packages {
        writeln!(writer, "    package: {:?}", package.repo_uri)?;
    }
    Ok(())
}

/// Download data from any of the supported schemes listed in RFC-100, Product
/// Bundle, "bundle_uri".
///
/// Currently: "pattern": "^(?:http|https|gs|file):\/\/"
async fn fetch_bundle_uri(uri: &str, local_dir: &Path) -> Result<()> {
    if uri.starts_with("gs://") {
        fetch_from_gcs(uri, local_dir).await.context("Download from GCS.")?;
    } else if uri.starts_with("http://") || uri.starts_with("https://") {
        unimplemented!();
    } else if uri.starts_with("file://") {
        unimplemented!();
    } else {
        bail!("Unexpected URI scheme in ({:?})", uri);
    }
    Ok(())
}

#[cfg(test)]
mod tests {
    use {
        super::*,
        ffx_config::ConfigLevel,
        std::{fs::File, io::Write},
        tempfile::TempDir,
    };

    const CORE_JSON: &str = include_str!("../test_data/test_core.json");
    const IMAGES_JSON: &str = include_str!("../test_data/test_images.json");
    const PRODUCT_BUNDLE_JSON: &str = include_str!("../test_data/test_product_bundle.json");

    #[fuchsia_async::run_singlethreaded(test)]
    async fn test_get_pbms() {
        ffx_config::init(&[], None, None).expect("create test config");
        let t


initArcLengthMapper

/*======================= CoupledPolylinesIterator =========================*/

CylindricalSurfaceDewarper::CoupledPolylinesIterator::CoupledPolylinesIterator(
    const std::vector<QPointF>& imgDirectrix1,
    const std::vector<QPointF>& imgDirectrix2,
    const HomographicTransform<2, double>& pln2img,
    const HomographicTransform<2, double>& img2pln)
    : m_seq1It(imgDirectrix1.begin()),
      m_seq2It(imgDirectrix2.begin()),
      m_seq1End(imgDirectrix1.end()),
      m_seq2End(imgDirectrix2.end()),
      m_pln2img(pln2img),
      m_img2pln(img2pln),
      m_prevImgPt1(*m_seq1It),
      m_prevImgPt2(*m_seq2It),
      m_nextImgPt1(m_prevImgPt1),
      m_nextImgPt2(m_prevImgPt2),
      m_nextPlnX1(0),
      m_nextPlnX2(0) {}

bool CylindricalSurfaceDewarper::CoupledPolylinesIterator::next(QPointF& imgPt1, QPointF& imgPt2, double& plnX) {
  if ((m_nextPlnX1 < m_nextPlnX2) && (m_seq1It != m_seq1End)) {
    next1(imgPt1, imgPt2, plnX);
    return true;
  } else if (m_seq2It != m_seq2End) {
    next2(imgPt1, imgPt2, plnX);
    return true;
  } else {
    return false;
  }
}

void CylindricalSurfaceDewarper::CoupledPolylinesIterator::next1(QPointF& imgPt1, QPointF& imgPt2, double& plnX) {
  const Vec2d plnPt1(m_img2pln(m_nextImgPt1));
  plnX = plnPt1[0];
  imgPt1 = m_nextImgPt1;

  const Vec2d plnPtx(plnPt1[0], plnPt1[1] + 1);
  const Vec2d imgPtx(m_pln2img(plnPtx));

  if (QLineF(imgPt1, imgPtx).intersect(QLineF(m_nextImgPt2, m_prevImgPt2), &imgPt2) == QLineF::NoIntersection) {
    imgPt2 = m_nextImgPt2;
  }

  advance1();
  if ((m_seq2It != m_seq2End) && (Vec2d(m_nextImgPt2 - imgPt2).squaredNorm() < 1)) {
    advance2();
  }
}

void CylindricalSurfaceDewarper::CoupledPolylinesIterator::next2(QPointF& imgPt1, QPointF& imgPt2, double& plnX) {
  const Vec2d plnPt2(m_img2pln(m_nextImgPt2));
  plnX = plnPt2[0];
  imgPt2 = m_nextImgPt2;

  const Vec2d plnPtx(plnPt2[0], plnPt2[1] + 1);
  const Vec2d imgPtx(m_pln2img(plnPtx));

  if (QLineF(imgPt2, imgPtx).intersect(QLineF(m_nextImgPt1, m_prevImgPt1), &imgPt1) == QLineF::NoIntersection) {
    imgPt1 = m_nextImgPt1;
  }

  advance2();
  if ((m_seq1It != m_seq1End) && (Vec2d(m_nextImgPt1 - imgPt1).squaredNorm() < 1)) {
    advance1();
  }
}

void CylindricalSurfaceDewarper::CoupledPolylinesIterator::advance1() {
  if (++m_seq1It == m_seq1End) {
    return;
  }

  m_prevImgPt1 = m_nextImgPt1;
  m_nextImgPt1 = *m_seq1It;
  m_nextPlnX1 = m_img2pln(m_nextImgPt1)[0];
}

void CylindricalSurfaceDewarper::CoupledPolylinesIterator::advance2() {
  if


len());
        let mut k_vec = Vec::with_capacity(axes.len());
        let mut lengths = Vec::with_capacity(axes.len());
        for ax in axes {
            let points = ax.grid.len();
            forward_transforms.push(planner.plan_fft_forward(points));
            inverse_transforms.push(planner.plan_fft_inverse(points));
            let (min, max) = (-(points as isize / 2), (points as isize - 1) / 2);
            let k_x: Array1<_> = (0..=max)
                .chain(min..0)
                .map(|i| 2.0 * PI * i as f64 / ax.length())
                .collect();

            k_vec.push(k_x);
            lengths.push(ax.length());
        }

        // Calculate the full k vectors
        let mut dim = vec![k_vec.len()];
        k_vec.iter().for_each(|k_x| dim.push(k_x.len()));
        let mut k: Array<_, D::Larger> = Array::zeros(dim).into_dimensionality().unwrap();
        let mut k_abs = Array::zeros(k.raw_dim().remove_axis(Axis_nd(0)));
        for (i, (mut k_i, k_x)) in k.outer_iter_mut().zip(k_vec.iter()).enumerate() {
            k_i.lanes_mut(Axis_nd(i))
                .into_iter()
                .for_each(|mut l| l.assign(k_x));
            k_abs.add_assign(&k_i.mapv(|k| k.powi(2)));
        }
        k_abs.map_inplace(|k| *k = k.sqrt());

        // Lanczos sigma factor
        let lanczos_sigma = lanczos.map(|exp| {
            let mut lanczos = Array::ones(k_abs.raw_dim());
            for (i, (k_x, &l)) in k_vec.iter().zip(lengths.iter()).enumerate() {
                let points = k_x.len();
                let m2 = if points % 2 == 0 {
                    points as f64 + 2.0
                } else {
                    points as f64 + 1.0
                };
                let l_x = k_x.mapv(|k| (k * l / m2).sph_j0().powi(exp));
                for mut l in lanczos.lanes_mut(Axis_nd(i)) {
                    l *= &l_x;
                }
            }
            lanczos
        });

        // calculate weight functions in Fourier space and weight constants
        let mut fft_weight_functions = Vec::with_capacity(weight_functions.len());
        for wf in weight_functions {
            // Calculates the weight functions values from `k_abs`
            // Pre-allocation of empty `Vec`
            let mut scal_comp = Vec::with_capacity(wf.scalar_component_weighted_densities.len());
            // Filling array with scalar component-wise weight functions
            for wf_i in &wf.scalar_component_weighted_densities {
                scal_comp.push(wf_i.fft_scalar_weight_functions(&k_abs, &lanczos_sigma));
            }

            // Pre-allocation of empty `Vec`
            let mut vec_comp = Vec::with_capacity(wf.vector_component_weighted_densities.len());
            // Filling array with vector-valued component-wise weight functions
            for wf_i in &wf.vector_component_weighted_densities {
                vec_comp.push(wf_i.fft_vector_weight_functions(&k_abs, &k, &lanczos_sigma));
            }

            // Pre-allocation of empty `Vec`
            let mut scal_fmt = Vec::with_capacity(wf.scalar_fmt_weighted_densities.len());
            // Filling array with scalar FMT weight functions
            for wf


// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.

//go:build !ckzg || nacl || js || !cgo || gofuzz

package kzg4844

import "sync"

// ckzgAvailable signals whether the library was compiled into Geth.
const ckzgAvailable = false

// ckzgIniter ensures that we initialize the KZG library once before using it.
var ckzgIniter sync.Once

// ckzgInit initializes the KZG library with the provided trusted setup.
func ckzgInit() {
	panic("unsupported platform")
}

// ckzgBlobToCommitment creates a small commitment out of a data blob.
func ckzgBlobToCommitment(blob *Blob) (Commitment, error) {
	panic("unsupported platform")
}

// ckzgComputeProof computes the KZG proof at the given point for the polynomial
// represented by the blob.
func ckzgComputeProof(blob *Blob, point Point) (Proof, Claim, error) {
	panic("unsupported platform")
}

// ckzgVerifyProof verifies the KZG proof that the polynomial represented by the blob
// evaluated at the given point is the claimed value.
func ckzgVerifyProof(commitment Commitment, point Point, claim Claim, proof Proof) error {
	panic("unsupported platform")
}

// ckzgComputeBlobProof returns the KZG proof that is used to verify the blob against
// the commitment.
//
// This method does not verify that the commitment is correct with respect to blob.
func ckzgComputeBlobProof(blob *Blob, commitment Commitment) (Proof, error) {
	panic("unsupported platform")
}

// ckzgVerifyBlobProof verifies that the blob data corresponds to the provided commitment.
func ckzgVerifyBlobProof(blob *Blob, commitment Commitment, proof Proof) error {
	panic("unsupported platform")
}
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package blake2b

import (
	"encoding/binary"
	"math/bits"
)

// the precom


="69%"  border="1" align="center" bordercolor="#F8F8F8">

    #include <stdio.h> /*printf(), scanf()...*/

  #include <string.h> /*strlen(), strcmp()...*/

  #include <stdlib.h> /*malloc(), exit()...*/

/*----- Définitions des constantes pour le réglage de la vitesse du scan -----*/

        #define HIGH_SPEED 100

        #define MEDIUM_SPEED 500

        #define LOW_SPEED 1000

        /*----------------------------------------------------------------------------*/

/*------ Définitions des constantes relatives à la syntaxe des requêtes ------*/

        #define V4_REQUEST "ping -n 1 -w"

        #define V6_REQUEST "ping6 -n 1 -w"

        #define V4_LOOKUP "ping -a"

        #define V6_LOOKUP "ping6 -a"

        /*----------------------------------------------------------------------------*/

/*------------ Taille définit pour les allocations mémoires ------------------*/

        #define BUFFER 80

        /*----------------------------------------------------------------------------*/

/*--------------------- Constantes pour appel système ------------------------*/

        #define SCREEN_CL "cls" /*effacer les résultats du scan précédent à l'écran*/

        #define ERASE "del log.txt"/*effacer les logs du scan*/

        /*----------------------------------------------------------------------------*/

/*----------------------------- Autres ---------------------------------------*/

        #define SUCCESS 0

        #define ERROR 1

        /*----------------------------------------------------------------------------*/

/*------Définitions des structures relatives à la version des adresses IP-----*/

/*------------------------*/

        /* Structure IP version 4 */

        /*------------------------*/

typedef struct

        {

  _unsigned int d1;

  _unsigned int d2;

  _unsigned int d3;

  _unsigned int d4;

  _unsigned int f1;

  _unsigned int f2;

  _unsigned int f3;

  _unsigned int f4;

  }adress_v4;

  /*------------------------*/

/*------------------------*/

        /* Structure IP version 6 */

        /*------------------------*/

        typedef struct

        {

        _


arsbo	57.93333	15.76667
Skinnarp	57.56667	15.98333
Skinnarlyngen	57.11667	12.65
Skinnargården	59.85	13.1
Skinnarehall	57.48333	13.2
Skinnarebo	57.48333	13.2
Skinnardal	59.09944	18.43333
Skinnarbodarna	61.18306	14.18306
Skinnarberget	60.86667	15.5
Skinnarbacka	58.93333	15.46667
Skinnaråsen	60.61667	14.8
Skinnaråsen	60.63333	14.8
Skingeröd	56.21667	13.38333
Skinberga	57.18333	15.6
Skiltorp	58.05	12.2
Skiltjulke	62.8	12.16667
Skilsåker	62.44389	17.58242
Skillsta	59.81667	17.33333
Skillötsjön	59.04479	17.36389
Skillingsudd	59.43333	16.13333
Skillingsmåla	56.4	15.38333
Skillingssjön	63.38333	19
Skillingsfors	59.81667	12
Skillingmark	59.81667	12.01667
Skillingmark	59.81667	12
Skillingenäs	56.16667	15.53333
Skillingenäs	56.16667	15.53333
Skillingen	60.01667	15.98333
Skillingen	59.55	15.38333
Skillinge	59.43333	16.11667
Skillinge	55.46667	14.28333
Skillinge	56.2	15.5
Skillinge	56.25	12.98333
Skillingaryd	57.43333	14.08333
Skillingarum	57.66667	15.81667
Skillerhult	56.86667	16.15
Skillerhult	58.71667	16.93333
Skillerälven	59.78333	14.11667
Skilleby	59.05	17.6
Skillberga	58.23333	15.68333
Skillberg	59.88333	16.28333
Skiljasjön	59.03333	12.06667
Skildammen	59.83333	15.5
Skildake	63.86667	12.7
Skikkisjön	65.06667	16.46667
Skikkisjöberget	65.01667	16.56667
Skigan	62.27944	17.49611
Skiftinge	59.38937	16.53883
Skiftesön	56.15833	15.03333
Skifteryd	56.68333	13.46667
Skifteboån	56.83333	13.2
Skieryd	57.6	14.65
Skieltajaureh	66.71667	18.05
Skidträsket	65.81667	19.66667
Skidträsket	65.63333	15
Skidträskberget	65.85	19.7
Skidtjärn	61.38333	16.66667
Skidtjärn	61.21667	16.41667
Skidtjärn	61.06667	16.86667
Skidsta	63.01667	18.18333
Skidnak	66.01667	17.63333
Skidflon	63.58333	16.48333
Skidberget	65.01667	16.06667
Skidbäck	61.28333	14.53333
Skiblekåtan	65.21667	14.78333
Skevvon	67.15	17.25
Skevik	59.3


from __future__ import annotations

import openai

import llemon.sync as llemon

FILE_IDS = "openai.file_ids"
FILE_HASHES = "openai.file_hashes"

class OpenAI(llemon.OpenAILLM, llemon.OpenAISTT, llemon.OpenAITTS, llemon.OpenAIEmbedder):

    gpt5 = llemon.LLMModel("gpt-5")
    gpt5_mini = llemon.LLMModel("gpt-5-mini")
    gpt5_nano = llemon.LLMModel("gpt-5-nano")
    gpt41 = llemon.LLMModel("gpt-4.1")
    gpt41_mini = llemon.LLMModel("gpt-4.1-mini")
    gpt41_nano = llemon.LLMModel("gpt-4.1-nano")
    gpt4o = llemon.LLMModel("gpt-4o")
    gpt4o_mini = llemon.LLMModel("gpt-4o-mini")
    gpt4 = llemon.LLMModel("gpt-4")
    gpt4_turbo = llemon.LLMModel("gpt-4-turbo")
    gpt35_turbo = llemon.LLMModel("gpt-3.5-turbo")

    embedding_ada = llemon.EmbedderModel("text-embedding-ada-002")
    embedding3_small = llemon.EmbedderModel("text-embedding-3-small")
    embedding3_large = llemon.EmbedderModel("text-embedding-3-large")
    default_embedder = embedding3_small

    whisper = llemon.STTModel("whisper-1")
    gpt4o_transcribe = llemon.STTModel("gpt-4o-transcribe")
    gpt4o_mini_transcribe = llemon.STTModel("gpt-4o-mini-transcribe")
    default_stt = whisper

    tts1 = llemon.TTSModel("tts-1")
    tts1_hd = llemon.TTSModel("tts-1-hd")
    gpt4o_mini_tts = llemon.TTSModel("gpt-4o-mini-tts")
    default_tts = tts1

    def __init__(self, api_key: str) -> None:
        super().__init__()
        self.client = openai.OpenAI(api_key=api_key)


 trailing '/'.

    Raises: IndexError if too many '..' occur within the path.
    Rt.Ris..(R[RdtpopRf(R
t
path_partstpartt	tail_partt
head_parts((sCGIHTTPServer.pyR.s$+

	cCstr
tSyddl}Wntk
r.dSXy|jddaWn3tk
r{dttd|janXtS(s$Internal routine to get nobody's uidiNRiicSs|dS(Ni((tx((sCGIHTTPServer.pyt<lambda>cs(RtpwdtImportErrortgetpwnamtKeyErrortmaxtmaptgetpwall(R((sCGIHTTPServer.pyRlWs

&cCs<ytj|}Wntjk
r*tSX|jd@dkS(sTest for executable file.iIi(RtstatRuRtst_mode(R
tst((sCGIHTTPServer.pyRgs
cCstj||dS(N(R	ttest(tHandlerClasstServerClass((sCGIHTTPServer.pyRpst__main__(Rt__version__t__all__RR}RUtBaseHTTPServerR	RpRKR
RRRaRRlRt
HTTPServerRR(((sCGIHTTPServer.pyt<module>s&		'


        local actor = uworld:SpawnActor(bpClass,p,nil,nil)
        self.balls[n]=actor
        self.basepos[n]=p
        self.rot[n]=math.random(-100,100)
        uactor.objs:Add(actor)
        -- actor.Name = 'ActorCreateFromLua_'..tostring(n)
    end

    -- print("=====End test blueprint",self.bp.Name)
end

function testcase:update(tt)
    for i,actor in pairs(self.balls) do
        local p = self.basepos[i]
        local h = HitResult()
        local rot = self.rot[i]
        local v = FVector(math.sin(tt)*rot,0,0)
        local offset = FVector(0,math.cos(tt)*rot,0)
        local ok,h=actor:K2_SetActorLocation(p+v+offset,true,h,true)
    end
end

function bpcall(a,b,c,d)
    print("bpcall",a,b,c,d)
	return 1024,"return from lua 虚幻引擎"
end

function bpcall2()
    print "bpcall2 with empty args"
end

return testcase


OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/* Author: Brian Gerkey */

#include <gtest/gtest.h>
#include <ros/service.h>
#include <ros/ros.h>
#include <ros/package.h>
#include <nav_msgs/GetMap.h>
#include <nav_msgs/OccupancyGrid.h>
#include <nav_msgs/MapMetaData.h>
#include <nav_msgs/LoadMap.h>

#include "test_constants.h"

int g_argc;
char** g_argv;

class MapClientTest : public testing::Test
{
  public:
    // A node is needed to make a service call
    ros::NodeHandle* n_;

    MapClientTest()
    {
      ros::init(g_argc, g_argv, "map_client_test");
      n_ = new ros::NodeHandle();
      got_map_ = false;
      got_map_metadata_ = false;
    }

    ~MapClientTest()
    {
      delete n_;
    }

    bool got_map_;
    boost::shared_ptr<nav_msgs::OccupancyGrid const> map_;
    void mapCallback(const boost::shared_ptr<nav_msgs::OccupancyGrid const>& map)
    {
      map_ = map;
      got_map_ = true;
    }

    bool got_map_metadata_;
    boost::shared_ptr<nav_msgs::MapMetaData const> map_metadata_;
    void mapMetaDataCallback(const boost::shared_ptr<nav_msgs::MapMetaData const>& map_metadata)
    {
      map_metadata_ = map_metadata;
      got_map_metadata_ = true;
    }
};

/* Try to retrieve the map via service, and compare to ground truth */
TEST_F(MapClientTest, call_service)
{
  nav_msgs::GetMap::Request  req;
  nav_msgs::GetMap::Response resp;
  ASSERT_TRUE(ros::service::waitForService("static_map", 5000));
  ASSERT_TRUE(ros::service::call("static_map", req, resp));
  ASSERT_FLOAT_EQ(resp.map.info.resolution, g_valid_image_res);
  ASSERT_EQ(resp.map.info.width, g_valid_image_width);
  ASSERT_EQ(resp.map.info.height, g_valid_image_height);
  ASSERT_STREQ(resp.map.header.frame_id.c_str(), "map");
  for(unsigned int i=0; i < resp.map.info.width * resp.map.info.height; i++)
    ASSERT_EQ(g_valid_image_content[i], resp.map.data[i]);
}

/* Try to retrieve the map via topic, and compare to ground truth */
TEST_F(MapClientTest, subscribe_topic)
{
  ros::Subscriber sub = n_->subscribe<nav_msgs::OccupancyGrid>("map", 1, [this](auto& map){ mapCallback(map); });

  // Try a few times, because the server may not be up yet.
  int i=20;
  while(!got_map_ && i > 0)
  {
    ros::spinOnce();
    ros::Duration d = ros::Duration().fromSec(0.25);
    d.sleep();
    i--;
  }
  ASSERT_TRUE(got_map_);
  ASSERT_FLOAT_EQ(map_->info.resolution, g_valid_image_res);
  ASSERT_EQ(map_->info.width, g_valid_image_width);
  ASSERT_EQ(map_->info.height, g_valid_image_height);
  ASSERT_STREQ(map_->header.frame_id.c_str(), "map");
  for(unsigned int i=0; i < map_->info.width * map_->info.height; i++)
    ASSERT_EQ(g_valid_image_content[i], map_->data[i]);
}

/* Try to retrieve the metadata via topic, and compare to ground truth */
TEST_F(MapClientTest, subscribe_topic_metadata)
{
  ros::Subscriber sub = n_->subscribe<nav_msgs::MapMetaData>("map_metadata", 1, [this](auto& map_metadata){ mapMetaDataCallback(map_metadata); });

  // Try a few times, because the server may not be up yet.
  int i=20;
  while(!got_map_metadata_ && i > 0)
  {


BGFX_STATE_BLEND_INDEPENDENT as _;
        /// Enable alpha to coverage.
        const BLEND_ALPHA_TO_COVERAGE = bgfx_sys::BGFX_STATE_BLEND_ALPHA_TO_COVERAGE as _;
        /// Default state is write to RGB, alpha, and depth with depth test less enabled, with clockwise
        /// culling and MSAA (when writing into MSAA frame buffer, otherwise this flag is ignored).
        const DEFAULT = bgfx_sys::BGFX_STATE_DEFAULT as _;
    }
}

bitflags! {
    pub struct StencilFlags : u32 {
        const NONE = bgfx_sys::BGFX_STENCIL_NONE as _;
        const MASK = bgfx_sys::BGFX_STENCIL_MASK as _;
        const DEFAULT = bgfx_sys::BGFX_STENCIL_DEFAULT as _;
    }
}

bitflags! {
    pub struct StencilTestFlags : u32 {
        /// Enable stencil test, less.
        const LESS = bgfx_sys::BGFX_STENCIL_TEST_LESS as _;
        /// Enable stencil test, less or equal.
        const LEQUAL = bgfx_sys::BGFX_STENCIL_TEST_LEQUAL as _;
        /// Enable stencil test, equal.
        const EQUAL = bgfx_sys::BGFX_STENCIL_TEST_EQUAL as _;
        /// Enable stencil test, greater or equal.
        const GEQUAL = bgfx_sys::BGFX_STENCIL_TEST_GEQUAL as _;
        /// Enable stencil test, greater.
        const GREATER = bgfx_sys::BGFX_STENCIL_TEST_GREATER as _;
        /// Enable stencil test, not equal.
        const NOTEQUAL = bgfx_sys::BGFX_STENCIL_TEST_NOTEQUAL as _;
        /// Enable stencil test, never.
        const NEVER = bgfx_sys::BGFX_STENCIL_TEST_NEVER as _;
        /// Enable stencil test, always.
        const ALWAYS = bgfx_sys::BGFX_STENCIL_TEST_ALWAYS as _;
    }
}

bitflags! {
    pub struct StencilOpFailSFlags : u32 {
        /// Zero.
        const ZERO = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_ZERO as _;
        /// Keep.
        const KEEP = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_KEEP as _;
        /// Replace.
        const REPLACE = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_REPLACE as _;
        /// Increment and wrap.
        const INCR = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_INCR as _;
        /// Increment and clamp.
        const INCRSAT = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_INCRSAT as _;
        /// Decrement and wrap.
        const DECR = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_DECR as _;
        /// Decrement and clamp.
        const DECRSAT = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_DECRSAT as _;
        /// Invert.
        const INVERT = bgfx_sys::BGFX_STENCIL_OP_FAIL_S_INVERT as _;
    }
}

bitflags! {
    pub struct StencilOpFailZFlags : u32 {
        /// Zero.
        const ZERO = bgfx_sys::BGFX_STENCIL_OP_FAIL_Z_ZERO as _;
        /// Keep.
        const KEEP = bgfx_sys::BGFX_STENCIL_OP_FAIL_Z_KEEP as _;
        /// Replace.
        const REPLACE = bgfx_sys::BGFX_STENCIL_OP_FAIL_Z_REPLACE as _;
        /// Increment and


()) { this@apply.setTransform(a, b, c, d, 0.0, 0.0) }

      // 3:
      translate(dx, dy)

      // 4:
      with(getTransform()) { this@apply.setTransform(1.0, 0.0, 0.0, 1.0, e, f) }

      drawImage(renderingSurface.canvas.imageSource, 0.0, 0.0)

      restore()
    }
  }

  companion object {

    fun Int.toColor(): PaintColor {
      return SolidColor(this)
    }

    private val logger = Logger<Renderer>()

    private fun createNextRandomColor(): PaintColor {
      // Random argb color with 0.5 alpha
      return SolidColor(0x7F_00_00_00 + Random.nextInt(0x01_00_00_00))
    }

    private data class CanvasRenderingState(
      var identitySpaceClip: CommonShape? = DEFAULT_IDENTITY_SPACE_CLIP,
      var transform: List<Double> = DEFAULT_TRANSFORM,
      var strokeData: StrokeData = DEFAULT_STROKE_DATA,
      var font: String = DEFAULT_FONT,
      var rule: AlphaCompositeRule = DEFAULT_RULE,
      var alpha: Double = DEFAULT_ALPHA,
      var fillStyle: PaintColor? = DEFAULT_FILL_STYLE,
      var strokeStyle: PaintColor? = DEFAULT_STROKE_STYLE,
    ) {

      fun reset() {
        identitySpaceClip = DEFAULT_IDENTITY_SPACE_CLIP
        transform = DEFAULT_TRANSFORM
        strokeData = DEFAULT_STROKE_DATA
        font = DEFAULT_FONT
        rule = DEFAULT_RULE
        alpha = DEFAULT_ALPHA
        fillStyle = DEFAULT_FILL_STYLE
        strokeStyle = DEFAULT_STROKE_STYLE
      }

      companion object {

        private val DEFAULT_IDENTITY_SPACE_CLIP: CommonShape? = null
        private val DEFAULT_TRANSFORM: List<Double> = IDENTITY_LIST
        private val DEFAULT_STROKE_DATA: StrokeData = Defaults.STROKE
        private var DEFAULT_FONT: String = "${Defaults.FONT_SIZE}px Arial"
        private val DEFAULT_RULE: AlphaCompositeRule = AlphaCompositeRule.SRC_OVER
        private const val DEFAULT_ALPHA: Double = 1.0
        private val DEFAULT_FILL_STYLE: PaintColor? = null
        private val DEFAULT_STROKE_STYLE: PaintColor? = null
      }
    }

    data class RequestedRenderingState(
      var identitySpaceClip: CommonShape? = null,
      var transform: List<Double> = IDENTITY_LIST,
      var strokeData: StrokeData = Defaults.STROKE,
      var font: String = "${Defaults.FONT_SIZE}px Arial",
      var rule: AlphaCompositeRule = AlphaCompositeRule.SRC_OVER,
      var alpha: Double = 1.0,
      var paint: PaintColor? = SolidColor(Defaults.FOREGROUND_COLOR_ARGB),
    ) {

      fun setTo(other: RequestedRenderingState) {
        identitySpaceClip = other.identitySpaceClip
        transform = other.transform
        strokeData = other.strokeData
        font = other.font
        rule = other.rule
        alpha = other.alpha
        paint = other.paint
      }
    }
  }
}
/*
 * MIT License
 *
 * Copyright (c) 2019-2023 JetBrains s.r.o.
 *
 * 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 PAR


,225,2,0,128,224,16,0,128,226,0,16,128,229
	.byte 12,0,150,229,12,16,144,229,10,0,81,225,81,0,0,155,138,17,160,225,1,0,128,224,16,0,128,226,0,80,128,229
	.byte 16,0,150,229,12,16,144,229,10,0,81,225,73,0,0,155,10,17,160,225,1,0,128,224,16,0,128,226,8,16,155,229
	.byte 0,16,128,229,46,0,0,234,0,0,155,229,0,16,224,227,1,0,80,225,42,0,0,10,12,0,150,229,12,32,144,229
	.byte 0,16,155,229,1,0,82,225,58,0,0,155,129,17,160,225,1,0,128,224,16,0,128,226,12,16,150,229,12,32,145,229
	.byte 10,0,82,225,51,0,0,155,138,33,160,225,2,16,129,224,16,16,129,226,4,16,145,229,4,16,128,229,12,0,150,229
	.byte 12,16,144,229,10,0,81,225,42,0,0,155,138,17,160,225,1,0,128,224,16,0,128,226,8,16,150,229,12,32,145,229
	.byte 4,0,82,225,35,0,0,155,4,33,160,225,2,16,129,224,16,16,129,226,0,16,145,229,1,16,65,226,4,16,128,229
	.byte 8,0,150,229,1,16,138,226,12,32,144,229,4,0,82,225,24,0,0,155,4,33,160,225,2,0,128,224,16,0,128,226
	.byte 0,16,128,229,20,0,150,229,12,16,144,229,10,0,81,225,16,0,0,155,12,16,160,227,154,1,1,224,1,0,128,224
	.byte 16,0,128,226,12,16,155,229,0,16,128,229,16,16,155,229,4,16,128,229,20,16,155,229,8,16,128,229,48,0,150,229
	.byte 1,0,128,226,48,0,134,229,24,208,139,226,112,13,189,232,8,112,157,229,0,160,157,232,14,16,160,225,0,0,159,229
bl p_13

	.byte 120,6,0,2

Lme_7c8:
	.align 2
Lm_7c9:
m_System_Collections_Generic_Dictionary_2_int_System_TimeZoneInfo_TimeType_Init_int_System_Collections_Generic_IEqualityComparer_1_int:
_m_7c9:

	.byte 13,192,160,225,128,64,45,233,13,112,160,225,96,93,45,233,20,208,77,226,13,176,160,225,0,80,160,225,1,96,160,225
	.byte 2,160,160,225,0,0,86,227,33,0,0,186,4,80,139,229,0,0,90,227,2,0,0,10,0,160,139,229,8,160,139,229
	.byte 1,0,0,234
bl p_1855

	.byte 8,0,139,229,8,16,155,229,4,0,155,


quidity (USD):', pair.liquidity.usd);
      console.log('---------------------------------------');

      const geckoData = await fetchGeckoTerminalData(pair.chainId, pair.baseToken.address);
      result.push({
        baseToken: pair.baseToken.name,
        chainId: pair.chainId,
        pairAddress: pair.pairAddress,
        baseTokenAddress: pair.baseToken.address,
        liquidity: pair.liquidity.usd,
        geckoData: geckoData,
      });
    }

    return result;
  } catch (error) {
    console.error('Error fetching data from DexScreener API:', error);
  }
}
```

### `fetchGeckoTerminalData`

This function fetches data from the GeckoTerminal API based on network and token address.

**Assumptions:**
- We assume the API will return pool data sorted by liquidity.
- Only the top 3 pools based on liquidity are selected.

```javascript
export async function fetchGeckoTerminalData(chainId, tokenAddress) {
  const network = chainId === 'ethereum' ? 'eth' : chainId;
  const url = `https://api.geckoterminal.com/api/v2/networks/${network}/tokens/${tokenAddress}/pools`;

  try {
    const response = await axios.get(url);
    const data = response.data.data;

    const topPools = data.sort((a, b) => b.attributes.reserve_in_usd - a.attributes.reserve_in_usd).slice(0, 3);
    const result = [];

    for (const pool of topPools) {
      console.log('Pool Address:', pool.attributes.address);
      console.log('Network:', network);
      console.log('Liquidity (USD):', pool.attributes.reserve_in_usd);
      console.log('Dex Information:', pool.relationships.dex);
      console.log('---------------------------------------');

      const transactions = await scrapeGeckoTerminal(network, pool.attributes.address);
      result.push({
        poolAddress: pool.attributes.address,
        network: network,
        liquidity: pool.attributes.reserve_in_usd,
        dex: pool.relationships.dex,
        transactions: transactions,
      });
    }

    return result;
  } catch (error) {
    console.error('Error fetching data from GeckoTerminal API:', error);
  }
}
```

### `scrapeGeckoTerminal`

This function scrapes trading data from GeckoTerminal for a specific pool address and network. It collects the last 1000 trades and returns them in a structured format.

**Assumptions:**
- The function scrolls the page until it collects 100 unique transactions.
- Transactions are added until the set limit of 100 unique transactions is reached.

```javascript
export async function scrapeGeckoTerminal(network, poolAddress) {
  const url = `https://www.geckoterminal.com/${network}/pools/${poolAddress}`;

  try {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();

    await page.setViewport({ width: 1280, height: 800 });

    await page.goto(url, { waitUntil: "networkidle2" });
    console.log("Page loaded:", url);

    const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

    async function scrollAndCollectTransactions() {
      let transactions = [];
      let transactionSet = new Set();
      let transactionCount = 0;
      const maxTransactions = 100;

      while (transactionCount < maxTransactions) {
        const newTransactions = await page.evaluate(() => {
          const rows = Array.from(
            document.querySelectorAll("table.absolute tbody tr")


);return false;' style='cursor:pointer;'>
Table bs_street

街道表

Idx	Field Name	Data Type	Description

		*<svg width='14' height='14'><use xlink:href='#pk'/></svg>
		STREET_ID
		 int  AUTOINCREMENT
		 自增列

		*<svg width='14' height='14'><use xlink:href='#idx'/></svg>
		STREET_CODE
		 varchar( 40 )
		 街道代码

		AREA_CODE
		 varchar( 40 )
		 父级区代码

		*
		STREET_NAME
		 varchar( 50 )
		 街道名称

		*
		SHORT_NAME
		 varchar( 30 )
		 简称

		LNG
		 varchar( 20 )
		 经度

		LAT
		 varchar( 20 )
		 纬度

		SORT
		 int
		 排序

		GMT_CREATE
		 datetime
		 创建时间

		GMT_MODIFIED
		 datetime
		 修改时间

		MEMO
		 varchar( 250 )
		 备注

		DATA_STATE
		 int
		 状态

		<svg width='14' height='14'><use xlink:href='#idx'/></svg>
		TENANT_CODE
		 varchar( 32 )
		 租


/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
 */

#ifndef _CAM_VFE_TOP_COMMON_H_
#define _CAM_VFE_TOP_COMMON_H_

#define CAM_VFE_TOP_MUX_MAX 6
#define CAM_VFE_DELAY_BW_REDUCTION_NUM_FRAMES 18

#include "cam_cpas_api.h"
#include "cam_vfe_hw_intf.h"
#include "cam_vfe_soc.h"

#define CAM_VFE_TOP_MAX_REG_DUMP_ENTRIES 70

#define CAM_VFE_TOP_MAX_LUT_DUMP_ENTRIES 6

struct cam_vfe_top_priv_common {
	struct cam_isp_resource_node    mux_rsrc[CAM_VFE_TOP_MUX_MAX];
	uint32_t                        num_mux;
	uint32_t                        hw_idx;
	struct cam_axi_vote             applied_axi_vote;
	struct cam_axi_vote             req_axi_vote[CAM_VFE_TOP_MUX_MAX];
	struct cam_axi_vote             last_vote[
					CAM_VFE_DELAY_BW_REDUCTION_NUM_FRAMES];
	uint32_t                        last_counter;
	uint64_t                        total_bw_applied;
	enum cam_vfe_bw_control_action  axi_vote_control[CAM_VFE_TOP_MUX_MAX];
};

struct cam_vfe_top_reg_dump_entry {
	uint32_t reg_dump_start;
	uint32_t reg_dump_end;
};

struct cam_vfe_top_lut_dump_entry {
	uint32_t lut_word_size;
	uint32_t lut_bank_sel;
	uint32_t lut_addr_size;
};

struct cam_vfe_top_dump_data {
	uint32_t num_reg_dump_entries;
	uint32_t num_lut_dump_entries;
	uint32_t dmi_cfg;
	uint32_t dmi_addr;
	uint32_t dmi_data_path_hi;
	uint32_t dmi_data_path_lo;
	struct cam_vfe_top_reg_dump_entry
		reg_entry[CAM_VFE_TOP_MAX_REG_DUMP_ENTRIES];
	struct cam_vfe_top_lut_dump_entry
		lut_entry[CAM_VFE_TOP_MAX_LUT_DUMP_ENTRIES];
};

int cam_vfe_top_set_axi_bw_vote(struct cam_vfe_soc_private *soc_private,
	struct cam_vfe_top_priv_common *top_common, bool start_stop);

int cam_vfe_top_bw_update_v2(struct cam_vfe_soc_private *soc_private,
	struct cam_vfe_top_priv_common *top_common, void *cmd_args,
	uint32_t arg_size);

int cam_vfe_top_bw_update(struct cam_vfe_soc_private *soc_private,
	struct cam_vfe_top_priv_common *top_common, void *cmd_args,
	uint32_t arg_size);

int cam_vfe_top_bw_control(struct cam_vfe_soc_private *soc_private,
	struct cam_vfe_top_priv_common *top_common, void *cmd_args,
	uint32_t arg_size);

#endif /* _CAM_VFE_TOP_COMMON_H_ */


.svg);
}
#drupal-off-canvas .messages--warning {
  color: #734c00;
  background-color: #fdf8ed;
  background-image: url(../icons/e29700/warning.svg);
}

#drupal-off-canvas .messages--error {
  color: #a51b00;
  background-color: #fcf4f2;
  background-image: url(../icons/e32700/error.svg);
}

#drupal-off-canvas .messages--error div[role="alert"] {
  color: inherit;
  background: transparent;
}
/**
 * Views styling
 */

/* @group Forms */

/**
 * Seven positions the summary absolutely, but does not have a way to ignore
 * details without a summary so we make one up.
 *
 * @todo Neither a fieldset without legend nor a details without summary is
 *   valid HTML markup in any way. Refactor Views UI to not produce such invalid
 *   markup.
 */
details.fieldset-no-legend {
  padding-top: 0;
}

/**
 * Being extra safe here and scoping this to the add view wizard form (where
 * a layout problem occurs for the Display format details if we don't fix its
 * padding), but it's probably safe to just let it apply everywhere.
 */
#views-ui-add-form details details .seven-details__wrapper {
  padding-right: 0;
  padding-left: 0;
}

.views-display-tab details.box-padding .seven-details__wrapper {
  padding: 0;
}

.views-admin input.form-submit,
.views-ui-dialog input.form-submit,
.views-admin a.button,
.views-ui-dialog a.button {
  margin-top: 0;
  margin-right: 0; /* LTR */
  margin-bottom: 0;
}
[dir="rtl"] .views-admin input.form-submit,
[dir="rtl"] .views-ui-dialog input.form-submit,
[dir="rtl"] .views-admin a.button,
[dir="rtl"] .views-ui-dialog a.button {
  margin-right: 1em;
  margin-left: 0;
}
[dir="rtl"] .views-admin input.form-submit:first-child,
[dir="rtl"] .views-ui-dialog input.form-submit:first-child,
[dir="rtl"] .views-admin a.button:first-child,
[dir="rtl"] .views-ui-dialog a.button:first-child {
  margin-right: 0;
}

.form-radios > .form-item {
  margin-top: 3px;
}

/* @group Dependent options
 */

/* This is necessary to supersede the Seven .form-item
 * reset declaration that sets the margin to zero.
 */
.form-item-options-expose-required,
.form-item-options-expose-label,
.form-item-options-expose-field-identifier,
.form-item-options-expose-description {
  margin-left: 1.5em; /* LTR */
}
[dir="rtl"] .form-item-options-expose-required,
[dir="rtl"] .form-item-options-expose-label,
[dir="rtl"] .form-item-options-expose-field-identifier,
[dir="rtl"] .form-item-options-expose-description {
  margin-right: 1.5em;
  margin-left: 0;
}

.views-admin-dependent .form-item .form-item,
.views-admin-dependent .form-type-checkboxes,
.views-admin-dependent .form-type-radios,
.views-admin-dependent .form-item .form-item,
.form-item-options-expose-required,
.form-item-options-expose-label,
.form-item-options-expose-field


on")
    local server_interface = uci:get("pppoe-relay", section, "server_interface")
    local client_interface = uci:get("pppoe-relay", section, "client_interface")
    if server_interface and client_interface then
        status = luci.sys.call("ps | grep '/usr/sbin/pppoe-relay -S " ..
                                   server_interface .. " -C " ..
                                   client_interface ..
                                   "' | grep -v 'grep' >/dev/null")
        if status == 0 then json.status = true end
    end
    luci.http.prepare_content("application/json")
    luci.http.write_json(json)
end


ory.
    ///
    /// <returns>The thumbnail image retrieved from the Dcraw memory.</returns>
    /// <remarks>Corresponds to the C API function: libraw_dcraw_make_mem_thumb</remarks>
    public unsafe ProcessedImage MakeDcrawMemoryThumbnail()
    {
        CheckDisposed();
        IntPtr rawImage = LibRawNative.MakeDcrawMemoryThumbnail(_r, out LibRawError errorCode);
        LibRawException.ThrowIfFailed(errorCode);

        LibRawProcessedImage* image = (LibRawProcessedImage*)rawImage;
        if (Environment.OSVersion.Platform == PlatformID.Win32NT)
        {
            LibRawData data = RawData;
            if (image->Width == 0)
            {
                image->Width = data.Thumbnail.Width;
            }
            if (image->Height == 0)
            {
                image->Height = data.Thumbnail.Height;
            }
            if (image->Colors == 0)
            {
                image->Colors = (ushort)data.Thumbnail.Colors;
            }
        }

        return new ProcessedImage(image); // need to dispose by user
    }

    /// Writes the image in PPM or TIFF format using Dcraw.
    /// <param name="fileName">The output file path.</param>
    /// <remarks>Corresponds to the C API function: libraw_dcraw_ppm_tiff_writer</remarks>
    public void WriteDcrawPpmTiff(string fileName)
    {
        CheckDisposed();
        LibRawException.ThrowIfFailed(LibRawNative.WriteDcrawPpmTiff(_r, fileName));
    }

    /// Writes the thumbnail using Dcraw.
    /// <param name="fileName">The output file path.</param>
    /// <remarks>Corresponds to the C API function: libraw_dcraw_thumb_writer</remarks>
    public void WriteDcrawThumbnail(string fileName)
    {
        CheckDisposed();
        LibRawException.ThrowIfFailed(LibRawNative.WriteDcrawThumbnail(_r, fileName));
    }

    ///
    /// Get the image parameters of the raw file.
    ///
    /// <returns>The image parameters of the raw file.</returns>
    public LibRawImageParams ImageParams
    {
        get
        {
            CheckDisposed();
            IntPtr ptr = LibRawNative.GetImageParameters(_r);
            return Marshal.PtrToStructure<LibRawImageParams>(ptr);
        }
    }

    ///
    /// Gets the others image parameters.
    ///
    /// <returns>The others image parameters of the raw file.</returns>
    public LibRawImageOtherParams ImageOtherParams
    {
        get
        {
            CheckDisposed();
            IntPtr ptr = LibRawNative.GetImageOtherParameters(_r);
            return Marshal.PtrToStructure<LibRawImageOtherParams>(ptr);
        }
    }

    ///
    /// Gets the lens information used to take the photograph.
    ///
    public LibRawLensInfo LensInfo
    {
        get
        {
            CheckDisposed();
            IntPtr ptr = LibRawNative.GetLensInformation(_r);
            return Marshal.PtrToStructure<LibRawLensInfo>(ptr);
        }
    }
}


rganizations =>
                provider == Providers.Microsoft ? "Tenant" : "Org",
            TunnelAccessControlEntryType.Repositories => "Repo",
            TunnelAccessControlEntryType.PublicKeys => "Key",
            TunnelAccessControlEntryType.IPAddressRanges => "IP Range",
            _ => entryType.ToString(),
        };

        if (plural)
        {
            label += "s";
        }

        if (!string.IsNullOrEmpty(provider))
        {
            label = provider switch
            {
                Providers.Microsoft => $"AAD {label}",
                Providers.GitHub => $"GitHub {label}",
                Providers.Ssh => $"SSH {label}",
                Providers.IPv4 => label.Replace("IP", "IPv4"),
                Providers.IPv6 => label.Replace("IP", "IPv6"),
                Providers.ServiceTag => "Service Tag",
                _ => $"{label} ({provider})",
            };
        }

        return label;
    }
}


aultChatSystemChatEvents.SayMessageRequest:FireServer("gg", "All")
					if shared.ggfunction then
						shared.ggfunction()
					end
				end
				if AutoToxicWin["Enabled"] then
					game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest:FireServer(#AutoToxicPhrases["ObjectList"] > 0 and AutoToxicPhrases["ObjectList"][math.random(1, #AutoToxicPhrases["ObjectList"])] or "EZ L TRASH KIDS", "All")
				end
			end
		end
	end)

	chatconnection = textChatService.MessageReceived:Connect(function(tab)
		local plr = tab.TextSource
		if (#AutoToxicPhrases5["ObjectList"] > 0 and toxicfindstr(tab.Text, AutoToxicPhrases5["ObjectList"]) or #AutoToxicPhrases5["ObjectList"] == 0 and (tab.Text:lower():find("hack") or tab.Text:lower():find("exploit") or tab.Text:lower():find("cheat"))) and plr ~= lplr and table.find(ignoredplayers, plr.UserId) == nil and AutoToxic["Enabled"] and AutoToxicRespond["Enabled"] then
			local custommsg = #AutoToxicPhrases4["ObjectList"] > 0 and AutoToxicPhrases4["ObjectList"][math.random(1, #AutoToxicPhrases4["ObjectList"])]
			if custommsg == lastsaid2 then
				custommsg = #AutoToxicPhrases4["ObjectList"] > 0 and AutoToxicPhrases4["ObjectList"][math.random(1, #AutoToxicPhrases4["ObjectList"])]
			else
				lastsaid2 = custommsg
			end
			if custommsg then
				custommsg = custommsg:gsub("<name>", (plr.DisplayName or plr.Name))
			end
			local msg = custommsg or "waaaa waaaa "..(plr.DisplayName or plr.Name)
			textChatService.ChatInputBarConfiguration.TargetTextChannel:SendAsync(msg)
			table.insert(ignoredplayers, plr.UserId)
		end
	end)

	local justsaid = ""
	local leavesaid = false
		connectionstodisconnect[#connectionstodisconnect + 1] = skywars["EventHandler"][skywars["Events"].GameController.onStart[1]]:connect(function(p7, p8)
			if p7 == lplr and leavesaid == false then
				leavesaid = true
				if AutoToxic["Enabled"] and AutoToxicDeath["Enabled"] then
					game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest:FireServer(#AutoToxicPhrases3["ObjectList"] > 0 and AutoToxicPhrases3["ObjectList"][math.random(1, #AutoToxicPhrases3["ObjectList"])] or "My gaming chair expired midfight.", "All")
				end
			end
			if AutoToxic["Enabled"] then
				if p8 and p8 == lplr then
					local plr = p7
					if plr and AutoToxicFinalKill["Enabled"] then
						local custommsg = #AutoToxicPhrases2["ObjectList"] > 0 and AutoToxicPhrases2["ObjectList"][math.random(1, #AutoToxicPhrases2["ObjectList"])]
						if custommsg == lastsaid then
							custommsg = #AutoToxicPhrases2["ObjectList"] > 0 and AutoToxicPhrases2["ObjectList"][math.random(1, #AutoToxicPhrases2["ObjectList"])]
						else
							lastsaid = custommsg
						end
						if custommsg then
							custommsg = custommsg:gsub("<name>", (plr.DisplayName or plr.Name))
						end
						local msg = custommsg or "L "..(plr.DisplayName or plr.Name)
						game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest:FireServer(msg, "All")
					end
				end
			end
		end


引入境外融资、上市或给予境内员工股权激励等目的的境外架构，对于已行权的员工需在行权前办理登记，否则行权资金无法汇出、收益无法回流。

# 2025-08-14

今天了解了香港对RWA的监管，尤其是其双轨制框架。即由香港证券及期货事务监察委员会和香港金融管理局根据资产的法律性质和参与机构的类型进行分工协作。简单来说，RWA当代币以股票、债券或集体投资计划作为底层资产时，即由证券及期货事务监察委员会负责监管（Tokenised Security，代币证券化）。金管局的监管职责则主要覆盖由其监管的认可机构（Authorized Institutions, AIs），即持牌银行、有限制牌照银行和接受存款公司，所从事的数字资产相关业务，包括认可机构销售和分销非证券代币化产品，例如代币化的存款或某些与货币、利率挂钩的结构性产品。同时，金管局负责为认可机构的数字资产托管业务制定监管标准，并牵头建立法币稳定币发行人发牌制度。
一、RWA证券化代币
判断一个RWA产品是否受证监会监管的首要步骤，是确定其是否构成SFO所定义的“证券”。核心原则是“穿透式”（see-through）监管。如果一个代币赋予持有人的权利等同于传统证券（如公司的股份、债权或分享利润的权利），那么该代币将被认定为证券，即“代币化证券”或“证券型代币”（Security Token）。
二、

# 2025-08-13

今天参加了分享会，内容是本地搭建区块链网络。此外，我还补充学习了智能合约，以在区块链上创建一台杯糕贩卖机refill)、杯糕价格1ETH/个，只有机器所有者可以补货作为案例。

# 2025-08-12

今天了解了web 3求职可能存在的风险，了解了一些较为常见的罪名，比如帮信罪，洗钱罪等。在加入行业初期可能需要谨慎。

# 2025-08-11

今天学习了web3中可能涉及的民商事争议。以虚拟货币买卖为例，国家目前禁止虚拟货币作为法偿工具，涉及“币币交易”的合同，法院通常不予支持。因价格波动、对价不明、交付失败产生的�


,$FE,$81
  DC.B      $01,'}',$FE,$83,$01,'{',$FE,$85
  DC.B      $01,'y',$FE,$87,$01,'v',$FE,$8A
  DC.B      $01,'s',$FE,$8D,$01,'o',$FE,$91
  DC.B      $01,'k',$FE,$95,$01,'g',$FE,$99
  DC.B      $01,'b',$FE,$9E,$01,'\',$FE,$A4
  DC.B      $01,'W',$FE,$A9,$01,'P',$FE,$B0
  DC.B      $01,'J',$FE,$B6,$01,'C',$FE,$BD
  DC.B      $01,'<',$FE,$C4,$01,'4',$FE,$CC
  DC.B      $01,',',$FE,$D4,$01,'#',$FE,$DD
  DC.B      $01,$1B,$FE,$E5,$01,$12,$FE,$EE
  DC.B      $01,$08,$FE,$F8,$00,$FF,$FF,$01
  DC.B      $00,$F5,$FF,$0B,$00,$EB,$FF,$15
  DC.B      $00,$E1,$FF,$1F,$00,$D6,$FF,'*'
  DC.B      $00,$CB,$FF,'5',$00,$C0,$FF,'@'
  DC.B      $00,$B5,$FF,'K',$00,$A9,$FF,'W'
  DC.B      $00,$9E,$FF,'b',$00,$92,$FF,'n'
  DC.B      $00,$86,$FF,'z',$00,'z',$FF,$86
  DC.B      $00,'n',$FF,$92,$00,'b',$FF,$9E
  DC.B      $00,'V',$FF,$AA,$00,'J',$FF,$B6
  DC.B      $00,'=',$FF,$C3,$00,'1',$FF,$CF
  DC.B      $00,'%',$FF,$DB,$00,$18,$FF,$E8
  DC.B      $00,$0C,$FF,$F4,$00,$00,$00,$00
  DC.B      $FF,$F4,$00,$0C,$FF,$E8,$00,$18
  DC.B      $FF,$DC,$00,'$',$FF,$D0,$00,'0'
  DC.B      $FF,$C4,$00,'<',$FF,$B8,$00,'H'
  DC.B      $FF,$AD,$00,'S',$FF,$A1,$00,'_'
  DC.B      $FF,$96,$00,'j',$FF,$8B,$00,'u'
  DC.B      $FF,$80,$00,$80,$FF,'u',$00,$8B
  DC.B      $FF,'j',$00,$96,$FF,'`',$00,$A0
  DC.B      $FF,'V',$00,$AA,$FF,'L',$00,$B4
  DC.B      $FF,'B',$00,$BE,$FF,'9',$00,$C7
  DC.B      $FF,'0',$00,$D0,$FF,$27,$00,$D9
  DC.B      $FF,$1F,$00,$E1,$FF,$17,$00,$E9
  DC.B      $FF,$0F,$00,$F1,$FF,$08,$00,$F8
  DC.B      $FF,$00,$01,$00,$FE,$FA,$01,$06
  DC.B      $FE,$F3,$01,$0D,$FE,$ED,$01,$13
  DC.B      $FE,$E7,$01,$19,$FE,$E2,$01,$1E
  DC.B      $FE,$DD,$01,'#',$FE,$D9,$01,$27
  DC.B      $FE,$D4,$01,',',$FE,$D1,$01,'/'
  DC.B      $FE,$CD,$01,'3',$FE,$CA,$01,'6'
  DC.


14, (=0xfff9c000)
	add     r0, r5, #0x4
	sub     r2, r1, r2
	bl      Function_21dde14
	add     sp, #0xc
	pop     {r3-r6,pc}

branch_21e25b4: @ 21e25b4 :thumb
	add     r0, r5, #0x4
	bl      Function_21dde74
	mov     r6, r0
	ldr     r0, [r5, #0x4]
	ldr     r1, [r5, #0x0]
	bl      Function_2020a50
	cmp     r6, #0x1
	bne     branch_21e2606
	mov     r0, r4
	bl      Function_21ddd7c
	cmp     r0, #0x1
	bne     branch_21e2606
	ldr     r0, [r4, #0x0]
	add     sp, #0xc
	.hword  0x1c40 @ add r0, r0, #0x1
	str     r0, [r4, #0x0]
	pop     {r3-r6,pc}

branch_21e25dc: @ 21e25dc :thumb
	mov     r0, #0x0
	bl      SetBrightnessOfBothScreens
	ldr     r0, [pc, #0x34] @ 0x21e2618, (=REG_BG0HOFS)
	mov     r1, #0x0
	str     r1, [r0, #0x0]
	str     r1, [r0, #0x4]
	str     r1, [r0, #0x8]
	str     r1, [r0, #0xc]
	ldr     r1, [r4, #0x14]
	cmp     r1, #0x0
	beq     branch_21e25f8
	mov     r0, #0x1
	str     r0, [r1, #0x0]
branch_21e25f8: @ 21e25f8 :thumb

	ldr     r0, [r5, #0x1c]
	bl      Function_21ddf74
	mov     r0, r4
	mov     r1, r6
	bl      Function_21ddc28
branch_21e2606: @ 21e2606 :thumb
	add     sp, #0xc
	pop     {r3-r6,pc}
@ 0x21e260a

.align 2
.word 0xffffe000 @ 0x21e260c
.word 0xffff4000 @ 0x21e2610
.word 0xfff9c000 @ 0x21e2614
.word REG_BG0HOFS @ 0x21e2618

.thumb
Function_21e261c: @ 21e261c :thumb
	push    {r3-r6,lr}
	add     sp, #-0x14
	mov     r4, r1
	mov     r6, r0
	ldr     r0, [r4, #0x0]
	ldr     r5, [r4, #0xc]
	cmp     r0, #0x6
	bls     branch_21e262e
	b       branch_21e2740
@ 0x21e262e

.thumb
branch_21e262e: @ 21e262e :thumb
	add     r0, r0, r0
	add     r0, pc
	ldrh    r0, [r0, #0x6]
	lsl     r0, r0, #16
	asr     r0, r0, #16
	add     pc, r0
@ 0x21e263a

Jumppoints_21e263a:
.hword branch_21e2648 - Jumppoints_21e263a - 2


4
     aca:	44 19       	shlr8	r4
     acc:	44 01       	shlr	r4
     ace:	24 5b       	or	r5,r4

00000ad0 <Mslgbfr_1>:
     ad0:	e5 f8       	mov	#-8,r5
     ad2:	24 59       	and	r5,r4
     ad4:	44 08       	shll2	r4
     ad6:	30 4c       	add	r4,r0

00000ad8 <Mslgbfr_2>:
     ad8:	e5 04       	mov	#4,r5
     ada:	45 18       	shll8	r5
     adc:	01 1c       	mov.b	@(r0,r1),r1
     ade:	30 5c       	add	r5,r0
     ae0:	02 2c       	mov.b	@(r0,r2),r2
     ae2:	30 5c       	add	r5,r0
     ae4:	00 3c       	mov.b	@(r0,r3),r0
     ae6:	cb 20       	or	#32,r0
     ae8:	60 08       	swap.b	r0,r0
     aea:	42 08       	shll2	r2
     aec:	42 00       	shll	r2
     aee:	30 2c       	add	r2,r0
     af0:	40 08       	shll2	r0
     af2:	21 0b       	or	r0,r1
     af4:	85 82       	mov.w	@(4,r8),r0
     af6:	41 28       	shll16	r1
     af8:	21 0d       	xtrct	r0,r1
     afa:	85 84       	mov.w	@(8,r8),r0
     afc:	1b 11       	mov.l	r1,@(4,r11)
     afe:	00 0b       	rts
     b00:	81 be       	mov.w	r0,@(28,r11)

00000b02 <MsCalc_Light_PAL>:
     b02:	00 28       	clrmac
     b04:	64 f3       	mov	r15,r4
     b06:	05 12       	stc	gbr,r5
     b08:	75 4c       	add	#76,r5
     b0a:	05 4f       	mac.l	@r4+,@r5+
     b0c:	05 4f       	mac.l	@r4+,@r5+
     b0e:	50 81       	mov.l	@(4,r8),r0
     b10:	05 4f       	mac.l	@r4+,@r5+
     b12:	e1 07       	mov	#7,r1
     b14:	05 0a       	sts	mach,r5
     b16:	04 1a       	sts	macl,r4
     b18:	25 58       	tst	r5,r5
     b1a:	8d 05       	bt.s	b28 <MslgbfrPL_1>
     b1c:	75 01       	add	#1,r5
     b1e:	25 58       	tst	r5,r5
     b20:	8d 03       	bt.s	b2a <MslgbfrPL_1a>
     b22:	45 11       	cmp/pz	r5
     b24:	8f 07       	bf.s	b36 <MslgbfrPL_2>
     b26:	e4 ff       	mov	#-1,r4

00000b28 <MslgbfrPL_1>:
     b28:	e5 08       	mov	#8,r5

00000b2a <M


让提供商使用默认值
			})
			cancel()

			if err != nil {
				invalidCount++
				keyResults = append(keyResults, map[string]interface{}{
					"index": i,
					"valid": false,
					"error": err.Error(),
				})
			} else {
				validCount++
				keyResults = append(keyResults, map[string]interface{}{
					"index": i,
					"valid": true,
					"error": "",
				})
			}
		}

		groupsStatus[groupID] = map[string]interface{}{
			"group_name":    group.Name,
			"provider_type": group.ProviderType,
			"test_model":    testModel,
			"total_keys":    len(group.APIKeys),
			"valid_keys":    validCount,
			"invalid_keys":  invalidCount,
			"key_results":   keyResults,
			"last_checked":  time.Now().Format("2006-01-02 15:04:05"),
		}
	}

	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"data":    groupsStatus,
	})
}

// handleTestModels 处理测试模型加载请求
func (s *MultiProviderServer) handleTestModels(c *gin.Context) {
	var testGroup struct {
		Name             string   `json:"name"`
		ProviderType     string   `json:"provider_type"`
		BaseURL          string   `json:"base_url"`
		Enabled          bool     `json:"enabled"`
		Timeout          int      `json:"timeout"`
		MaxRetries       int      `json:"max_retries"`
		RotationStrategy string   `json:"rotation_strategy"`
		APIKeys          []string `json:"api_keys"`
	}

	if err := c.ShouldBindJSON(&testGroup); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"success": false,
			"message": "Invalid request data: " + err.Error(),
		})
		return
	}

	// 验证必需字段
	if testGroup.ProviderType == "" || testGroup.BaseURL == "" || len(testGroup.APIKeys) == 0 {
		c.JSON(http.StatusBadRequest, gin.H{
			"success": false,
			"message": "Provider type, base URL, and at least one API key are required",
		})
		return
	}

	// 创建临时的UserGroup配置
	tempGroup := &internal.UserGroup{
		Name:             testGroup.Name,
		ProviderType:     testGroup.ProviderType,
		BaseURL:          testGroup.BaseURL,
		Enabled:          testGroup.Enabled,
		Timeout:          time.Duration(testGroup.Timeout) * time.Second,
		MaxRetries:       testGroup.MaxRetries,
		RotationStrategy: testGroup.RotationStrategy,
		APIKeys:          testGroup.APIKeys,
	}

	// 使用第一个API密钥来测试模型加载
	if len(testGroup.APIKeys) == 0 {
		c.JSON(http.StatusBadRequest, gin.H{
			"success": false,
			"message": "No API keys provided",
		})
		return
	}

	// 创建提供商配置
	providerConfig := &providers.ProviderConfig{
		BaseURL:      tempGroup.BaseURL,
		APIKey:       testGroup.APIKeys[0], // 使用第一个密钥进行测试
		Timeout:      tempGroup.Timeout,
		MaxRetries:   tempGroup.MaxRetries,
		ProviderType: tempGroup.ProviderType,
	}

	// 获取提供商实例
	provider, err := s.pr


นจะใช้ได้เฉพาะเมื่อ forks กำลังเรียกใช้โปรโตคอลที่สามารถตรวจสอบการพิสูจน์ของกันและกันได้

ผู้โจมตีอาจพยายามหาฮาร์ดฟอร์กที่เป็นการโต้เถียงซึ่งจงใจทำให้การพิสูจน์การฟันของส้อมใช้ไม่ได้ในเวอร์ชันเก่าของเชน ทางเลือกที่จะทำให้การย้อนกลับไม่เป็นความจริง และแนะนำปัญหาที่ไม่มีความเสี่ยงในขณะที่สนับสนุนให้ผู้ตรวจสอบความถูกต้องตรวจสอบทั้งสองโซ่ หว่านความโกลาหลและ แบ่งมูลค่าของเครือข่าย

ต่างจากส้อม Proof of Work ที่เป็นอันตราย ซึ่งนักขุดจะเปลืองไฟฟ้าจากการขุดส้อมใหม่ ผู้ตรวจสอบบนส้อม Proof of Stake ใหม่นี้ไม่เพียงแต่จะตรวจสอบความถูกต้องเท่านั้น เนื่องจากไม่มีอะไรเสี่ยง แต่มีแรงจูงใจให้ทำเช่นนั้นเท่าที่ควร ลงเอยด้วยการเป็นลูกโซ่แห่งชัยชนะ - ฝ่ายเดียวที่มีคุณค่าในอนาคต

### การระงับข้อพิพาทที่หยุดชะงัก

อีกทางหนึ่ง สมมติว่าทั้งสองฝ่ายของการแบ่ง _ทำ_ รู้จักการพิสูจน์การฟันของกันและกัน ห่วงโซ่ก็มีปัญหาที่แตกต่างกัน: การแก้ปัญหาความแตกต่างที่ถูกต้องตามกฎหมายในความคิดเห็นที่จะส่งผลให้เกิดการแบ่งลูกโซ่บนเครือข่าย Proof of Work

Ethereum Classic เป็นตัวอย่างที่ยอดเยี่ยมของ "


-- Prints memory ranges of the DF process.
--[====[

devel/lsmem
===========
Prints memory ranges of the DF process. Useful for checking whether a pointer is
valid, whether a certain library/plugin is loaded, etc.

]====]

function range_contains_any(range, addrs)
    for _, a in ipairs(addrs) do
        if a >= range.start_addr and a < range.end_addr then
            return true
        end
    end
    return false
end

function range_name_match_any(range, names)
    for _, n in ipairs(names) do
        if range.name:lower():find(n, 1, true) or range.name:lower():find(n) then
            return true
        end
    end
    return false
end

local args = {...}
local filter_addrs = {}
local filter_names = {}
for _, arg in ipairs(args) do
    if arg:lower():startswith('0x') th


using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using RunGroopWebApp.Data;
using RunGroopWebApp.Data.Enum;
using RunGroopWebApp.Interfaces;
using RunGroopWebApp.Models;
using RunGroopWebApp.Repository;
using RunGroopWebApp.Scraper.Data;
using RunGroopWebApp.Scraper.Extensions;
using RunGroopWebApp.Scraper.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RunGroopWebApp.Scraper.Services
{
    public class AtraScraper : IAtraScraper
    {
        private IRaceRepository _raceRepo;
        private IWebDriver _driver;
        public AtraScraper()
        {
            _driver = new ChromeDriver();
        }

        public void Run()
        {
            IterateOverRaceElements();
        }

        public IReadOnlyCollection<IWebElement> GetElements()
        {
            return _driver.FindElements(By.CssSelector("span[itemprop='name']"));
        }

        public void IterateOverRaceElements()
        {
            _driver.Navigate().GoToUrl("https://trailrunner.com/race-calendar/");
            var pageNumbers = _driver.FindElements(By.CssSelector("a[class='page-numbers']"));
            for (int i = 0; i < pageNumbers.Count; i++)
            {
                    if(i >= 1)
                    {
                        pageNumbers = _driver.FindElements(By.CssSelector("a[class='page-numbers']"));
                        pageNumbers.ElementAt(i).Click();
                    }
                    var pageElements = GetElements();
                    for (int j = 0; j < pageElements.Count; j++)
                    {
                        try
                        {
                            pageElements = _driver.FindElements(By.CssSelector("span[itemprop='name']"));
                            var element = pageElements.ElementAt(j);
                            element.Click();
                            var race = new Race()
                            {
                                Title = _driver.FindElement(By.CssSelector("h1[class='event-title']")).Text ?? "",
                                Description = _driver.FindElement(By.CssSelector("div[class=


te Folded Reload
	WORD $0x00013403 // ld	s0, 0(sp)                       # 8-byte Folded Reload
	WORD $0x01010113 // addi	sp, sp, 16

LBB6_10:
	RET

LBB6_11:
	WORD $0x0017d713 // srli	a4, a5, 1
	WORD $0x40e006b3 // neg	a3, a4
	WORD $0x00c6f6b3 // and	a3, a3, a2
	WORD $0x00179793 // slli	a5, a5, 1
	WORD $0x0d107857 // vsetvli	a6, zero, e32, m2, ta, ma
	WORD $0x00068813 // mv	a6, a3
	WORD $0x00050893 // mv	a7, a0
	WORD $0x00058293 // mv	t0, a1

LBB6_12:
	WORD $0x2282e407    // vl2re32.v	v8, (t0)
	WORD $0x2288e507    // vl2re32.v	v10, (a7)
	WORD $0x0aa41457    // vfsub.vv	v8, v10, v8
	WORD $0x22888427    // vs2r.v	v8, (a7)
	WORD $0x00f282b3    // add	t0, t0, a5
	WORD $0x40e80833    // sub	a6, a6, a4
	WORD $0x00f888b3    // add	a7, a7, a5
	BNEZ A6, LBB6_12
	BEQ  A3, A2, LBB6_9
	JMP  LBB6_7

TEXT ·vmul_to(SB), $0-32
	MOV  a+0(FP), A0
	MOV  b+8(FP), A1
	MOV  c+16(FP), A2
	MOV  n+24(FP), A3
	BLEZ A3, LBB7_8
	WORD $0xc2202873    // csrr	a6, vlenb
	WORD $0x00185713    // srli	a4, a6, 1
	WORD $0x01000793    // li	a5, 16
	BLTU A5, A4, LBB7_3
	WORD $0x01000713    // li	a4, 16

LBB7_3:
	WORD $0xff010113    // addi	sp, sp, -16
	WORD $0x00113423    // sd	ra, 8(sp)                       # 8-byte Folded Spill
	WORD $0x00813023    // sd	s0, 0(sp)                       # 8-byte Folded Spill
	WORD $0x01010413    // addi	s0, sp, 16
	WORD $0xff017113    // andi	sp, sp, -16
	BGEU A3, A4, LBB7_9
	WORD $0x00000713    // li	a4, 0

LBB7_5:
	WORD $0x40e686b3 // sub	a3, a3, a4
	WORD $0x00271713 // slli	a4, a4, 2
	WORD $0x00e60633 // add	a2, a2, a4
	WORD $0x00e585b3 // add	a1, a1, a4
	WORD $0x00e50533 // add	a0, a0, a4

LBB7_6:
	WORD $0x00052787 // flw	fa5, 0(a0)
	WORD $0x0005a707 // flw	fa4, 0(a1)
	WORD $0x10e7f7d3 // fmul.s	fa5, fa5, fa4
	WORD $0x00f62027 // fsw	fa5, 0(a2)
	WORD $0xfff68


      } else {
        putNull(ContextSpecificTag(TAG_PREVIOUS_PRESET_HANDLE))
      }
      if (currentPresetHandle != null) {
        put(ContextSpecificTag(TAG_CURRENT_PRESET_HANDLE), currentPresetHandle)
      } else {
        putNull(ContextSpecificTag(TAG_CURRENT_PRESET_HANDLE))
      }
      endStructure()
    }
  }

  companion object {
    private const val TAG_PREVIOUS_PRESET_HANDLE = 0
    private const val TAG_CURRENT_PRESET_HANDLE = 1

    fun fromTlv(tlvTag: Tag, tlvReader: TlvReader): ThermostatClusterActivePresetChangeEvent {
      tlvReader.enterStructure(tlvTag)
      val previousPresetHandle =
        if (!tlvReader.isNull()) {
          if (tlvReader.isNextTag(ContextSpecificTag(TAG_PREVIOUS_PRESET_HANDLE))) {
            Optional.of(tlvReader.getByteArray(ContextSpecificTag(TAG_PREVIOUS_PRESET_HANDLE)))
          } else {
            Optional.empty()
          }
        } else {
          tlvReader.getNull(ContextSpecificTag(TAG_PREVIOUS_PRESET_HANDLE))
          null
        }
      val currentPresetHandle =
        if (!tlvReader.isNull()) {
          tlvReader.getByteArray(ContextSpecificTag(TAG_CURRENT_PRESET_HANDLE))
        } else {
          tlvReader.getNull(ContextSpecificTag(TAG_CURRENT_PRESET_HANDLE))
          null
        }

      tlvReader.exitContainer()

      return ThermostatClusterActivePresetChangeEvent(previousPresetHandle, currentPresetHandle)
    }
  }
}
/*
 *
 *    Copyright (c) 2023 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package matter.controller.cluster.eventstructs

import matter.controller.cluster.*
import matter.tlv.AnonymousTag
import matter.tlv.ContextSpecificTag
import matter.tlv.Tag
import matter.tlv.TlvReader
import matter.tlv.TlvWriter

class PowerSourceClusterWiredFaultChangeEvent(val current: List<UByte>, val previous: List<UByte>) {
  override fun toString(): String = buildString {
    append("PowerSourceClusterWiredFaultChangeEvent {\n")
    append("\tcurrent : $current\n")
    append("\tprevious : $previous\n")
    append("}\n")
  }

  fun toTlv(tlvTag: Tag, tlvWriter: TlvWriter) {
    tlvWriter.apply {
      startStructure(tlvTag)
      startArray(ContextSpecificTag(TAG_CURRENT))
      for (item in current.iterator()) {
        put(AnonymousTag, item)
      }
      endArray()
      startArray(ContextSpecificTag(TAG_PREVIOUS))
      for (item in previous.iterator()) {
        put(AnonymousTag, item)
      }
      endArray()
      endStructure()
    }
  }

  companion object {
    private const val TAG_CURRENT = 0
    private const val TAG_PREVIOUS = 1

    fun fromTlv(tlvTag: Tag, tlvReader: TlvReader): PowerSourceClusterWiredFaultChangeEvent {
      tlvReader.enterStructure(tlvTag)
      val current =
        buildList<UByte> {
          tlvReader.enterArray(ContextSpecificTag(TAG_CURRENT))
          while (!tlvReader.isEndOfContainer()) {
            thi


em 0 .50em 0}h3{font-size:1.4em;margin:1.6em 0 .7em 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .2s ease-in-out}a:visited{color:#503}a:hover{color:#b62}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900;font-weight:bold}pre code{font-size:.8em;line-height:1.4em;padding:1em;display:block}code{background:#f3f3f3;font-family:"DejaVu Sans Mono",monospace;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source > summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible;min-width:max-content}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em 1em;margin:1em 0}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admoniti


        ## 00000000
/* 006EC 808683BC 8FB90098 */  lw      $t9, 0x0098($sp)
/* 006F0 808683C0 3C014120 */  lui     $at, 0x4120                ## $at = 41200000
/* 006F4 808683C4 44819000 */  mtc1    $at, $f18                  ## $f18 = 10.00
/* 006F8 808683C8 C7200164 */  lwc1    $f0, 0x0164($t9)           ## 00000164
/* 006FC 808683CC 3C014248 */  lui     $at, 0x4248                ## $at = 42480000
/* 00700 808683D0 44814000 */  mtc1    $at, $f8                   ## $f8 = 50.00
/* 00704 808683D4 46120102 */  mul.s   $f4, $f0, $f18
/* 00708 808683D8 3C014316 */  lui     $at, 0x4316                ## $at = 43160000
/* 0070C 808683DC 44819000 */  mtc1    $at, $f18                  ## $f18 = 150.00
/* 00710 808683E0 46004282 */  mul.s   $f10, $f8, $f0
/* 00714 808683E4 4600218D */  trunc.w.s $f6, $f4
/* 00718 808683E8 46009102 */  mul.s   $f4, $f18, $f0
/* 0071C 808683EC 440E3000 */  mfc1    $t6, $f6
/* 00720 808683F0 4600540D */  trunc.w.s $f16, $f10
/* 00724 808683F4 31CF00FF */  andi    $t7, $t6, 0x00FF           ## $t7 = 00000000
/* 00728 808683F8 000FC400 */  sll     $t8, $t7, 16
/* 0072C 808683FC 4600218D */  trunc.w.s $f6, $f4
/* 00730 80868400 440D8000 */  mfc1    $t5, $f16
/* 00734 80868404 00000000 */  nop
/* 00738 80868408 31AE00FF */  andi    $t6, $t5, 0x00FF           ## $t6 = 00000000
/* 0073C 8086840C 000E7A00 */  sll     $t7, $t6,  8
/* 00740 80868410 440E3000 */  mfc1    $t6, $f6
/* 00744 80868414 030FC825 */  or      $t9, $t8, $t7              ## $t9 = FA000000
/* 00748 80868418 3C0DE300 */  lui     $t5, 0xE300                ## $t5 = E3000000
/* 0074C 8086841C 31D800FF */  andi    $t8, $t6, 0x00FF           ## $t8 = 00000000
/* 00750 80868420 03387825 */  or      $t7, $t9, $t8              ## $t7 = FA000000
/* 00754 80868424 AC4F0004 */  sw      $t7, 0x0004($v0)           ## 00000004
/* 00758 80868428 8E0202D0 */  lw      $v0, 0x02D0($s0)           ## 000002D0
/* 0075C 8086842C 240E0030 */  addiu   $t6, $zero, 0x0030         ## $t6 = 00000030
/* 00760 80868430 35AD1A01 */  ori     $t5, $t5, 0x1A01           ## $t5 = E3001A01
/* 00764 80868434 244C0008