webkit-transform: rotate(210deg);
	-ms-transform: rotate(210deg);
	transform: rotate(210deg)
}

.sk-spinner-fading-circle .sk-circle9 {
	-webkit-transform: rotate(240deg);
	-ms-transform: rotate(240deg);
	transform: rotate(240deg)
}

.sk-spinner-fading-circle .sk-circle10 {
	-webkit-transform: rotate(270deg);
	-ms-transform: rotate(270deg);
	transform: rotate(270deg)
}

.sk-spinner-fading-circle .sk-circle11 {
	-webkit-transform: rotate(300deg);
	-ms-transform: rotate(300deg);
	transform: rotate(300deg)
}

.sk-spinner-fading-circle .sk-circle12 {
	-webkit-transform: rotate(330deg);
	-ms-transform: rotate(330deg);
	transform: rotate(330deg)
}

.sk-spinner-fading-circle .sk-circle2:before {
	-webkit-animation-delay: -1.1s;
	animation-delay: -1.1s
}

.sk-spinner-fading-circle .sk-circle3:before {
	-webkit-animation-delay: -1s;
	animation-delay: -1s
}

.sk-spinner-fading-circle .sk-circle4:before {
	-webkit-animation-delay: -.9s;
	animation-delay: -.9s
}

.sk-spinner-fading-circle .sk-circle5:before {
	-webkit-animation-delay: -.8s;
	animation-delay: -.8s
}

.sk-spinner-fading-circle .sk-circle6:before {
	-webkit-animation-delay: -.7s;
	animation-delay: -.7s
}

.sk-spinner-fading-circle .sk-circle7:before {
	-webkit-animation-delay: -.6s;
	animation-delay: -.6s
}

.sk-spinner-fading-circle .sk-circle8:before {
	-webkit-animation-delay: -.5s;
	animation-delay: -.5s
}

.sk-spinner-fading-circle .sk-circle9:before {
	-webkit-animation-delay: -.4s;
	animation-delay: -.4s
}

.sk-spinner-fading-circle .sk-circle10:before {
	-webkit-animation-delay: -.3s;
	animation-delay: -.3s
}

.sk-spinner-fading-circle .sk-circle11:before {
	-webkit-animation-delay: -.2s;
	animation-delay: -.2s
}

.sk-spinner-fading-circle .sk-circle12:before {
	-webkit-animation-delay: -.1s;
	animation-delay: -.1s
}

@-webkit-keyframes sk-circleFadeDelay {
	0%,100%,39% {
		opacity: 0
	}

	40% {
		opacity: 1
	}
}

@keyframes sk-circleFadeDelay {
	0%,100%,39% {
		opacity: 0
	}

	40% {
		opacity: 1
	}
}

body.rtls #page-wrapper {
	margin: 0 220px 0 0
}

body.rtls .nav-second-level li a {
	padding: 7px 35px 7px 10px
}

body.rtls .ibox-title h5 {
	float: right
}

body.rtls .pull-right {
	float: left!important
}

body.rtls .pull-left {
	float: right!important
}

body.rtls .ibox-tools,body.rtls .stat-percent {
	float: left
}

body.rtls .navbar-right {
	float: left!important
}

body.rtls .navbar-top-links li:last-child {
	margin-right: 0
}


IMG SRC="../images/zn_nouveau.gif" ALT="[ NOUVEAU ! ]" NOSAVE BORDER=0 HEIGHT=24 WIDTH=524>

Téléphonie-radiocommunications

: installations téléphoniques

Description

Par installations téléphoniques, on entend les différents

types de téléphone, analogiques ou numériques, les

fonctions disponibles sur chaque téléphone, les services

reliés au système de messagerie vocale tels les boîtes

vocales, les diffuseurs de messages simples ou à choix multiples,

la réponse automatisée.

Parmi les appareils analogiques, on retrouve les appareils Meridian

M9009. Pour les appareils numériques, la norme concerne les appareils

Meridian M2006, M2008 avec ou sans afficheur, et M2616 avec ou sans afficheur

et fonction "Mains libres" intégré. Des casques d'écoute

sont également disponibles.

Pour ce qui est de la messagerie vocale, on dénombre présentement

2500 boîtes vocales sur le campus et plus de 300 diffuseurs simples

ou multiples. Le système de messagerie vocale Meridian est de type

64 ports d'accès pour 240 heures d'enregistrement.

Clientèle

Facultés, Départements, Services

Attention : toute demande individuelle doit passer par le responsable

administratif

Comment s'en prévaloir

Pour obtenir un diffuseur de messages : Vous devez

communiq


print("Welcome to the Game:")

playing = input("Do you want to play? ")

if playing != "yes":
    quit()

print("Okay! Let's play :) ")
score = 0

answer = input("Q1: What does CPU stands for? ")
if answer.lower() == "central processing unit":
    score += 1
    print('correct!')
else:
    print("Incorrect!")

answer = input("Q2: What does GPU stands for? ")
if answer.lower() == "graphical processing unit":
    score += 1
    print("correct!")
else:
    print("Incorrect!")

answer = input("Q3:What does RAM stands for? ")
if answer.lower() == "random access memory":
    score += 1
    print("correct!")
else:
    print("Incorrect!")

answer = input("Q4: What does PSU means? ")
if answer.lower() == "power supply unit":
    score += 1
    print("correct!")
else:
    print("Incorrect!")

answer = input("Q5: capital of india? ")
if answer.lower() == "delhi":
    score += 1
    print("correct!")
else:
    print("Incorrect!")

    print("you got " + str(score) + " questions correct")


s=23)]:
                assert p - o is tslib.NaT

        for freq in ['H', '2H', '3H']:
            p = Period('NaT', freq=freq)
            for o in [offsets.Day(2), offsets.Hour(3), np.timedelta64(3, 'h'),
                      np.timedelta64(3600, 's'), timedelta(minutes=120),
                      timedelta(days=4, minutes=180)]:
                assert p - o is tslib.NaT

            for o in [offsets.YearBegin(2), offsets.MonthBegin(1),
                      offsets.Minute(), np.timedelta64(3200, 's'),
                      timedelta(hours=23, minutes=30)]:
                assert p - o is tslib.NaT

    @pytest.mark.parametrize('freq', ['M', '2M', '3M'])
    def test_nat_ops(self, freq):
        p = Period('NaT', freq=freq)
        assert p + 1 is tslib.NaT
        assert 1 + p is tslib.NaT
        assert p - 1 is tslib.NaT
        assert p - Period('2011-01', freq=freq) is tslib.NaT
        assert Period('2011-01', freq=freq) - p is tslib.NaT

    def test_period_ops_offset(self):
        p = Period('2011-04-01', freq='D')
        result = p + offsets.Day()
        exp = pd.Period('2011-04-02', freq='D')
        assert result == exp

        result = p - offsets.Day(2)
        exp = pd.Period('2011-03-30', freq='D')
        assert result == exp

        msg = r"Input cannot be converted to Period\(freq=D\)"
        with tm.assert_raises_regex(period.IncompatibleFrequency, msg):
            p + offsets.Hour(2)

        with tm.assert_raises_regex(period.IncompatibleFrequency, msg):
            p - offsets.Hour(2)

def test_period_immutable():
    # see gh-17116
    per = pd.Period('2014Q1')
    with pytest.raises(AttributeError):
        per.ordinal = 14

    freq = per.freq
    with pytest.raises(AttributeError):
        per.freq = 2 * freq

@pytest.mark.xfail(reason='GH#19834 Period parsing error')
def test_small_year_parsing():
    per1 = Period('0001-01-07', 'D')
    assert per1.year == 1
    assert per1.day == 7


URL=function(e){return nde.revokeObjectURL(e)};Mm.createBlob=function(e,t){if(t==="svg")return new window.Blob([e],{type:"image/svg+xml;charset=utf-8"});if(t==="full-json")return new window.Blob([e],{type:"application/json;charset=utf-8"});var r=Ldt(window.atob(e));return new window.Blob([r],{type:"image/"+t})};Mm.octetStream=function(e){document.location.href="data:application/octet-stream"+e};function Ldt(e){for(var t=e.length,r=new ArrayBuffer(t),n=new Uint8Array(r),i=0;i<t;i++)n[i]=e.charCodeAt(i);return r}Mm.IMAGE_URL_PREFIX=/^data:image\/\w+;base64,/});var VP=ye((Car,ade)=>{"use strict";var YN=Oa(),Mar=Dr(),Pdt=So(),Idt=Ca(),Ear=Wp(),ZN=/"/g,HM="TOBESTRIPPED",Rdt=new RegExp('("'+HM+")|("+HM+'")',"g");function Ddt(e){var t=YN.select("body").append("div").style({display:"none"}).html(""),r=e.replace(/(&[^;]*;)/gi,function(n){return n==="<"?"<":n==="&rt;"?">":n.indexOf("<")!==-1||n.indexOf(">")!==-1?"":t.html(n).text()});return t.remove(),r}function Fdt(e){return e.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&")}ade.exports=function(t,r,n){var i=t._fullLayout,a=i._paper,o=i._toppaper,s=i.width,l=i.height,u;a.insert("rect",":first-child").call(Pdt.setRect,0,0,s,l).call(Idt.fill,i.paper_bgcolor);var c=i._basePlotModules||[];for(u=0;u<c.length;u++){var f=c[u];f.toSVG&&f.toSVG(t)}if(o){var h=o.node().childNodes,d=Array.prototype.slice.call(h);for(u=0;u<d.length;u++){var v=d[u];v.childNodes.length&&a.node().appendChild(v)}}i._draggers&&i._draggers.remove(),a.node().style.background="",a.selectAll("text").attr({"data-unformatted":null,"data-math":null}).each(function(){var b=YN.select(this);if(this.style.visibility==="hidden"||this.style.display==="none"){b.remove();return}else b.style({visibility:null,display:null});var p=this.style.fontFamily;p&&p.indexOf('"')!==-1&&b.style("font-family",p.replace(ZN,HM));var C=this.style.fontWeight;C&&(C==="normal"||C==="400")&&b.style("font-weight",void 0);var E=this.style.fontStyle;E&&E==="normal"&&b.style("font-style",void 0);var A=this.style.fontVariant;A&&A==="normal"&&b.style("font-variant",void 0)}),a.selectAll(".gradient_filled,.pattern_filled").each(function(){var b=YN.select(this),p=this.style.fill;p&&p.indexOf("url(")!==-1&&b.style("fill",p.replace(ZN,HM));var C=this.style.stroke;C&&C.indexOf("url(")!==-1&&b.style("strok


[2964] = new Collation(2964, 'UCA1400_HUNGARIAN_NOPAD_AI_CI', 'utf16', 4);
charsets[2965] = new Collation(2965, 'UCA1400_HUNGARIAN_NOPAD_AI_CS', 'utf16', 4);
charsets[2966] = new Collation(2966, 'UCA1400_HUNGARIAN_NOPAD_AS_CI', 'utf16', 4);
charsets[2967] = new Collation(2967, 'UCA1400_HUNGARIAN_NOPAD_AS_CS', 'utf16', 4);
charsets[2968] = new Collation(2968, 'UCA1400_SINHALA_AI_CI', 'utf16', 4);
charsets[2969] = new Collation(2969, 'UCA1400_SINHALA_AI_CS', 'utf16', 4);
charsets[2970] = new Collation(2970, 'UCA1400_SINHALA_AS_CI', 'utf16', 4);
charsets[2971] = new Collation(2971, 'UCA1400_SINHALA_AS_CS', 'utf16', 4);
charsets[2972] = new Collation(2972, 'UCA1400_SINHALA_NOPAD_AI_CI', 'utf16', 4);
charsets[2973] = new Collation(2973, 'UCA1400_SINHALA_NOPAD_AI_CS', 'utf16', 4);
charsets[2974] = new Collation(2974, 'UCA1400_SINHALA_NOPAD_AS_CI', 'utf16', 4);
charsets[2975] = new Collation(2975, 'UCA1400_SINHALA_NOPAD_AS_CS', 'utf16', 4);
charsets[2976] = new Collation(2976, 'UCA1400_GERMAN2_AI_CI', 'utf16', 4);
charsets[2977] = new Collation(2977, 'UCA1400_GERMAN2_AI_CS', 'utf16', 4);
charsets[2978] = new Collation(2978, 'UCA1400_GERMAN2_AS_CI', 'utf16', 4);
charsets[2979] = new Collation(2979, 'UCA1400_GERMAN2_AS_CS', 'utf16', 4);
charsets[2980] = new Collation(2980, 'UCA1400_GERMAN2_NOPAD_AI_CI', 'utf16', 4);
charsets[2981] = new Collation(2981, 'UCA1400_GERMAN2_NOPAD_AI_CS', 'utf16', 4);
charsets[2982] = new Collation(2982, 'UCA1400_GERMAN2_NOPAD_AS_CI', 'utf16', 4);
charsets[2983] = new Collation(2983, 'UCA1400_GERMAN2_NOPAD_AS_CS', 'utf16', 4);
charsets[3000] = new Collation(3000, 'UCA1400_VIETNAMESE_AI_CI', 'utf16', 4);
charsets[3001] = new Collation(3001, 'UCA1400_VIETNAMESE_AI_CS', 'utf16', 4);
charsets[3002] = new Collation(3002, 'UCA1400_VIETNAMESE_AS_CI', 'utf16', 4);
charsets[3003] = new Collation(3003, 'UCA1400_VIETNAMESE_AS_CS', 'utf16', 4);
charsets[3004] = new Collation(3004, 'UCA1400_VIETNAMESE_NOPAD_AI_CI', 'utf16', 4);
charsets[3005] = new Collation(3005, 'UCA1400_VIETNAMESE_NOPAD_AI_CS', 'utf16', 4);
charsets[3006] = new Collation(3006, 'UCA1400_VIE


///
/// author: idebtor@gmail.com
///
#ifndef HASH_H
#define HASH_H

#include <string>
#include <list>
#include <utility>
#include <unordered_map>
using namespace std;

#ifdef DEBUG
#define DPRINT(func) func;
#else
#define DPRINT(func) ;
#endif

// std::pair is a STL container or class which a pair of public members called
// 'first' and 'second'. The types of two members may be the same or different.

typedef std::pair<string, int> wordcount;

struct Hash {
	int              tablesize;               // hash table size or bucket_count()
	list<wordcount>* hashtable;               // pointer to an array of buckets
	int              nelements;               // number of elements in table or size()
	double           threshold;               // max_loadfactor

	Hash(int size = 2, double lf = 1.0) {     // a magic number, use a small prime
		tablesize = size;                     // using list<wordcount> for pedagogical purpose
		hashtable = new list<wordcount>[size];// but vector<list<wordcount>> may be used
		nelements = 0;
		threshold = lf;                       // rehashes if loadfactor >= threshold
	}
	~Hash() {
		delete[] hashtable;
	}
};

// Notice that ht is passed by reference when its pointer may be changed inside
// except erase() and show(). Passing by reference may help to run the code faster.
int hashfunction(Hash* ht, int key);           // hash function for int key
int hashfunction(Hash* ht, string key);        // hash function for string key
void rehash(Hash*& ht);                        // doubles its tablesize and rehashes repeatedly if needed
void rehash(Hash*& ht, int usersize);          // resets the table by usersize passed and rehashes
bool insert(Hash*& ht, string key);            // inserts key & rehashes if loadfactor >= threshold
bool erase(Hash*& ht, string key);             // erases key and returns true if successful
list<wordcount> find(Hash* ht, string key);    // returns its bucket list if found
void clear(Hash*& ht);                         // clear the table

// reference type of ht is used here to speed-up purpose
void show(Hash*& ht, bool show_empty=false, int show_n=10); // show the table

int nextprime(int x);                          // returns the next prime
int tablesize(Hash* ht);                       // returns the table size
void tablesize(Hash*& ht, int size);           // sets the tablesize and rehashes if needed
int nelements(Hash* ht);                       // returns number of elements in the table
double loadfactor(Hash* ht);                   // returns nelements/tablesize
double threshold(Hash* ht);                    // returns threshold(or max_loadfactor)
void threshold(Hash*& ht, double th);          // sets threshold and rehashes if needed

#endif


null,\"type\":\"video\"},\"options\":{},\"tracking\":{\"category\":\"info|societe\",\"channel_type\":\"partenaire\",\"channel\":\"arte\",\"content_diffusion_date\":\"25052025\",\"content_format\":\"integrale\",\"content_id\":7156556,\"content_logged\":true,\"content_sponsored\":false,\"content_title\":\"afrique_la_france_en_berne\",\"content_type\":\"video\",\"program\":\"le_dessous_des_cartes\",\"sub_category\":\"decryptage_investigation|magazines_d_actualite\",\"video_factory_id\":\"29a34193-fec9-4c19-b389-cf989ed7492f\",\"program_id\":\"52928\",\"page\":\"afrique_la_france_en_berne\",\"page_type\":\"video\"},\"variant\":\"regular\"},{\"ariaLabel\":\"Le président et la motte de terre . Vidéo . À regarder . 1 heure 27 minutes . arte . Info . Diffusé le 06-07-2016 . C’est un de ces phénomènes tellement attachants que l’on peine à y croire. Président de l’Uruguay de 2010 à 2015, José Alberto ... . Regarder\",\"content\":{\"description\":\"C’est un de ces phénomènes tellement attachants que l’on peine à y croire. Président de l’Uruguay de 2010 à 2015, José Alberto Mujica Cordano a conquis la planète par un mélange de charisme et d’humilité, d’engagement viscéral et d’austérité exemplaire. Papy philosophe à moustache, le regard grave et empreint de malice, \\\"Pepe\\\" Mujica, qui se déf...\",\"id\":7183691,\"label\":null,\"url\":\"/info/7183691-le-president-et-la-motte-de-terre.html\",\"thumbnail\":{\"x1\":\"https://medias.france.tv/cQj2HS8MO5sOCzfL_MXh-K6N9g8/240x0/filters:quality(85):format(webp)/3/3/e/c03b9a1a76e6458895805abd07d842aa24c820b54d6d1daa6808fd2ca8779e33.jpg\",\"x2\":\"https://medias.france.tv/vjYF62LOXOEYewjkGsb93pywCmk/400x0/filters:quality(85):format(webp)/3/3/e/c03b9a1a76e6458895805abd07d842aa24c820b54d6d1daa6808fd2ca8779e33.jpg\"},\"rel\":\"nofollow\",\"broadcastBeginDate\":\"22h59\",\"captionLeading\":\"À regarder\",\"caption\":\"Diffusé le 06/07/2016\",\"category\":{\"id\":\"info\",\"label\":\"Info\"},\"channel\":\"arte\",\"csa\":\"TP\",\"cta\":\"Regarder\",\"duration\":\"1 h 27 min\",\"icons\":[],\"live\":false,\"progress\":null,\"title\":\"Le président et la motte de terre\",\"titleLeading\":null,\"type\":\"video\"},\"options\":{},\"tracking\":{\"category\":\"info\",\"channel_type\":\"partenaire\",\"channel\":\"arte\",\"content_diffusion_date\":\"06072016\",\"content_format\":\"integrale\",\"content_id\":7183691,\"content_logged\":true,\"content_sponsored\":false,\"content_title\":\"le_president_et_la_motte_de_terre\",\"content_type\":\"video\",\"video_factory_id\":\"1ac1e5f8-7796-4444-ba4c-8952ccfbf63e\",\"page\":\"le_president_et_la_motte_de_terre\",


force-redraw,0px)))}.keyboard-open .keyboard-open\:pb-\[calc\(var\(--thread-trailing-height\)\+var\(--screen-keyboard-height\,0px\)\)\]{padding-bottom:calc(var(--thread-trailing-height) + var(--screen-keyboard-height,0px))}.keyboard-open .keyboard-open\:\[--keyboard-height-multiplier\:1\]{--keyboard-height-multiplier:1}.in-focus-view .focus-view-open\:z-\[9\]{z-index:9}.panel-has-scrolled\:\[box-shadow\:--sharp-edge-top-shadow\].panel-has-scrolled{box-shadow:var(--sharp-edge-top-shadow)}.panel-is-scrolling-to-end\:\[box-shadow\:var\(--sharp-edge-bottom-shadow\)\].panel-is-scrolling-to-end{box-shadow:var(--sharp-edge-bottom-shadow)}[dir=ltr] .sidebar-open.sidebar-pinned .sidebar-open-and-pinned\:left-\[--screen-sidebar-min-width\]{left:var(--screen-sidebar-min-width)}[dir=rtl] .sidebar-open.sidebar-pinned .sidebar-open-and-pinned\:left-\[--screen-sidebar-min-width\]{right:var(--screen-sidebar-min-width)}.sidebar-open.sidebar-pinned .sidebar-open-and-pinned\:hidden{display:none}:has([data-has-thread-error]) .has-thread-error\:bg-token-main-surface-primary{background-color:var(--main-surface-primary)}:has([data-has-thread-error]) .has-thread-error\:pt-8{padding-top:2rem}.brand .brand\:m-8{margin:2rem}.brand .brand\:mx-4{margin-left:1rem;margin-right:1rem}.brand .brand\:hidden{display:none}.brand .brand\:h-10{height:2.5rem}.brand .brand\:h-16{height:4rem}.brand .brand\:h-full{height:100%}.brand .brand\:w-10{width:2.5rem}.brand .brand\:w-16{width:4rem}.brand .brand\:w-full{width:100%}.brand .brand\:bg-\[\#C7EBFA\]{--tw-bg-opacity:1;background-color:rgb(199 235 250/var(--tw-bg-opacity))}.brand .brand\:pt-0{padding-top:0}.brand .brand\:\!text-\[\#1D5ED7\]{--tw-text-opacity:1!important;color:rgb(29 94 215/var(--tw-text-opacity))!important}.brand .brand\:after\:shadow-none:after{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);content:var(--tw-content)}@media (prefers-reduced-motion:no-preference){.motion-safe\:transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.motion-safe\:duration-100{transition-duration:.1s}.motion-safe\:active\:scale-\[98\%\]:active{--tw-scale-x:98%;--tw-scale-y:98%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.motion-safe\:active\:transition-transform:active{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic


;

  var gainNode = audioContextManager.createGainNode();
  audioContextManager.setChannelCount(gainNode, numberOfOutputChannels);
  /**
   * A biquad filter node that actuates a filter effect in the audio.
   * @private {!GainNode}
   */
  this.gainNode_ = gainNode;

  var gainField = effect.getGainField();
  audioContextManager.setGain(
      gainNode,
      audioUnitConverter.convertDecibelToSample(gainField.getValue()));

  /**
   * Listeners for changes in various fields of the effect. We maintain the keys
   * for these listeners so that we can remove them when we clean up later.
   * @private {!Array.<!goog.events.Key>}
   */
  this.listeners_ = [
      goog.events.listen(gainField,
          audioCat.state.effect.field.EventType.FIELD_VALUE_CHANGED,
          this.handleGainChange_, false, this)
    ];
};
goog.inherits(audioCat.audio.junction.effect.GainEffectJunction,
    audioCat.audio.junction.Junction);

/** @override */
audioCat.audio.junction.effect.GainEffectJunction.prototype.obtainRawNode =
    function(opt_offlineAudioContext) {
  if (opt_offlineAudioContext) {
    var audioContextManager = this.audioContextManager;
    var offlineGainNode = audioContextManager.createGainNode(
        opt_offlineAudioContext);
    // Mimic the live node.
    audioContextManager.setChannelCount(
        offlineGainNode,
        audioContextManager.getChannelCount(this.gainNode_));
    audioContextManager.setGain(
        offlineGainNode,
        audioContextManager.getGain(this.gainNode_));
    offlineGainNode.connect(
        this.nextJunction.obtainRawNode(opt_offlineAudioContext));
    return offlineGainNode;
  }
  return this.gainNode_;
};

/** @override */
audioCat.audio.junction.effect.GainEffectJunction.prototype.connect =
    function(junction) {
  this.gainNode_.connect(junction.obtainRawNode());
  junction.addPreviousJunction(this);
};

/** @override */
audioCat.audio.junction.effect.GainEffectJunction.prototype.disconnect =
    function() {
  this.gainNode_.disconnect();
  // Removes javascript stores of previous/next node links.
  this.removeNextConnection();
};

/** @override */
audioCat.audio.junction.effect.GainEffectJunction.prototype.cleanUp =
    function() {
  this.disconnect();
  var listeners = this.listeners_;
  var unlistenFunction = goog.events.unlistenByKey;
  for (var i = 0; i < listeners.length; ++i) {
    unlistenFunction(listeners[i]);
  }
};

/**
 * Handles changes in gain.
 * @param {!goog.events.Event} event The associated event.
 * @private
 */
audioCat.audio.junction.effect.GainEffectJunction.prototype.handleGainChange_ =
    function(event) {
  var dbValue = /** @type {!audioCat.state.effect.field.GradientField} */ (
      event.target).getValue();
  this.audioContextManager.setGain(
      this.gainNode_,
      this.audioUnitConverter_.convertDecibelToSample(dbValue));
};
/**
 * Copyright 2016 Google Inc.
 *
 * 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.
 */
goog.provide('audioCat.action.encode.ActuateProjectStateAction');

goog


ll);
    }

    #[test]
    fn topic_deserialize() {
        let t_single_single: Topic = serde_json::from_str(
            r#""0x0000000000000000000000000000000000000000000000000000000000000000""#,
        )
        .unwrap();
        let t_single_multiple: Topic = serde_json::from_str(
            r#"["0x0000000000000000000000000000000000000000000000000000000000000000"]"#,
        )
        .unwrap();
        let t_multiple_multiple_1: Topic = serde_json::from_str(
            r#"["0x0000000000000000000000000000000000000000000000000000000000000000",["0x0000000000000000000000000000000000000000000000000000000000000000"]]"#,
        )
        .unwrap();
        let t_multiple_multiple_2: Topic = serde_json::from_str(
            r#"[null,["0x0000000000000000000000000000000000000000000000000000000000000000"]]"#,
        )
        .unwrap();
        let t_null: Topic = serde_json::from_str(r#"null"#).unwrap();

        assert_eq!(
            t_single_single,
            Topic::Single(<VariadicValue<H256>>::Single(H256::zero()))
        );
        assert_eq!(
            t_single_multiple,
            Topic::Single(<VariadicValue<H256>>::Multiple(vec![H256::zero()]))
        );
        assert_eq!(
            t_multiple_multiple_1,
            Topic::Multiple(vec![
                <VariadicValue<H256>>::Single(H256::zero()),
                <VariadicValue<H256>>::Multiple(vec![H256::zero()])
            ])
        );
        assert_eq!(
            t_multiple_multiple_2,
            Topic::Multiple(vec![
                <VariadicValue<H256>>::Null,
                <VariadicValue<H256>>::Multiple(vec![H256::zero()])
            ])
        );
        assert_eq!(t_null, Topic::Single(<VariadicValue<H256>>::Null));
    }

    #[test]
    fn filter_changes_serialize() {
        let fc_log = FilterChanges::Logs(vec![Log::build()]);
        let fc_hashes = FilterChanges::Hashes(vec![H256::zero()]);
        let fc_empty = FilterChanges::Empty;

        assert_eq!(
            serde_json::to_string(&fc_log).unwrap(),
            r#"[{"removed":true,"logIndex":"0x1","transactionIndex":"0x1","transactionHash":"0x0000000000000000000000000000000000000000000000000000000000000000","blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0x1","address":"0x0000000000000000000000000000000000000000","data":"0x","topics":[]}]"#
        );
        assert_eq!(
            serde_json::to_string(&fc_hashes).unwrap(),
            r#"["0x0000000000000000000000000000000000000000000000000000000000000000"]"#
        );
        assert_eq!(serde_json::to_string(&fc_empty).unwrap(), r#"[]"#);
    }
}
use crate::prelude::*;
use crate::utils;
use rustwide::Toolchain as RustwideToolchain;
use std::fmt;
use std::str::FromStr;

#[cfg(test)]
lazy_static! {
    /// This toolchain is used during internal tests, and must be different than TEST_TOOLCHAIN
    pub(crate) static ref MAIN_TOOLCHAIN: Toolchain = Toolchain {
        source: RustwideToolchain::dist("stable"),
        rustflags: None,
        ci_try: false,
        patches: Vec::new(),
    };

    /// This toolchain is used during internal tests, and must be different than MAIN_TOOLCHAIN
    pub(crate) static ref TEST_TOOLCHAIN: Toolchain = Toolchain {
        source: RustwideToolchain::dist("beta"),
        rustflags:


.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"],warehouse:[640,512,[],"f494","M0 488L0 171.3c0-26.2 15.9-49.7 40.2-59.4L308.1 4.8c7.6-3.1 16.1-3.1 23.8 0L599.8 111.9c24.3 9.7 40.2 33.3 40.2 59.4L640 488c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-264c0-17.7-14.3-32-32-32l-384 0c-17.7 0-32 14.3-32 32l0 264c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zm488 24l-336 0c-13.3 0-24-10.7-24-24l0-56 384 0 0 56c0 13.3-10.7 24-24 24zM128 400l0-64 384 0 0 64-384 0zm0-96l0-80 384 0 0 80-384 0z"],"arrow-up-right-dots":[576,512,[],"e4b7","M160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l50.7 0L9.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3l0 50.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L160 0zM576 80a48 48 0 1


1000);
                                            }
                                        }
                                        for (var loop = 5; loop > 0; loop--) {
                                            if (currentActivity() == "com.jd.lib.productdetail.ProductDetailActivity" || id("com.jd.lib.productdetail:id/akl").findOnce() != null) {
                                                var loop = 0;
                                                sleep(2000);
                                                if (className("android.widget.ImageView").desc("返回").clickable(true).findOnce() != null) {
                                                    className("android.widget.ImageView").desc("返回").clickable(true).findOnce().click();
                                                    toastLog("已盲点返回");
                                                    sleep(3000);
                                                } else {
                                                    Justback();
                                                    sleep(3000);
                                                }
                                            } else {
                                                toastLog("正在等待商品页加载，剩余" + loop + "秒……");
                                                sleep(2000);
                                            }
                                        }
                                        i++;
                                    }
                                }
                            }
                        }
                    } else if (id("com.jingdong.app.mall:id/fd").text("评价中心").findOnce() != null && text("没有待评价的商品哦~").findOnce() != null) {
                        var DoNotDoPJRW = 1;
                        toastLog("评价商品任务内无任何商品可评价");
                        if (className("android.widget.ImageView").desc("返回").clickable(true).findOnce() != null) {
                            className("android.widget.ImageView").desc("返回").clickable(true).findOnce().click();
                        } else {
                            Justback();
                        }
                        sleep(3000);
                        var JustWait = 0;
                    } else if (id("com.jingdong.app.mall:id/fd").text("评价中心").findOnce() != null) {
                        for (let i = 1; i > 0; i--) {
                            if (id("com.jd.lib.evaluatecenter:id/abm").className("android.widget.TextView").clickable(true).text("评价").findOnce() != null) {
                                id("com.jd.lib.evaluatecenter:id/abm").className("android.widget.TextView").clickable(true).text("评价").findOnce().click();
                                toastLog("已尝试点击第" + i + "个评价按钮");
                                sleep(3000);
                                if (id("com.jd.lib.evaluatecenter:id/akh").text("匿名评价").findOnce() != null && id("com.jd.lib.evaluatecenter:id/akh").text("匿名评价").findOnce().checked() == false) {
                                    id("com.jd.lib.evaluatecenter:id/akh").text("匿名评价").findOnce().click();
                                    toastLog("已尝试点击“匿名评价”按钮");
                                    sleep(3000);
                                }
                                if (id("com.jingdong.app.mall:id/a9b").className("android.widget.TextView").text("提交").clickable(true).findOnce() != null) {
                                    id("com.jingdong.app.mall:id/a9b").className("android.widget.TextView").text("提交").clickable(true).findOnce().click();
                                    toastLog("已尝试点击“提交评价”按钮");


ZupsAgDbObM2GAllS73uopA+3Upy4Bla9amig+uFMLk9+PI+uax4AIEjJXGNHow2ChewpV2dLEWa01AAA=);font-weight:400;font-style:normal}.ag-theme-alpine,.ag-theme-alpine-dark,.ag-theme-alpine-auto-dark{--ag-alpine-active-color: #2196f3;--ag-selected-row-background-color: rgba(33, 150, 243, .3);--ag-row-hover-color: rgba(33, 150, 243, .1);--ag-column-hover-color: rgba(33, 150, 243, .1);--ag-input-focus-border-color: rgba(33, 150, 243, .4);--ag-range-selection-background-color: rgba(33, 150, 243, .2);--ag-range-selection-background-color-2: rgba(33, 150, 243, .36);--ag-range-selection-background-color-3: rgba(33, 150, 243, .49);--ag-range-selection-background-color-4: rgba(33, 150, 243, .59);--ag-background-color: #fff;--ag-foreground-color: #181d1f;--ag-border-color: #babfc7;--ag-secondary-border-color: #dde2eb;--ag-header-background-color: #f8f8f8;--ag-tooltip-background-color: #f8f8f8;--ag-odd-row-background-color: #fcfcfc;--ag-control-panel-background-color: #f8f8f8;--ag-subheader-background-color: #fff;--ag-invalid-color: #e02525;--ag-checkbox-unchecked-color: #999;--ag-advanced-filter-join-pill-color: #f08e8d;--ag-advanced-filter-column-pill-color: #a6e194;--ag-advanced-filter-option-pill-color: #f3c08b;--ag-advanced-filter-value-pill-color: #85c0e4;--ag-checkbox-background-color: var(--ag-background-color);--ag-checkbox-checked-color: var(--ag-alpine-active-color);--ag-range-selection-border-color: var(--ag-alpine-active-color);--ag-secondary-foreground-color: var(--ag-foreground-color);--ag-input-border-color: var(--ag-border-color);--ag-input-border-color-invalid: var(--ag-invalid-color);--ag-input-focus-box-shadow: 0 0 2px .1rem var(--ag-input-focus-border-color);--ag-panel-background-color: var(--ag-header-background-color);--ag-menu-background-color: var(--ag-header-background-color);--ag-disabled-foreground-color: rgba(24, 29, 31, .5);--ag-chip-background-color: rgba(24, 29, 31, .07);--ag-input-disabled-border-color: rgba(186, 191, 199, .3);--ag-input-disabled-background-color: rgba(186, 191, 199, .15);--ag-borders: solid 1px;--ag-border-radius: 3px;--ag-borders-side-button: none;--ag-side-button-selected-background-color: transparent;--ag-header-column-resize-handle-display: block;--ag-header-column-resize-handle-width: 2px;--ag-header-column-resize-handle-height: 30%;--ag-grid-size: 6px;--ag-icon-size: 16px;--ag-row-height: calc(var(--ag-grid-size) * 7);--ag-header-height: calc(var(--ag-grid-size) * 8);--ag-list-item-height: calc(var(--ag-grid-size) * 4);--ag-column-select-indent-size: var(--ag-icon-size);--ag-set-fil


 '1': 'inline_source',
      '3': 2,
      '4': 1,
      '5': 11,
      '6': '.google.api.serviceusage.v1beta1.OverrideInlineSource',
      '9': 0,
      '10': 'inlineSource'
    },
    {'1': 'force', '3': 3, '4': 1, '5': 8, '10': 'force'},
    {
      '1': 'force_only',
      '3': 4,
      '4': 3,
      '5': 14,
      '6': '.google.api.serviceusage.v1beta1.QuotaSafetyCheck',
      '10': 'forceOnly'
    },
  ],
  '8': [
    {'1': 'source'},
  ],
};

/// Descriptor for `ImportConsumerOverridesRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List importConsumerOverridesRequestDescriptor = $convert.base64Decode(
    'Ch5JbXBvcnRDb25zdW1lck92ZXJyaWRlc1JlcXVlc3QSFgoGcGFyZW50GAEgASgJUgZwYXJlbn'
    'QSXAoNaW5saW5lX3NvdXJjZRgCIAEoCzI1Lmdvb2dsZS5hcGkuc2VydmljZXVzYWdlLnYxYmV0'
    'YTEuT3ZlcnJpZGVJbmxpbmVTb3VyY2VIAFIMaW5saW5lU291cmNlEhQKBWZvcmNlGAMgASgIUg'
    'Vmb3JjZRJQCgpmb3JjZV9vbmx5GAQgAygOMjEuZ29vZ2xlLmFwaS5zZXJ2aWNldXNhZ2UudjFi'
    'ZXRhMS5RdW90YVNhZmV0eUNoZWNrUglmb3JjZU9ubHlCCAoGc291cmNl');

@$core.Deprecated('Use importConsumerOverridesResponseDescriptor instead')
const ImportConsumerOverridesResponse$json = {
  '1': 'ImportConsumerOverridesResponse',
  '2': [
    {
      '1': 'overrides',
      '3': 1,
      '4': 3,
      '5': 11,
      '6': '.google.api.serviceusage.v1beta1.QuotaOverride',
      '10': 'overrides'
    },
  ],
};

/// Descriptor for `ImportConsumerOverridesResponse`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List importConsumerOverridesResponseDescriptor =
    $convert.base64Decode(
        'Ch9JbXBvcnRDb25zdW1lck92ZXJyaWRlc1Jlc3BvbnNlEkwKCW92ZXJyaWRlcxgBIAMoCzIuLm'
        'dvb2dsZS5hcGkuc2VydmljZXVzYWdlLnYxYmV0YTEuUXVvdGFPdmVycmlkZVIJb3ZlcnJpZGVz');

@$core.Deprecated('Use importConsumerOverridesMetadataDescriptor instead')
const ImportConsumerOverridesMetadata$json = {
  '1': 'ImportConsumerOverridesMetadata',
};

/// Descriptor for `ImportConsumerOverridesMetadata`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List importConsumerOverridesMetadataDescriptor =
    $convert.base64Decode('Ch9JbXBvcnRDb25zdW1lck92ZXJyaWRlc01ldGFkYXRh');

@$core.Deprecated('Use importAdminQuotaPoliciesResponseDescriptor instead')
const ImportAdminQuotaPoliciesResponse$json = {
  '1': 'ImportAdminQuotaPoliciesResponse',
  '2': [
    {


Value(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["logdrain_newrelic_base_uri"] = val

		val, err = v.LogdrainNewrelicLicenseKey.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["logdrain_newrelic_license_key"] = val

		val, err = v.SentinelMetricsHistoryDays.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["sentinel_metrics_history_days"] = val

		val, err = v.SentinelMetricsRefreshRateSeconds.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["sentinel_metrics_refresh_rate_seconds"] = val

		val, err = v.SentinelToken.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["sentinel_token"] = val

		val, err = v.ServerId.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["server_id"] = val

		val, err = v.UpdatedAt.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["updated_at"] = val

		val, err = v.WildcardDomain.ToTerraformValue(ctx)

		if err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		vals["wildcard_domain"] = val

		if err := tftypes.ValidateValue(objectType, vals); err != nil {
			return tftypes.NewValue(objectType, tftypes.UnknownValue), err
		}

		return tftypes.NewValue(objectType, vals), nil
	case attr.ValueStateNull:
		return tftypes.NewValue(objectType, nil), nil
	case attr.ValueStateUnknown:
		return tftypes.NewValue(objectType, tftypes.UnknownValue), nil
	default:
		panic(fmt.Sprintf("unhandled Object state in ToTerraformValue: %s", v.state))
	}
}

func (v SettingsValue) IsNull() bool {
	return v.state == attr.ValueStateNull
}

func (v SettingsValue) IsUnknown() bool {
	return v.state == attr.ValueStateUnknown
}

func (v SettingsValue) String() string {
	return "SettingsValue"
}

func (v SettingsValue) ToObjectValue(ctx context.Context) (basetypes.ObjectValue, diag.Diagnostics) {
	var diags diag.Diagnostics

	attributeTypes := map[string]attr.Type{
		"concurrent_builds":                     basetypes.Int64Type{},
		"created_at":                            basetypes.StringType{},
		"delete_unused_networks":                basetypes.BoolType{},
		"delete_unused_volumes":                 basetypes.BoolType{},
		"docker_cleanup_frequency":              basetypes.StringType{},
		"docker_cleanup_threshold":              basetypes.Int64Type{},
		"dynamic_timeout":                       basetypes.Int64Type{},
		"force_disabled":                        basetypes.BoolType{},
		"force_server_cleanup":                  basetypes.BoolType{},
		"id":                                    basetypes.Int64Type{},
		"is_build_server


(EventStreamParseError::InvalidData(
            "Header name is not valid utf-8",
        )))?;

        let value = EventStreamHeaderValue::parse(reader)?;

        Ok(EventStreamHeader { name, value })
    }
}

#[derive(Clone, Debug, Eq, PartialEq)]
struct EventStreamMessage<'a> {
    headers: Vec<EventStreamHeader<'a>>,
    payload: &'a [u8],
}

impl<'a> EventStreamMessage<'a> {
    const MIN_LENGTH: usize = 16;

    pub fn parse(reader: &mut &'a [u8]) -> Result<Self, EventStreamParseError> {
        // Get a copy of the entire slice before it gets advanced
        let mut event_buf: &[u8] = *reader;

        let total_length = read_u32(reader)? as usize;
        // Ensure later subtractions don't underflow
        if total_length < Self::MIN_LENGTH {
            return Err(EventStreamParseError::InvalidData(
                "Invalid event total length value",
            ));
        }
        let remaining_length = total_length - 4;

        // Ensure we have the entire event data for event_buf
        if event_buf.len() < total_length {
            return Err(EventStreamParseError::UnexpectedEof);
        }
        event_buf = &event_buf[..total_length];

        let mut remainder_reader = read_slice(reader, remaining_length)?;
        Self::parse_complete_event(event_buf, &mut remainder_reader)
            // The entire event is available, EOF is no longer possible with well-formed packets
            .map_err(EventStreamParseError::eof_as_invalid)
    }

    fn parse_complete_event(
        event_buf: &'a [u8],
        remainder_reader: &mut &'a [u8],
    ) -> Result<Self, EventStreamParseError> {
        let headers_length = read_u32(remainder_reader)? as usize;
        let prelude_crc = read_u32(remainder_reader)?;
        check_crc32(&event_buf[..8], prelude_crc)?;

        let mut headers_reader = read_slice(remainder_reader, headers_length)?;
        let mut headers = Vec::with_capacity(3);
        while !headers_reader.is_empty() {
            let header = EventStreamHeader::parse(&mut headers_reader)?;
            headers.push(header);
        }

        if remainder_reader.len() < 4 {
            return Err(EventStreamParseError::InvalidData(
                "Malformed event: unexpected EOF",
            ));
        }
        let payload = read_slice(remainder_reader, remainder_reader.len() - 4)?;
        let payload_crc = read_u32(remainder_reader)?;
        check_crc32(&event_buf[..(event_buf.len() - 4)], payload_crc)?;

        Ok(EventStreamMessage { headers, payload })
    }

    pub fn get_header(&self, name: &str) -> Option<&EventStreamHeader<'a>> {
        self.headers.iter().find(|h| h.name == name)
    }
}

/// Event Stream decoder
///
/// This struct implements `futures::Stream` and decodes events of type `T` from a streaming HTTP body.
#[derive(Debug)]
pub struct EventStream<T> {
    response_body: Option<Pin<Box<ByteStream>>>,
    buf: Vec<u8>,
    _phantom: std::marker::PhantomData<T>,
}

impl<T: DeserializeEvent + Unpin> EventStream<T> {
    #[doc(hidden)]
    pub fn new(response: HttpResponse) -> EventStream<T> {
        EventStream {
            response_body: Some(Box::pin(response.body)),
            buf: Vec::with_capacity(512),
            _phantom: PhantomData {},
        }
    }

    fn pop_event(buf: &mut Vec<u8>) -> Result<Option<T>, RusotoError<()>> {
        loop {
            let mut reader: &[u8] = &buf;
            let initial_size = reader.len();
            let event_msg = match EventStreamMessage::parse(&mut reader) {
                Ok(msg) => msg,
                Err(EventStreamParseError::UnexpectedEof) => return O


o eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
			</p>
			<p>
				Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
			</p>
		</div>

	</body>
</html><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Page Margin Box Tests: only top right</title>
    <style type="text/css">
        @page
        {
            size: A4 portrait;
            color: #2d2d2d;

            margin: 200px;

            @top-left-corner { content: "Corner"; background:pink; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt; }
            @top-right-corner { content: "Corner"; background:pink; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt; }
            @bottom-left-corner { content: "Corner"; background:pink; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt; }
            @bottom-right-corner { content: "Corner"; background:pink; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt; }

            @left-top { content: "l e f t t o p r e d 3 0"; background:red; height: 30pt; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt;}

            @left-middle { content: "l e f t m i d o r a 6 0"; background:orange; height: 60pt; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt;}

            @left-bottom { content: "l e f t b o t y e 1 2 0"; background:yellow; height: 120pt; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt;}

            @right-top { content: "r i g t o p g r e 1 2 0"; background:green; height: 120pt; border: solid black 10pt; margin: 5pt 10pt 15pt 20pt; padding: 10pt;}

            @right-middle { content: "r i g m i d b l u e 6 0"; background:blue; height: 60pt; border: solid black 10pt; padding: 10pt; margin: 5pt 10pt 15pt 20pt;}

            @right-bottom { content: "r i g b o t p u r p 3 0"; background:purple; height: 30pt; border: solid black 10pt; padding: 10pt; margin: 5pt 10pt 15pt 20pt;}

            @top-left { content: "t o p l e f t r e d 4 0


e:subscribe(function (pos)
    if self.status == 'closing' and pos == s.geometry.y + beautiful.useless_gap * 4 + beautiful.bar_height then
      self:setup(void)
    elseif self.status == 'opening' and pos == s.geometry.y + beautiful.useless_gap * 4 + beautiful.bar_height then
      self:setup(content)
    end
    if self.status == 'closing' and pos == s.geometry.y - dimensions.height - beautiful.useless_gap * 4 then
      self.visible = false
    end
    self.y = pos
  end)

  function s.dashboard.toggle ()
    if self.visible then
      s.dashboard.hide()
    else
      s.dashboard.show()
    end
  end

  function s.dashboard.show ()
    self.visible = true
    self.status = 'opening'
    self.animate.target = s.geometry.y + beautiful.useless_gap * 4 + beautiful.bar_height
  end

  function s.dashboard.hide ()
    self.status = 'closing'
    self.animate.target = s.geometry.y - dimensions.height - beautiful.useless_gap * 4
  end
end)


frame = None

                while frame and frame.more_records_follow:
                    # toogle FCB on and off
                    req.header.cField.parts[0] ^= meterbus.CONTROL_MASK_FCB

                    req = meterbus.send_request_frame_multi(
                              ser, meterbus.ADDRESS_NETWORK_LAYER, req, read_echo=args.echofix)

                    next_frame = meterbus.load(meterbus.recv_frame(ser))
                    frame += next_frame

            if frame is not None:
                print(serialize_frame(frame, args.output))

    except serial.serialutil.SerialException as e:
        print(e)


html       # OS X
//! $ Start-Process "chrome.exe" .\book\en\html\index.html  # Windows (PowerShell)
//! $ start chrome.exe .\book\en\html\index.html            # Windows (Cmd)
//! ```
//!
//! Executing `mdbook serve` will have **mdbook** act has a web service
//! which can be accessed opening the following URL:  http://localhost:3000.
//!
//! To run the tests:
//!
//! ```console
//! $ mdbook test
//! ```
//!
//! ### Building a language variant of the book
//!
//! Translated version of the book will be placed inside the code tree
//! in the subdirectory `src/<language id`.
//!
//! E.g. if you like to render the german version (language id: 'de'), change
//! into OrbTk-books root directory and type:
//!
//! ```console
//! $ MDBOOK_BOOK__src=src/de mdbook build --dest-dir book/de --open
//! ```
//!
//! The rendered HTML output will be placed underneath the
//! `book/de` subdirectory. Since we appended the `--open` parameter, your default browser should be fired up and ... tada!
//!
//! ## Code of Conduct
//!
//! We are committed to providing a friendly, safe and welcoming
//! environment. Read more about our policy in the [code-of-conduct][coc] page.
//!
//! [coc]: https://github.com/redox-os/orbtk-book/blob/main/policies/code-of-conduct.md
//!
//! ## Contributing
//!
//! We'd love your help! Please see [CONTRIBUTING.md][contrib] to learn about the
//! kinds of contributions we're looking for.
//!
//! [contrib]: https://github.com/redox-os/orbtk-book/blob/main/CONTRIBUTING.md
//!
//! ### Translations
//!
//! We'd love help translating the book! See the [Translations] label
//! to join in efforts that are currently in progress. Open a new
//! issue to start working on a new language! We're waiting on [mdbook
//! support] for multiple languages to be finalized, but feel free to
//! start! A [pull request] looks promising. The mainline version (we
//! do depend on v0.4.12) is capable to render the existing versions
//! where sources are installed in the intended final structure.
//!
//! [Translations]: https://github.com/redox-os/orbtk-book/issues?q=is%3Aopen+is%3Aissue+label%3ATranslations
//! [mdbook support]: https://github.com/rust-lang-nursery/mdBook/issues/5
//! [pull request]: https://github.com/rust-lang/mdBook/pull/1306
//!
//! ## Spellchecking
//!
//! To scan source files for spelling errors, you can use the `spellcheck.sh`
//! script. It needs a dictionary of valid words, which is provided in
//! `dictionary.txt`. If the script produces a false positive (say, you used word
//! `BTreeMap` which the script considers invalid), you need to add this word to
//! `dictionary.txt` (keep the sorted order for consistency).
//!
//! ## License
//!
//! <!-- License source -->
//! [Logo-CC_BY]: https://i.creativecommons.org/l/by/4.0/88x31.png "Creative Common Logo"
//! [License-CC_BY]: https://creativecommons.org/licenses/by/4.0/legalcode "Creative Common License"
//!
//! This work is licensed under a [Creative Common License 4.0][License-CC_BY]
//!
//! ![Creative Common Logo][Logo-CC_BY]
//!
//! © 2021 <NAME>
use crate::Bus;
use crate::Cpu;
use util::*;

#[inline]
pub fn interpret(cpu: &mut Cpu, bus: &mut impl Bus, instr: u32) {
    execute(cpu, bus, decode(instr));
}

#[inline]
pub fn decode(instr: u32) -> (bool, bool, bool, bool


 0px rgba(0,0,0,0.15);
  }
  .tgme_icon_arrow {
    float: right;
  }
  .tgme_page_photo_image {
    width: 110px;
    height: 110px;
    border-radius: 55px;
  }

  .tgme_page_additional {
    display: block;
  }
  .tgme_footer {
    display: none;
  }

  .blog_2images_wrap,
  .blog_3images_wrap,
  .blog_medium_image_wrap,
  .blog_medium_image_wrap img,
  .blog_image_wrap,
  .blog_image_wrap img {
    width: auto;
    max-width: 275px;
  }
  .blog_2images_wrap,
  .blog_3images_wrap {
    margin: 20px auto 20px;
  }
  .blog_2images_wrap .blog_image_wrap,
  .blog_3images_wrap .blog_image_wrap {
    float: none;
    margin: 20px 0 20px;
  }
}

@media (max-width: 320px) {
  #td_about_tdesktop {
    font-size: 14px;
  }
  #td_open_from_desktop {
    font-size: 15px;
    padding: 13px 18px;
  }
}

.tl_contest_page_wrap + .pager_wrap {
  max-width: 600px;
  margin: 0 auto;
}/*! jQuery UI - v1.11.4 - 2015-03-11
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */

/* Layo


时遇到了同样的问题。

Wallabag 可能不是 Pocket 或 Instapaper 的等功能的替代品，但它做得很好。自从我第一次写这篇文章以来的四年里，它已经有了明显的改善。它仍然有改进的余地，但要做好它宣传的。

### 最后的想法

自 2014 年以来，wallabag 在一直在演化。它一点一滴，一步一步地变得更好。虽然它可能不是 Instapaper 和 Pocket 等功能的替代品，但 wallabag 有价值的专有稍后阅读工具的开源替代品。

--------------------------------------------------------------------------------

via: https://opensource.com/article/18/7/wallabag

作者：[Scott Nesbitt][a]
选题：[lujun9972](https://github.com/lujun9972)
译者：[geekpi](https://github.com/geekpi)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

[a]:https://opensource.com/users/scottnesbitt
[1]:https://opensource.com/life/14/4/open-source-read-it-later-app-wallabag
[2]:https://wallabag.org/en
[3]:https://www.wallabag.org/en/news/wallabag-v2
[4]:https://pinboard.in
[5]:https://en.wikipedia.org/wiki/Material_Design
[6]:https://www.wallabag.it
[7]:https://github.com/wallabag/wallabagger
使用 Ptrace 去拦截和仿真 Linux 系统调用
======

`ptrace(2)`（“<ruby>进程跟踪<rt>process trace</rt></ruby>）系统调用通常都与调试有关。它是类 Unix 系统上通过原生调试器监测被调试进程的主要机制。它也是实现 [strace][1]（<ruby>系统调用跟踪<rt>system call trace</rt></ruby>）的常见方法。使用 Ptrace，跟踪器可以暂停被跟踪进程，[检查和设置寄存器和内存][2]，监视系统调用，甚至可以<ruby>拦截<rt>intercepting</rt></ruby>系统调用。

通过拦截功能，意味着跟踪器可以篡改系统调用参数，篡改系统调用的返回值，甚至阻塞某些系统调用。言外之意就是，一个跟踪器本身完全可以提供系统调用服务。这是件非常有趣的事，因为这意味着**一个跟踪器可以仿真一个完整的外部操作系统**，而这些都是在没有得到内核任何帮助的情况下由 Ptrac


/* SPDX-License-Identifier: LGPL-2.1+ */

#include <errno.h>

#include "sd-bus.h"

#include "bus-type.h"

bool bus_type_is_valid(char c) {
        static const char valid[] = {
                SD_BUS_TYPE_BYTE,
                SD_BUS_TYPE_BOOLEAN,
                SD_BUS_TYPE_INT16,
                SD_BUS_TYPE_UINT16,
                SD_BUS_TYPE_INT32,
                SD_BUS_TYPE_UINT32,
                SD_BUS_TYPE_INT64,
                SD_BUS_TYPE_UINT64,
                SD_BUS_TYPE_DOUBLE,
                SD_BUS_TYPE_STRING,
                SD_BUS_TYPE_OBJECT_PATH,
                SD_BUS_TYPE_SIGNATURE,
                SD_BUS_TYPE_ARRAY,
                SD_BUS_TYPE_VARIANT,
                SD_BUS_TYPE_STRUCT,
                SD_BUS_TYPE_DICT_ENTRY,
                SD_BUS_TYPE_UNIX_FD
        };

        return !!memchr(valid, c, sizeof(valid));
}

bool bus_type_is_basic(char c) {
        static const char valid[] = {
                SD_BUS_TYPE_BYTE,
                SD_BUS_TYPE_BOOLEAN,
                SD_BUS_TYPE_INT16,
                SD_BUS_TYPE_UINT16,
                SD_BUS_TYPE_INT32,
                SD_BUS_TYPE_UINT32,
                SD_BUS_TYPE_INT64,
                SD_BUS_TYPE_UINT64,
                SD_BUS_TYPE_DOUBLE,
                SD_BUS_TYPE_STRING,
                SD_BUS_TYPE_OBJECT_PATH,
                SD_BUS_TYPE_SIGNATURE,
                SD_BUS_TYPE_UNIX_FD
        };

        return !!memchr(valid, c, sizeof(valid));
}

bool bus_type_is_trivial(char c) {
        static const char valid[] = {
                SD_BUS_TYPE_BYTE,
                SD_BUS_TYPE_BOOLEAN,
                SD_BUS_TYPE_INT16,
                SD_BUS_TYPE_UINT16,
                SD_BUS_TYPE_INT32,
                SD_BUS_TYPE_UINT32,
                SD_BUS_TYPE_INT64,
                SD_BUS_TYPE_UINT64,
                SD_BUS_TYPE_DOUBLE
        };

        return !!memchr(valid, c, sizeof(valid));
}

bool bus_type_is_container(char c) {
        static const char valid[] = {
                SD_BUS_TYPE_ARRAY,
                SD_BUS_TYPE_VARIANT,
                SD_BUS_TYPE_STRUCT,
                SD_BUS_TYPE_DICT_ENTRY
        };

        return !!memchr(valid, c, sizeof(valid));
}

int bus_type_get_alignment(char c) {

        switch (c) {
        case SD_BUS_TYPE_BYTE:
        case SD_BUS_TYPE_SIGNATURE:
        case SD_BUS_TYPE_VARIANT:
                return 1;

        case SD_BUS_TYPE_INT16:
        case SD_BUS_TYPE_UINT16:
                return 2;

        case SD_BUS_TYPE_BOOLEAN:
        case SD_BUS_TYPE_INT32:
        case SD_BUS_TYPE_UINT32:
        case SD_BUS_TYPE_STRING:
        case SD_BUS_TYPE_OBJECT_PATH:
        case SD_BUS_TYPE_ARRAY:
        case SD_BUS_TYPE_UNIX_FD:
                return 4;

        case SD_BUS_TYPE_INT64:
        case SD_BUS_TYPE_UINT64:
        case SD_BUS_TYPE_DOUBLE:
        case SD_BUS_TYPE_STRUCT:
        case SD_BUS_TYPE_STRUCT_BEGIN:
        case SD_BUS_TYPE_DICT_ENTRY:
        case SD_BUS_TYPE_DICT_ENTRY_BEGIN:
                return 8;
        }

        return -EINVAL;
}

int bus_type_get_size(char c) {

        switch (c) {
        case SD_BUS_TYPE_BYTE:
                return 1;

        case SD_BUS_TYPE_INT16:
        case SD_BUS_TYPE_UINT16:
                return 2;

        case SD_BUS_TYPE_BOOLEAN:
        case SD_BUS_TYPE_INT32:
        case SD_BUS_TYPE_UINT32:
        case SD_BUS_TYPE_UNIX_FD:
                return 4;

        case SD_BUS_TYPE_INT64:
        case SD_BUS_TYPE_UINT64:
        case SD_BUS_TYPE_DOUBLE:
                return 8;
        }

        return -EINVAL;
}


import numpy as np
import torch
import torch.functional as F
import torch.nn as nn

import memtorch
from memtorch.utils import convert_range

def naive_map(weight, r_on, r_off, scheme, p_l=None):
    """Method to naively map network parameters to memristive device conductances, using two crossbars to represent both positive and negative weights.

    Parameters
    ----------
    weight : torch.Tensor
        Weight tensor to map.
    r_on : float
        Low resistance state.
    r_off : float
        High resistance state.
    scheme: memtorch.bh.crossbar.Scheme
        Weight representation scheme.
    p_l: float, optional
        If not None, the proportion of weights to retain.

    Returns
    -------
    torch.Tensor, torch.Tensor
        Positive and negative crossbar weights.
    """
    if p_l is not None:
        assert p_l >= 0 and p_l <= 1, "p_l must be None or between 0 and 1."
        weight_max = sorted(weight.abs().flatten().cpu().detach().numpy(), reverse=True)
        weight_max = weight_max[int(p_l * (weight.numel() - 1))]
        weight_min = weight_max / (r_off / r_on)
    else:
        weight_max = weight.abs().max()
        weight_min = 0

    if scheme == memtorch.bh.crossbar.Scheme.DoubleColumn:
        pos = weight.clone()
        neg = weight.clone() * -1
        pos[pos < 0] = 0
        neg[neg < 0] = 0
        pos = torch.clamp(pos, weight_min, weight_max)
        neg = torch.clamp(neg, weight_min, weight_max)
        pos = convert_range(pos, weight_min, weight_max, 1 / r_off, 1 / r_on)
        neg = convert_range(neg, weight_min, weight_max, 1 / r_off, 1 / r_on)
        return pos, neg
    elif scheme == memtorch.bh.crossbar.Scheme.SingleColumn:
        crossbar = weight.clone()
        crossbar = torch.clamp(crossbar, weight_min, weight_max)
        crossbar = convert_range(crossbar, weight_min, weight_max, 1 / r_off, 1 / r_on)
        return crossbar
    else:
        raise ("%s is not currently supported." % scheme)


 childRect, popoverRect, padding, align);

  const boundaryViolation =
    reposition &&
    ((position === 'top' && rect.top < boundaryRect.top + boundaryInset) ||
      (position === 'left' && rect.left < boundaryRect.left + boundaryInset) ||
      (position === 'right' && rect.right > boundaryRect.right - boundaryInset) ||
      (position === 'bottom' && rect.bottom > boundaryRect.bottom - boundaryInset));

  return {
    rect,
    boundaryViolation,
  } as const;
};

export const getNudgedPopoverRect = (
  popoverRect: ClientRect,
  boundaryRect: ClientRect,
  boundaryInset: number,
): ClientRect => {
  const topBoundary = boundaryRect.top + boundaryInset;
  const leftBoundary = boundaryRect.left + boundaryInset;
  const rightBoundary = boundaryRect.right - boundaryInset;
  const bottomBoundary = boundaryRect.bottom - boundaryInset;

  let top = popoverRect.top < topBoundary ? topBoundary : popoverRect.top;
  top = top + popoverRect.height > bottomBoundary ? bottomBoundary - popoverRect.height : top;
  let left = popoverRect.left < leftBoundary ? leftBoundary : popoverRect.left;
  left = left + popoverRect.width > rightBoundary ? rightBoundary - popoverRect.width : left;

  return {
    top,
    left,
    width: popoverRect.width,
    height: popoverRect.height,
    right: left + popoverRect.width,
    bottom: top + popoverRect.height,
  };
};
import { OnChanges, SimpleChanges, SimpleChange } from '@angular/core';

export function Watch() : PropertyDecorator & MethodDecorator{
    function isOnChanges(val: OnChanges): val is OnChanges{
        return !!(val as OnChanges).ngOnChanges
    }
    return (target : any, key: string | symbol, propDesc?: PropertyDescriptor) => {
        let privateKey = "_" + key.toString();
        let isNotFirstChangePrivateKey = "_" + key.toString() + 'IsNotFirstChange';
        propDesc = propDesc || {
            configurable: true,
            enumerable: true,
        };
        propDesc.get = propDesc.get || (function (this: any) { return this[privateKey] });

        const originalSetter = propDesc.set || (function (this: any, val: any) { this[privateKey] = val });

        propDesc.set = function (this: any, val: any) {
            let oldValue = this[key];
            if(val != oldValue) {
                originalSetter.call(this, val);
                let isNotFirstChange = this[isNotFirstChangePrivateKey];
                this[isNotFirstChangePrivateKey] = true;
                if(isOnChanges(this)) {
                    var changes: SimpleChanges = {
                        [key]: new SimpleChange(oldValue, val, !isNotFirstChange)
                    }
                    this.ngOnChanges(changes);
                }
            }
        }
        return propDesc;
    }
}import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  Unique,
  OneToMany,
} from 'typeorm';
import { NewToUser } from 'src/users/entities/usernews.entity';

@Entity()
export class News {
  constructor(id: number, url: string, createdAt: Date, isActive: boolean) {
    this.id = id;
    this.url = url;
    this.createdAt = createdAt;
    this.isActive = isActive;
  }
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ length: 256, unique: true, nullable: false })
  @Unique('Duplicate url', ['url'])
  url: string;

  @Column({ default: new Date() })
  createdAt: Date;

  @Column({ default: true })
  isActive: boolean;


 -1px;
  width: calc(100% - 80px);
}
.sidebar__posts__meta {
  margin: 0;
  display: flex;
  align-items: center;
  margin-bottom: 11px;
}
.sidebar__posts__meta a {
  display: inline-flex;
  align-items: center;
  font-family: var(--eduhive-font, "Plus Jakarta Sans", sans-serif);
  color: var(--eduhive-text, #7B7980);
  font-size: 12px;
  font-weight: 500;
  line-height: 16px;
}
.sidebar__posts__meta a:hover {
  color: var(--eduhive-base, #674CEF);
  text-shadow: 0 0 0.5px currentColor;
}
.sidebar__posts__meta__icon {
  margin-left: 10px;
  position: relative;
  top: 1px;
  display: inline-block;
  font-size: 12px;
  color: var(--eduhive-base, #674CEF);
}
.sidebar__posts__meta__icon svg {
  width: 1em;
  height: 1em;
  fill: currentColor;
}
.sidebar__posts__title {
  margin: 0;
  font-size: 18px;
  font-weight: 600;
  text-transform: capitalize;
  line-height: 1.555;
}
.sidebar__posts__title:hover {
  color: var(--eduhive-base, #674CEF);
}
@media (max-width: 1199px) {
  .sidebar__posts__title {
    font-size: 14px;
  }
}
@media (max-width: 991px) {
  .sidebar__posts__title {
    font-size: 18px;
  }
}
@media (max-width: 412px) {
  .sidebar__posts__title {
    font-size: 16px;
  }
}
@media (max-width: 359px) {
  .sidebar__posts__title {
    font-size: 14px;
  }
}
.sidebar__posts__title a {
  color: inherit;
  background: linear-gradient(to left, currentcolor 0%, currentcolor 100%) 0px 95%/0px 1px no-repeat;
  transition: all 500ms ease;
}
.sidebar__posts__title a:hover {
  background-size: 100% 1px;
}
.sidebar__categories {
  margin-top: -15px;
  margin-bottom: -15px;
}
.sidebar__categories li:not(:last-child) {
  margin-bottom: 6px;
}
.sidebar__categories li a {
  position: relative;
  font-size: 16px;
  color: var(--eduhive-text, #7B7980);
  text-transform: capitalize;
  font-weight: 500;
  line-height: 1;
  display: flex;
  justify-content: space-between;
  align-items: center;
  transition: all 500ms ease;
  padding: 12px 0;
  z-index: 1;
}
.sidebar__categories li a::after {
  position: absolute;
  content: "";
  width: 0;
  height: 100%;
  top: 0;
  left: 0;
  z-index: -1;
  background-color: var(--eduhive-base, #674CEF);
  transition: all 500ms ease;
}
.sidebar__categories li a span {
  color: var(--eduhive-black, #20104B);
  font-weight: 400;
  transition: all 500ms ease;
}
.sidebar__categories li a:hover {
  padding: 12px 12px;
  color: var(--eduhive-white, #FFFFFF);
}
.sidebar__categories li a:hover::after {
  right: 0;
  width: 100%;
}
.sidebar__categories li a:hover span {
  color: var(--eduhive-white, #FFFFFF);
  text


    "address2": "",
        "city": "Listowel",
        "province": "Ontario",
        "country": "Canada",
        "postal": "N4W 3T1",
        "address_type": "clinic",
        "phone": "5192916525",
        "phone_ext": null,
        "fax": "5192915094",
        "user_id": null,
        "updated_at": "2021-03-13 22:29:14",
        "created_at": "2021-03-13 22:29:14"
      }
    },
    {
      "loc_id": 1193,
      "loc_name": "Newmarket (E)",
      "address_id": 2369622,
      "lat": "44.06806340",
      "long": "-79.43065350",
      "address": {
        "address_id": 2369622,
        "address": "1111 Davis Dr",
        "address2": "",
        "city": "Newmarket",
        "province": "Ontario",
        "country": "Canada",
        "postal": "L3Y 8X2",
        "address_type": "clinic",
        "phone": "9058304212",
        "phone_ext": null,
        "fax": "9058303615",
        "user_id": null,
        "updated_at": "2021-03-13 22:32:09",
        "created_at": "2021-03-13 22:32:09"
      }
    },
    {
      "loc_id": 1194,
      "loc_name": "Peterborough (S)",
      "address_id": 2369628,
      "lat": "44.28441090",
      "long": "-78.34342790",
      "address": {
        "address_id": 2369628,
        "address": "950 Lansdowne Street West",
        "address2": "",
        "city": "Peterborough",
        "province": "Ontario",
        "country": "Canada",
        "postal": "K9J 1Z9",
        "address_type": "clinic",
        "phone": "7057429204",
        "phone_ext": null,
        "fax": "7057429277",
        "user_id": null,
        "updated_at": "2021-03-13 22:35:03",
        "created_at": "2021-03-13 22:35:03"
      }
    },
    {
      "loc_id": 1195,
      "loc_name": "St. Catharines (Pen Center)",
      "address_id": 2369639,
      "lat": "43.17790820",
      "long": "-79.24441010",
      "address": {
        "address_id": 2369639,
        "address": "221 Glendale Ave",
        "address2": "",
        "city": "St. Catharines",
        "province": "Ontario",
        "country": "Canada",
        "postal": "L2P 2K9",
        "address_type": "clinic",
        "phone": "9056824949",
        "phone_ext": null,
        "fax": "",
        "user_id": null,
        "updated_at": "2021-04-16 23:20:30",
        "created_at": "2021-03-13 22:38:41"
      }
    },
    {
      "loc_id": 1196,
      "loc_name": "Thunder Bay (S)",
      "address_id": 2369646,
      "lat": "48.38228590",
      "long": "-89.30806950",
      "address": {
        "address_id": 2369646,
        "address": "1101 Arthur St. W",
        "address2": "",
        "city": "Thunder Bay",
        "province": "Ontario",
        "country": "Canada",
        "postal": "P7E 5S


en.", level = DeprecationLevel.ERROR)
        get() = throw NotImplementedError()
        @JvmSynthetic
        set(value) {
            count(value)
        }

    /**
     * Need to match annotation elements.
     * ----------------
     * 要匹配的注解元素列表
     *
     * @param elements elements / 元素列表
     * @return [AnnotationElementsMatcher]
     */
    fun elements(elements: Collection<AnnotationElementMatcher>) = also {
        this.elementsMatcher = elements.toMutableList()
    }

    /**
     * Need to match annotation elements.
     * ----------------
     * 要匹配的注解元素列表
     *
     * @param elements elements / 元素列表
     * @return [AnnotationElementsMatcher]
     */
    fun elements(vararg elements: AnnotationElementMatcher) = also {
        this.elementsMatcher = elements.toMutableList()
    }

    /**
     * Match type.
     * ----------------
     * 匹配类型。
     *
     * @param matchType match type / 匹配类型
     * @return [AnnotationElementsMatcher]
     */
    fun matchType(matchType: MatchType) = also {
        this.matchType = matchType
    }

    /**
     * Annotation elements count to match.
     * ----------------
     * 要匹配的注解元素数量。
     *
     * @param count count / 数量
     * @return [AnnotationElementsMatcher]
     */
    fun count(count: Int) = also {
        this.rangeMatcher = IntRange(count)
    }

    /**
     * Annotation elements count to match.
     * ----------------
     * 要匹配的注解元素数量。
     *
     * @param range count range / 数量范围
     * @return [AnnotationElementsMatcher]
     */
    fun count(range: IntRange) = also {
        this.rangeMatcher = range
    }

    /**
     * Annotation elements count to match.
     * ----------------
     * 要匹配的注解元素数量。
     *
     * @param range count range / 数量范围
     * @return [AnnotationElementsMatcher]
     */
    fun count(range: kotlin.ranges.IntRange) = also {
        rangeMatcher = IntRange(range)
    }

    /**
     * Annotation elements count to match.
     * ----------------
     * 要匹配的注解元素数量。
     *
     * @param min min count / 最小数量
     * @param max max count / 最大数量
     * @return [AnnotationElementsMatcher]
     */
    fun count(min: Int = 0, max: Int = Int.MAX_VALUE) = also {
        this.rangeMatcher = IntRange(min, max)
    }

    /**
     * Annotation elements count to match.
     * ----------------
     * 要匹配的注解元素数量。
     *
     * @param min min count / 最小数量
     * @return [AnnotationElementsMatcher]
     */
    fun countMin(min: Int) = also {
        this.rangeMatcher = IntRange(min, Int.MAX_VALUE)
    }

    /**
     * Annotation elements count to match.
     * ----------------
     * 要匹配的注解元素数量。
     *
     * @param max max count / 最大数量
     * @return [AnnotationElementsMatcher]
     */
    fun countMax(max: Int) = also {
        this.rangeMatcher = IntRange(0, max)
    }

    /**
     * Add annotation element to match.
     * ----------------
     * 添加要匹配的注解元素。
     *
     * @param element element / 元素
     * @return [AnnotationElementsMatcher]
     */
    fun add(element: AnnotationElementMatcher) = also {
        elementsMatcher = elementsMatcher ?: mutableListOf()
        elementsMatcher!!.add(element)
    }

    /**
     * Add annotation element to match.
     * ----------------
     * 添加要匹配的注解元素。
     *
     * @param name element name / 元素名称
     * @param matcher element value matcher / 元素值匹配器


Nin2YTZhNi62Kkg2KfZhNi52LHYqNmK2KkgKEg=?= =?UTF-8?B?ZWxsb3cgaW4gQXJhYmljKQ==?=",
			"مرحبا باللغة العربية (hellow in arabic)");

}
END_TEST

#define Y(z,q) fail_unless(z==(q), "listex_match failed")
#define X(z,a,b) Y(z,listex_match(a,b,".",0))
#define N(z,a,b) Y(z,listex_match(a,b,"¿",0))
START_TEST(test_listex_match)
{
	X(1, "INBOX", "INBOX");
	X(0, "INBOX", "INBOX.Foo");
	X(0, "INBOX", "INBOX.Foo.Bar");

	X(0, "INBOX.%", "INBOX");
	X(1, "INBOX.%", "INBOX.Foo");
	X(0, "INBOX.%", "INBOX.Foo.Bar");

	X(0, "INBOX.*", "INBOX");
	X(1, "INBOX.*", "INBOX.Foo");
	X(1, "INBOX.*", "INBOX.Foo.Bar");

	X(1, "INBOX*", "INBOX");
	X(1, "INBOX*", "INBOX.Foo");
	X(1, "INBOX*", "INBOX.Foo.Bar");

	X(1, "%", "INBOX");
	X(0, "%.%", "INBOX");
	X(1, "%.%", "INBOX.Foo");
	X(0, "%.%.%", "INBOX.Foo");
	X(1, "%.%.%", "INBOX.Foo.Bar");
	X(1, "%.%o.%", "INBOX.Foo.Bar");
	X(0, "%.%oo.%", "INBOX.Foa.Bar");
	X(1, "%.%o.%ar", "INBOX.Foo.Bar");

	X(1, "INBOX%", "INBOX");
	X(0, "INBOX%", "INBOX.Foo");
	X(0, "INBOX%", "INBOX.Foo.Bar");

	X(0, "INBOX*Foo", "INBOX");
	X(1, "INBOX*Foo", "INBOX.Foo");
	X(0, "INBOX*Foo", "INBOX.Foo.Bar");

	X(0, "INBOX*Bar", "INBOX");
	X(0, "INBOX*Bar", "INBOX.Foo");
	X(1, "INBOX*Bar", "INBOX.Foo.Bar");

	X(0, "INBOX.*Bar", "INBOX");
	X(0, "INBOX.*Bar", "INBOX.Foo");
	X(1, "INBOX.*Bar", "INBOX.Foo.Bar");

	N(0, "INBOX\317\200*Bar", "INBOX");
	N(0, "INBOX\317\200*Bar", "INBOX\317\200""Foo");
	N(1, "INBOX\317\200*Bar", "INBOX\317\200""Foo\317\200""Bar");

}
END_TEST

#define D(x,y) c = date_sql2imap(x); fail_unless(strncasecmp(c,y,IMAP_INTERNALDATE_LEN)==0,"date_sql2imap failed \n[%s] !=\n[%s]\n", y, c); free(c)
START_TEST(test_date_sql2imap)
{
	char *c = NULL;
        D("2005-05-03 14:10:06","03-May-2005 14:10:06 +0000");
        D("2005-01-03 14:10:06","03-Jan-2005 14:10:06 +0000");
}
END_TEST

Suite *dbmail_suite(void)
{
	Suite *s = suite_create("Dbmail Imap");
	TCase *tc_session = tcase_create("ImapSession");
	TCase *tc_util = tcase_create("Utils");
	TCase *tc_misc = tcase_create("Misc");

	suite_add_tcase(s, tc_session);
	suite_add_tcase(s, tc_util);
	suite_add_tcase(s, tc_misc);

	tcase_add_checked_fixture(tc_session, setup, teardown);
	tcase_add_test(tc_session, test_imap_session_new);
	tcase_add_test(tc_session, test_imap_get_structure);
	tcase_add_test(tc_session, test_imap_cleanup_address);
	tcase_add_test(tc_session, test_internet_address_list_parse_string);
	tcase_add_test(tc_session, test_imap_get_envelope);
	tcase_add_test(tc_session, test_imap_get_envelope_8bit_id);
	tcase_add_test(tc_session, test_imap_get_envelope_koi);
	tcase_add_test(tc_session, test_imap_get_envelope_latin);
	tcase_add_test(tc_session, test_imap_get_partspec);
	tcase_add_checked_fixture(tc_util, setup, teardown);
	tcase_add_test(tc_util, test_dbmail_imap_plist_as_string);
	tcase_add_test(tc_util, test_dbmail_imap_plist_collapse);
	tcase_add_test(tc_util, test_dbmail_imap_astring_as_string);
	tcase_add_test(tc_util, test_g_list_slices);
	tcase_add_test(tc_util, test_g_list_slices_u64);
	tcase_add_test(tc_util, test_listex_match);
	tcase_add_test(tc_util, test_date_sql2imap);
	tcase_add_checked_fixture(tc_misc, setup, teardown);
	tcase_add_test(tc_misc, test_dm_base_subject);
	return s;
}

int main(void)
{
	int nf;
	g_mime_init(GMIME_ENABLE_RFC2047_WORKAROUNDS);
	Suite *s = dbmail_suite();
	SRunner *sr = srunner_create(s);
	srunner_run_all(sr, CK_NORMAL);
	nf = srunner_ntests_failed(sr);
	srunner_free(sr);
	g_mime_shutdown();
	return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}


300 05AE 0743 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062; # (a◌̕◌̀◌֮◌݃b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC TWO VERTICAL DOTS ABOVE, LATIN SMALL LETTER B
0061 0743 0315 0300 05AE 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062; # (a◌݃◌̕◌̀◌֮b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC TWO VERTICAL DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 059A 0316 302A 0744 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062; # (a◌֚◌̖◌〪◌݄b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC TWO VERTICAL DOTS BELOW, LATIN SMALL LETTER B
0061 0744 059A 0316 302A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062; # (a◌݄◌֚◌̖◌〪b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC TWO VERTICAL DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
0061 0315 0300 05AE 0745 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062; # (a◌̕◌̀◌֮◌݅b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE


  Widget _buildCrossScrollbarFromLayout(
    BuildContext context,
    Widget child,
    Size layoutSize,
    Size size,
    ScrollController horizontal,
    ScrollController vertical,
  ) {
    var widget = child;
    if (layoutSize.width < size.width) {
      widget = ScrollConfiguration(
        behavior: ScrollConfiguration.of(context).copyWith(scrollbars: false),
        child: SingleChildScrollView(
          controller: horizontal,
          scrollDirection: Axis.horizontal,
          physics: cursorOverImage.isTrue
              ? const NeverScrollableScrollPhysics()
              : null,
          child: widget,
        ),
      );
    } else {
      widget = Row(
        children: [
          Container(
            width: ((layoutSize.width - size.width) ~/ 2).toDouble(),
          ),
          widget,
        ],
      );
    }
    if (layoutSize.height < size.height) {
      widget = ScrollConfiguration(
        behavior: ScrollConfiguration.of(context).copyWith(scrollbars: false),
        child: SingleChildScrollView(
          controller: vertical,
          physics: cursorOverImage.isTrue
              ? const NeverScrollableScrollPhysics()
              : null,
          child: widget,
        ),
      );
    } else {
      widget = Column(
        children: [
          Container(
            height: ((layoutSize.height - size.height) ~/ 2).toDouble(),
          ),
          widget,
        ],
      );
    }
    if (layoutSize.width < size.width) {
      widget = RawScrollbar(
        thickness: kScrollbarThickness,
        thumbColor: Colors.grey,
        controller: horizontal,
        thumbVisibility: false,
        trackVisibility: false,
        notificationPredicate: layoutSize.height < size.height
            ? (notification) => notification.depth == 1
            : defaultScrollNotificationPredicate,
        child: widget,
      );
    }
    if (layoutSize.height < size.height) {
      widget = RawScrollbar(
        thickness: kScrollbarThickness,
        thumbColor: Colors.grey,
        controller: vertical,
        thumbVisibility: false,
        trackVisibility: false,
        child: widget,
      );
    }

    return Container(
      child: widget,
      width: layoutSize.width,
      height: layoutSize.height,
    );
  }

  Widget _buildListener(Widget child) {
    if (listenerBuilder != null) {
      return listenerBuilder!(child);
    } else {
      return child;
    }
  }
}
import 'dart:async';
import 'dart:js' as js;
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:uuid/uuid.dart';
import 'dart:html' as html;

import 'package:flutter_hbb/consts.dart';

final _privateConstructorUsedError = UnsupportedError(
    'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');

mixin _$EventToUI {
  Object get field0 => throw _privateConstructorUsedError;
}

sealed class EventToUI {
  const factory EventToUI.event(
    String field0,
  ) = EventToUI_Event;
  const factory EventToUI.rgba(
    int field0,
  ) = EventToUI_Rgba;
  const factory EventToUI.texture(
    int field0,
    bool field1,
  ) = EventToUI_Texture;
}

class EventToUI_Event implements EventToUI {
  const EventToUI_Event(final String field0) : this.field = field0;
  final String field;
  String get field0 => field;
}

class Even


ield name as appears on
		/// the packet)
		/// @return True if the field was removed successfully, or false otherwise (for example: if fieldName doesn't
		/// exist in the message, or if the removal failed)
		bool removeField(std::string fieldName, int index = 0);

		/// Indicate whether the header is complete (ending with end-of-header "\r\n\r\n" or "\n\n") or spread over more
		/// packets
		/// @return True if the header is complete or false if not
		bool isHeaderComplete() const;

		// implement Layer's abstract methods

		/// Currently set only PayloadLayer for the rest of the data
		void parseNextLayer() override;

		/// @return The message length
		size_t getHeaderLen() const override;

		/// Does nothing for this class
		void computeCalculateFields() override;

	protected:
		TextBasedProtocolMessage(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet,
		                         ProtocolType protocol);
		TextBasedProtocolMessage() : m_FieldList(nullptr), m_LastField(nullptr), m_FieldsOffset(0)
		{}

		// copy c'tor
		TextBasedProtocolMessage(const TextBasedProtocolMessage& other);
		TextBasedProtocolMessage& operator=(const TextBasedProtocolMessage& other);

		void copyDataFrom(const TextBasedProtocolMessage& other);

		void parseFields();
		void shiftFieldsOffset(HeaderField* fromField, int numOfBytesToShift);

		// abstract methods
		virtual char getHeaderFieldNameValueSeparator() const = 0;
		virtual bool spacesAllowedBetweenHeaderFieldNameAndValue() const = 0;

		HeaderField* m_FieldList;
		HeaderField* m_LastField;
		int m_FieldsOffset;
		std::multimap<std::string, HeaderField*> m_FieldNameToFieldMap;
	};
}  // namespace pcpp


atchedTokens or 0;
end

function BackpackTokenFrameMixin:IsCombined()
	return self.isCombined;
end

function BackpackTokenFrameMixin:SetIsCombinedInventory(isCombined)
	self.isCombined = isCombined;
end

function BackpackTokenFrameMixin:UpdateTokenAnchoring()
	AnchorUtil.GridLayout(self.Tokens, self:GetInitialTokenAnchor(), self:GetTokenLayout());
end

function BackpackTokenFrameMixin:GetInitialTokenAnchor()
	return AnchorUtil.CreateAnchor("RIGHT", self, "RIGHT", -17, -1);
end

function BackpackTokenFrameMixin:GetTokenLayout()
	return AnchorUtil.CreateGridLayout(GridLayoutMixin.Direction.TopRightToBottomLeft, self:GetMaxTokensWatched(), 0, 0);
end

function BackpackTokenFrameMixin:GetMaxTokensWatched()
	if not self.tokenWidth then
		local info = C_XMLUtil.GetTemplateInfo("BackpackTokenTemplate");
		self.tokenWidth = info and info.width or 50;
	end

	-- If backpack has not been opened at least once since UI load, get approx width of container frame
	if (self:GetWidth() or 0) <= 1 then
		return math.max(math.floor(ContainerFrame_GetApproximateWidth() / self.tokenWidth), 1);
	end

	-- Otherwise, use own width to get max num tokens that can be watched (iow: max tokens that can fit in the frame)
	return math.max(math.floor(self:GetWidth() / self.tokenWidth), 1);
end

BackpackTokenMixin = {};

function BackpackTokenMixin:OnEnter()
	GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
	GameTooltip:SetBackpackToken(self:GetID());
	GameTooltip_AddBlankLineToTooltip(GameTooltip);
	GameTooltip_AddInstructionLine(GameTooltip, TOKEN_REMOVE_FROM_BACKPACK_INSTRUCTION);
	GameTooltip:Show();
end

function BackpackTokenMixin:OnLeave()
	GameTooltip:Hide();
end

function BackpackTokenMixin:OnClick()
	if IsModifiedClick("CHATLINK") then
		local linkedToChat = HandleModifiedItemClick(C_CurrencyInfo.GetCurrencyLink(self.currencyID));
		if linkedToChat then
			return;
		end
	end

	if IsModifiedClick("TOKENWATCHTOGGLE") then
		C_CurrencyInfo.SetCurrencyBackpackByID(self.currencyID, false);
		BackpackTokenFrame:Update();
		if TokenFrame and TokenFrame:IsShown() then
			TokenFrame:Update();
		end
	else
		CharacterFrame:ToggleTokenFrame();
	end
end


ARK_ORANGE = new Color(1.0f, 0.55f, 0.0f, 1.0f).toIntBits();
   public static int LIGHT_GRAY = Color.LIGHT_GRAY.toIntBits();
   public static int LIGHT_BLUE = new Color(0.4f, 0.4f, 0.8f, 1.0f).toIntBits();

   private static final ImVec2 calcTextSize = new ImVec2();

   public static long createContext()
   {
      return ImGui.createContext().ptr;
   }

   public static long createContext(ImFontAtlas fontAtlas)
   {
      return ImGui.createContext(fontAtlas).ptr;
   }

   public static long getCurrentContext()
   {
      return ImGui.getCurrentContext().ptr;
   }

   public static void setCurrentContext(long context)
   {
      ImGuiContext contextHolder = ImGui.getCurrentContext();
      contextHolder.ptr = context;
      ImGui.setCurrentContext(contextHolder);
   }

   public static void parsePrimaryWindowSizeFromSettingsINI(String settingsINIAsString, ImGuiSize sizeToPack)
   {
      settingsINIAsString = StringTools.filterOutCRLFLineEndings(settingsINIAsString);
      int indexOfDockingSection = settingsINIAsString.indexOf("[Docking]");
      int indexOfDockspace = settingsINIAsString.indexOf("DockSpace", indexOfDockingSection); // The first DockSpace entry is the primary one
      int indexOfSize = settingsINIAsString.indexOf("Size", indexOfDockspace);
      int indexOfWidth = indexOfSize + 5; // Account for '='
      int indexOfComma = settingsINIAsString.indexOf(",", indexOfWidth);
      int width = Integer.parseInt(settingsINIAsString.substring(indexOfWidth, indexOfComma));

      int indexOfHeight = indexOfComma + 1; // Account for ','
      int indexOfSpace = settingsINIAsString.indexOf(" ", indexOfComma);
      int height = Integer.parseInt(settingsINIAsString.substring(indexOfHeight, indexOfSpace));

      sizeToPack.setWidth(width);
      sizeToPack.setHeight(height);
   }

   public static void parsePrimaryWindowPositionFromSettingsINI(String settingsINIAsString, ImGuiPosition positionToPack)
   {
      settingsINIAsString = StringTools.filterOutCRLFLineEndings(settingsINIAsString);
      int indexOfDockingSection = settingsINIAsString.indexOf("[Docking]");
      int indexOfDockspace = settingsINIAsString.indexOf("DockSpace", indexOfDockingSection); // The first DockSpace entry is the primary one
      int indexOfPosition = settingsINIAsString.indexOf("Pos", indexOfDockspace);
      int indexOfX = indexOfPosition + 4; // Account for '='
      int indexOfComma = settingsINIAsString.indexOf(",", indexOfX);
      int x = Integer.parseInt(settingsINIAsString.substring(indexOfX, indexOfComma));

      int indexOfY = indexOfComma + 1; // Account for ','
      int indexOfSpace = settingsINIAsString.indexOf(" ", indexOfComma);
      int y = Integer.parseInt(settingsINIAsString.substring(indexOfY, indexOfSpace));

      positionToPack.setX(x);
      positionToPack.setY(y);
   }

   public static void initializeColorStyle()
   {
      if (!Boolean.parseBoolean(System.getProperty("imgui.dark")))
         ImGui.styleColorsLight();
   }

   /**
    * Method for getting color ranging from green to red based on an input value,
    * and the values at which the input should result in green and red.
    *
    * @param value The value which determines returned color
    * @param valueAtGreen The value at which returned color will be green
    * @param valueAtRed The value at which returned color will be red
    * @return Integer value representing color
    */
   public static int green


psychic damage.\n • You have advantage on saving throws against effects that would charm you.\n • You can use a bonus action to inspire one creature you can see that is within 60 feet of you and that can see or hear you. Once before the end of your next turn, the inspired creature can roll a d6 and add the number rolled to one ability check, attack roll, or saving throw it makes. This uses 1 charge from the crown. It has 3 charges, and it regains 1d3 expended charges daily at dawn.",attunement:!0,usages:3,recovery:"dawn",additional:"regains 1d3",action:[["bonus action"," (inspire)"]],dmgres:["Psychic"],savetxt:{adv_vs:["charmed"]}},MagicItemsList.orcsplitter={name:"Orcsplitter",source:[["PotA",224]],type:"weapon (greataxe)",rarity:"legendary",magicItemTable:"G",prerequisite:"Requires attunement by a good-aligned dwarf, fighter, or paladin",description:"This sentient greataxe has a +2 bonus on to hit and damage. If I roll a 20 on an attack vs. an orc with it, the orc must make a DC 17 Con save or be reduced to 0 HP. While I'm not incapacitated, I can't be surprised by orcs, and me and my allies in 30 ft can't be frightened. I can sense orcs within 120 ft. See Notes page.",descriptionFull:"A mighty axe wielded long ago by the dwarf king Torhild Flametongue, Orcsplitter is a battered weapon that appears unremarkable at first glance. Its head is graven with the Dwarvish runes for \"orc,\" but the runes are depicted with a gap or slash through the markings; the word \"orc\" is literally split in two.\n   You gain the following benefits while holding this magic weapon:\n • You gain a +2 bonus to attack and damage rolls made with it.\n • When you roll a 20 on an attack roll with this weapon against an orc, that orc must succeed on a DC 17 Constitution saving throw or drop to 0 hit points.\n • You can't be surprised by orcs while you're not incapacitated. You are also aware when orcs are within 120 feet of you and aren't behind total cover, although you don't know their location.\n • You and any of your friends within 30 feet of you can't be frightened while you're not incapacitated.\n\n"+toUni("Sentience")+". Orcsplitter is a sentient, lawful good weapon with an Intelligence of 6, a Wisdom of 15, and a Charisma of 10. It can see and hear out to 120 feet and has darkvision. It communicates by transmitting emotions to its wielder, although on rare occasions it uses a limited form of telepathy to bring to the wielder's mind a couplet or stanza of ancient Dwarvish verse.\n   "+toUni("Personality")+". Orcsplitter is grim, taciturn, and inflexible. It knows little more than the desire to face orcs in battle and serve a courageous, just wielder. It disdains cowards and any form of duplicity, deception, or disloyalty. The weapon's purpose is to defend dwarves and to serve as a symbol of dwarven resolve. It hates the traditional foes of dwarves—giants, goblins, and, most of all, orcs—and silently urges its possessor to meet such creatures in battle.",attunement:!0,weight:7,weaponOptions:[{baseWeapon:"greataxe",regExpSearch:/orcsplitter/i,name:"Orcsplitter",source:[["PotA",224]],description:"Heavy, two-handed; On 20 vs. Orc: it DC 17 Con save or 0 HP",modifiers:[2,2],selectNow:!0}],savetxt:{immune:["frightened"]},toNotesPage:[{name:"Features",note:desc(['A mighty axe wielded long ago by the dwarf king Torhild Flametongue, Orcsplitter is a battered weapon that appears unremarkable at first glance. Its head is graven with the Dwarvish runes for "orc," but the runes are depicted with a gap or slash through the markings; the word "orc" is literally split in two.',"I gain a +2 bonus to attack and damage rolls made with it. When I roll a 20 on an attack roll with this weapon against an orc, that orc must succeed on a DC 17 C


local L = LibStub("AceLocale-3.0"):NewLocale("Carbonite.Notes", "zhCN")
if not L then return end

L["Note Options"] = "标记模块"
L["Show Notes On Map"] = "在地图上显示标记"
L["Shows your notes on the carbonite map"] = "在Carbonite地图上显示你添加的标记"
L["Show Notes"] = "显示标记"
L["-Notes-"] = "-标记-"
L["Add Note"] = "增加标记"
L["Notes Module"] = "标记模块"
L["Toggle Notes"] = "切换标记显示"
L["Record"] = "记录"
L["Up"] = "向上"
L["Down"] = "向下"
L["Delete Item"] = "删除条目"
L["Name"] = "名称"
L["Type"] = "类型"
L["Value"] = "内容"
L["Location"] = "位置"
L["Select a favorite before recording"] = "记录之前先选择一个收藏项"
L["Add Folder"] = "新建文件夹"
L["Add Favorite"] = "新建收藏项"
L["Rename"] = "重命名"
L["Cut"] = "剪切"
L["Copy"] = "复制"
L["Paste"] = "粘贴"
L["Options"] = "选项"
L["Add Comment"] = "添加注释"
L["Se


'𒔫', 'ά', '𓉐',
    '\u{10fbb}', '𖼞', '𝆸', '𣾎', '⦧', 'チ', '𐹪', '𖺂', '\u{11637}', 'Ⓥ',
    '𐼙', '⛉', 'ы', 'ᘄ', 'Ꝇ', '𑢷', '𖣭', '⻐', '𖥧', '𑴚', '𑃸',
    '\u{1fb83}', '❓', '⊈', 'ᗘ', '📦', '𐘟', '\u{e01c5}', 'Ḵ', 'ᢉ', 'Ȋ', 'ꃴ',
    'ﱏ', '🕅', '⥂', '🏞', '𛈻', '\u{1112a}', '𓉆', '暈', '﮷', '𒂋', 'ો',
    '𐘝', 'ㇵ', '𐘡', 'ᲀ', 'ㇷ', 'ଥ', 'ኍ', '𛱊', 'ǧ', '䃣', '𔖿', '𞡀',
    '𒇸', 'ﶚ', 'ປ', '𐀦', '𒉼', '⁷', 'ꩄ', '𔓺', '\u{116b0}', '𖠟', '𔐻',
    '𒈉', '฿', '𒋄', 'ગ', '\u{359}', '𘨷', 'ꗍ', 'Ⲍ', 'ଢ଼', 'ﺗ', '㉭', 'ய',
    'ℳ', '⭓', '𒑓', '𐤫', '𝈥', '𓈩', '𝩾', 'Ⱝ', '𑊙', '\u{94d}',
    '\u{e01ca}', '𖭫', '𖣡', '𒋪', 'ꁽ', 'ޡ', '◁', '𛀃', '幩', 'ᙚ', '𑴒',
    '𐋈', '𑜕', '᧟', '\u{e01c9}', '🧀', '𖨦', '\u{6d9}', 'ᓛ', '\u{18c9b}', '𞢰',
    '𝈎', 'ﻷ', '೨', '𛃥', 'ᠰ', '🆏', 'ߢ', '゠', '↞', '𛈱', 'ꏅ',
    '\u{18cc2}', '𖥅', '∽', '꧊', 'ﮒ', '\u{11c3a}', '𒀑', '𞲅', 'و', 'ꀍ',
    '𑠃', '〼', '߀', '𝜰', 'Ρ', '𓂪', '𓋷', '𓃮', '𑢯', '೦', 'ࡖ', 'ᤤ',
    '╰', 'Ꞵ', 'ጀ', '㍘', '𛀴', 'ϣ', 'ᴆ', '𓉞', '𝟆', '', '🝁', 'ݻ',
    'Ӗ', '🀡', '𞤉', 'ꖭ', '\u{1e11f}', 'ݱ', '𑱒', '🚣', '𝠝', 'ή',
    '\u{1fb82}', 'à', '꯴', '\u{112e7}', '\u{c77}', 'ಡ', 'Ɐ', 'ᙱ', '𝢋', '𝛪',
    '𛉫', '🗉', '\u{a41}', '�


information about the NPM package to create docs for
 * @param autoCommit - If true, a commit is created for the updated docs
 * @param readmeTemplatePath - Path to the README.md.handlebars file to use
 * @param packageJsonTemplatePath - Path to the package.json.handlebars file to use
 */
const generateDocs = async (npmPackage: NpmPackage, autoCommit: boolean, readmeTemplatePath: string, packageJsonTemplatePath: string) => {
  const { name, version, fullPath, dir } = npmPackage
  console.log(chalk.bold(name), chalk.green('~> ' + version), '\n', chalk.gray(fullPath))

  const packageJsonPath = path.join(dir, 'package.json')
  let packageJson = {} as any
  try {
    const rawPackageJson = fs.readFileSync(packageJsonPath, { encoding: 'utf8' })
    packageJson = JSON.parse(rawPackageJson)
  } catch (error) {
    console.log(chalk.red(`Failed to load package.json file:\n${packageJsonPath}\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Successfully loaded package.json file'))

  const inputFilePath = path.join(dir, 'index.ts')
  let parsedTags = [] as ParsedTag[]
  try {
    parsedTags = extractTsDoc(inputFilePath)
  } catch (error) {
    console.log(chalk.red(`Failed to process index.ts file:\n${inputFilePath}\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Successfully parsed TSDoc tags from index.ts'))

  let moduleData = {} as ModuleData
  try {
    moduleData = consolidateModuleData(parsedTags, packageJson)
  } catch (error) {
    console.log(chalk.red(`Failed to convert the parsed tags to component data\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Done consolidating component data'))

  let readme = ''
  try {
    readme = renderReadme(moduleData, readmeTemplatePath)
  } catch (error) {
    console.log(chalk.red(`Failed to render README:\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Successfully rendered README'))

  let updatedPackageJson = ''
  try {
    updatedPackageJson = renderPackageJson(moduleData, packageJson, packageJsonTemplatePath)
  } catch (error) {
    console.log(chalk.red(`Failed to render package.json:\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Successfully rendered package.json'))

  const readmeFilePath = path.join(dir, 'README.md')
  try {
    fs.writeFileSync(readmeFilePath, readme)
  } catch (error) {
    console.log(chalk.red(`Failed to write README:\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Successfully replaced README.md with rendererd README'))

  try {
    fs.writeFileSync(packageJsonPath, JSON.stringify(updatedPackageJson, null, 2))
  } catch (error) {
    console.log(chalk.red(`Failed to write package.json:\n${error.toString()}`))
    return
  }
  console.log(chalk.green('✓ Successfully merged rendered package.json into package.json'))

  if (autoCommit) {
    try {
      process.cwd()
      await exec(`cd ${dir} && git add package.json README.md && git commit -m "Auto-generate update of package.json and README.md for ${packageJson.name}"`)
    } catch (error) {
      console.log(chalk.red(`Error while trying to commit changes to README.md and package.json:\n${error.toString()}`))
      return
    }
    console.log(chalk.green('✓ Successfully committed


ing != nil {
		return ContainerStateRunning
	}
	if state.Terminated != nil {
		return ContainerStateTerminated
	}
	return ContainerStateUnknown
}
/*
Copyright 2018 The Kubernetes Authors.
Copyright 2020 Authors of Arktos - file modified.

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 common

import (
	"fmt"
	"time"

	coordinationv1beta1 "k8s.io/api/coordination/v1beta1"
	v1 "k8s.io/api/core/v1"
	apiequality "k8s.io/apimachinery/pkg/api/equality"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/util/diff"
	"k8s.io/apimachinery/pkg/util/wait"
	clientset "k8s.io/client-go/kubernetes"
	"k8s.io/kubernetes/test/e2e/framework"
	e2elog "k8s.io/kubernetes/test/e2e/framework/log"
	e2enode "k8s.io/kubernetes/test/e2e/framework/node"
	testutils "k8s.io/kubernetes/test/utils"

	"github.com/onsi/ginkgo"
	"github.com/onsi/gomega"
)

var _ = framework.KubeDescribe("NodeLease", func() {
	var nodeName string
	f := framework.NewDefaultFramework("node-lease-test")

	ginkgo.BeforeEach(func() {
		nodes := framework.GetReadySchedulableNodesOrDie(f.ClientSet)
		gomega.Expect(len(nodes.Items)).NotTo(gomega.BeZero())
		nodeName = nodes.Items[0].ObjectMeta.Name
	})

	ginkgo.Context("when the NodeLease feature is enabled", func() {
		ginkgo.It("the kubelet should create and update a lease in the kube-node-lease namespace", func() {
			leaseClient := f.ClientSet.CoordinationV1beta1().Leases(v1.NamespaceNodeLease)
			var (
				err   error
				lease *coordinationv1beta1.Lease
			)
			ginkgo.By("check that lease for this Kubelet exists in the kube-node-lease namespace")
			gomega.Eventually(func() error {
				lease, err = leaseClient.Get(nodeName, metav1.GetOptions{})
				if err != nil {
					return err
				}
				return nil
			}, 5*time.Minute, 5*time.Second).Should(gomega.BeNil())
			// check basic expectations for the lease
			gomega.Expect(expectLease(lease, nodeName)).To(gomega.BeNil())

			ginkgo.By("check that node lease is updated at least once within the lease duration")
			gomega.Eventually(func() error {
				newLease, err := leaseClient.Get(nodeName, metav1.GetOptions{})
				if err != nil {
					return err
				}
				// check basic expectations for the latest lease
				if err := expectLease(newLease, nodeName); err != nil {
					return err
				}
				// check that RenewTime has been updated on the latest lease
				newTime := (*newLease.Spec.RenewTime).Time
				oldTime := (*lease.Spec.RenewTime).Time
				if !new