text:
/*****************************************************************************/

var nfc = window.nfc = {};

nfc._reset = function() {
	nfc._busName = "org.neard";
	nfc._bus = null;
	nfc._uri = null;
	nfc._manager = null;
	nfc._adapter = null;
	nfc._tag = null;
	nfc._peer = null;
	nfc.polling = false;
	nfc.powered = false;
};

/*****************************************************************************/

nfc._NDEFRecordForProps = function(props) {
	if (props.Type == "Text")
		return new nfc.NDEFRecordText(props);
	if (props.Type == "URI")
		return new nfc.NDEFRecordURI(props);
	return new nfc.NDEFRecord(props);
};

nfc._NDEFMessageForRecordIds = function(ids) {

	var promise = new cloudeebus.Promise(function (resolver) {

		var records = [];

		function onRecPropsOk(props) {
			records.push(nfc._NDEFRecordForProps(props));
			if (records.length == ids.length)
				resolver.resolve(new NDEFMessage(records), true);
		}

		for (var i=0; i<ids.length; i++) {
			var recProxy = nfc._bus.getObject(nfc._busName, ids[i]);
			recProxy.callMethod("org.neard.Record", "GetProperties",
					[]).then(onRecPropsOk, function(err) {resolver.reject(err,true);});
		}
	});

	return promise;
};

/*****************************************************************************/

nfc._peerChanged = function(key, value) {

	if (key == "Records") {
		nfc._peer.props.Records = value;
		if (nfc._peer.onmessageread)
			nfc._NDEFMessageForRecordIds(nfc._peer.props.Records).then(
					function(msg) {
						nfc._peer.onmessageread.call(nfc._peer, {type: "messageread", message: msg});
					});
	}
};

nfc._adapterChanged = function(key, value) {

	function onTagPropsOk(props) {
		nfc._tag.props = props;
		if (nfc.ontagfound)
			nfc.ontagfound.call(nfc, {type: "tagfound", tag: nfc._tag});
	}

	function onPeerPropsOk(props) {
		nfc._peer.props = props;
		if (nfc.onpeerfound)
			nfc.onpeerfound.call(nfc, {type: "peerfound", peer: nfc._peer});
	}

	function onTagFound(tagId) {
		if (nfc._tag) /* trigger "found" callback only once */
			return;
		nfc._tag = new nfc.NFCTag(nfc._bus.getObject(nfc._busName, tagId));
		nfc._tag.proxy.callMethod("org.neard.Tag", "GetProperties",
				[]).then(onTagPropsOk);
	}

	function onPeerFound(deviceId) {
		if (nfc._peer) /* trigger "found" callback only once */
			return;
		nfc._peer = new nfc.NFCPeer(nfc._bus.getObject(nfc._busName, deviceId));
		nfc._peer.proxy.callMethod("org.neard.Device", "GetProperties",
				[]).then(onPeerPropsOk);
		nfc._peer.proxy.connectToSignal("org.neard.Device","PropertyChanged",
				nfc._peerChanged);
	}

	if (key == "Tags") {
		if (value.length == 0) {
			nfc._tag = null;
			if (nfc.ontaglost)
				nfc.ontaglost.call(nfc, {type: "taglost"});
			nfc.startPoll();
		}
		else
			onTagFound(value[0]);
	}
	else if (key == "Devices") {
		if (value.length == 0) {
			nfc._peer = null;
			if (nfc.onpeerlost)
				nfc.onpeerlost.call(nfc, {type: "peerlost"});
			nfc.startPoll();
		}
		else
			onPeerFound(value[0]);
	}
	else if (key == "Polling") {
		nfc.polling = value;
		if (value) {
			if (nfc.onpollstart)
				nfc.onpollstart.call(nfc, {type: "pollstart"});
		}
		else {
			if (nfc.onpollstop)
				nfc.onpollstop.call(nfc, {type: "pollstop"});
		}
	}
	else if (key == "Powered") {
		nfc.powered = value;
		if (value) {
			if (nfc.onpoweron)
				nfc.onpoweron.call(nfc, {type: "poweron"});
		}
		else {
			if (nfc.onpoweroff)
				nfc.onpoweroff.call(nfc, {type: "poweroff"});
		}
	}

};

/*****************************************************************************/

nfc._init = function(uri, manifest) {
	nfc._reset();

	var promise = new cloudeebus.Promise(function (resolver) {
		function onAdapterPropsOk(props) {
			nfc._adapter.props = props;
			nfc.polling = props.Polling ? true : false;
			nfc.powered = props.Powered ? true : false;
			resolver.fulfill();
		}

		function onAdapterOk() {
			nfc._adapter.GetProperties().then(onAdapterPropsOk, onerror);
		}

		function onManagerPropsOk(props) {
			if (props.Adapters.length == 0)
				resolver.reject("No NFC Adapter found", true);
			else {
				nfc._adapter = nfc._bus.getObject(nfc._busName,
						props.Adapters[0],
						onAdapterOk,
						onerror);
				nfc._adapter.connectToSignal("org.neard.Adapter","PropertyChanged",
						nfc._adapterChanged);
			}
		}

		function onManagerOk() {
			nfc._manager.GetProperties().then(onManagerPropsOk, onerror);
		}

		function onConnectOk() {
			nfc._bus = cloudeebus.SystemBus();
			nfc._uri = uri;
			nfc._manager = nfc._bus.getObject(nfc._busName, "/", onManagerOk, onerror);
		}

		function onerror(error) {
			cloudeebus.log("NFC init error: " + error);
			resolver.reject(error, true);
		}

		cloudeebus.connect(uri, manifest, onConnectOk, onerror);
	});

	return promise;
};

/*****************************************************************************/

nfc.powerOn = function() {
	return nfc._adapter.SetProperty("Powered", true).then(function(){nfc.powered=true;});
};

nfc.powerOff = function() {
	return nfc._adapter.SetProperty("Powered", false).then(function(){nfc.powered=false;});
};

/*****************************************************************************/

nfc.startPoll = function() {
	return nfc._adapter.StartPollLoop("Initiator").then(function(){nfc.polling=true;});
};

nfc.stopPoll = function() {
	return nfc._adapter.StopPollLoop().then(function(){nfc.polling=false;});
};

/*****************************************************************************/

nfc.NFCPeer = function(proxy) {
	this.proxy = proxy;
	if (proxy) {
		this.id = proxy.objectPath;
	}
	this.isConnected = false;
	return this;
};

nfc.NFCPeer.prototype.sendNDEF = function(ndefMessage) {
	var promises = [];
	for (var i=0; i< ndefMessage.records.length; i++) {
		var ndefRecord = ndefMessage.records[i];
		var rec = ndefRecord.neardRecord();
		promises.push(this.proxy.callMethod("org.neard.Device", "Push", [rec]));
	}
	return cloudeebus.Promise.every.apply(cloudeebus.Promise,promises);
};

nfc.NFCPeer.prototype.startHandover = function(type) {
	return this.proxy.callMethod("org.neard.Device", "Push",
		[{
			 Type: "Handover",
			 Carrier: type
		}]);
};

/*****************************************************************************/

nfc.NFCTag = function(proxy) {
	this.proxy = proxy;
	if (proxy) {
		this.id = proxy.objectPath;
	}
	return this;
};

nfc.NFCTag.prototype.readNDEF = function() {
	if (!this.props)
		return cloudeebus.Promise.reject("Tag properties unknown.");

	return nfc._NDEFMessageForRecordIds(this.props.Records);
};

nfc.NFCTag.prototype.writeNDEF = function(ndefMessage) {
	var ndefRecord = ndefMessage.records[0];
	var rec = ndefRecord.neardRecord();
	return this.proxy.callMethod("org.neard.Tag", "Write", [rec]);
};

/*****************************************************************************/

nfc.NDEFMessage = function() {
	return this;
};

NDEFMessage = function(records) {
	nfc.NDEFMessage.call(this);
	this.records = records;
	return this;
};

NDEFMessage.prototype = new nfc.NDEFMessage();
NDEFMessage.prototype.constructor = NDEFMessage;

/*****************************************************************************/

nfc.NDEFRecord = function(props) {
	this.recordType = "unknown";
	return this;
};

nfc.NDEFRecord.prototype.neardRecord = function() {
	return {};
};

/*****************************************************************************/

nfc.NDEFRecordText = function(props) {
	nfc.NDEFRecord.call(this,props);
	this.recordType = "text";
	if (props) {
		this.text = props.Representation;
		this.languageCode = props.Language;
		this.encoding = props.Encoding;
	}
	return this;
};

nfc.NDEFRecordText.prototype = new nfc.NDEFRecord();
nfc.NDEFRecordText.prototype.constructor = nfc.NDEFRecordText;

nfc.NDEFRecordText.prototype.neardRecord = function() {
	return {
		Type: "Text",
		Representation: this.text,
		Language: this.languageCode,
		Encoding: this.encoding
	};
};

NDEFRecordText = function(text, languageCode, encoding) {
	nfc.NDEFRecordText.call(this);
	this.text = text;
	this.languageCode = languageCode ? languageCode : "en-US";
	this.encoding = encoding ? encoding : "UTF-8";
	return this;
};

NDEFRecordText.prototype = new nfc.NDEFRecordText();
NDEFRecordText.prototype.constructor = NDEFRecordText;

/*****************************************************************************/

nfc.NDEFRecordURI = function(props) {
	nfc.NDEFRecord.call(this,props);
	this.recordType = "uri";
	if (props) {
		this.uri = props.URI;
	}
	return this;
};

nfc.NDEFRecordURI.prototype = new nfc.NDEFRecord();
nfc.NDEFRecordURI.prototype.constructor = nfc.NDEFRecordURI;

nfc.NDEFRecordURI.prototype.neardRecord = function() {
	return {
		Type: "URI",
		URI: this.uri
	};
};

NDEFRecordURI = function(uri) {
	nfc.NDEFRecordURI.call(this);
	this.uri = uri;
	return this;
};

NDEFRecordURI.prototype = new nfc.NDEFRecordURI();
NDEFRecordURI.prototype.constructor = NDEFRecordURI;


text:
<title>no title</title>

Trushit Vaishnav In this video we are going to learn how to expand or we can say how to simplify a given set of algebraic factors.

For example, let us say I am having x minus one into x minus two.

What would be the usual process for this?

First of all, I would multiply this x into this x to get x two and I will mention the equal to sign.

Then I will multiply this x with this minus two to get minus two x.

(28:68)

Then I will be multiplying this minus one with this x, to get minus x.

(23:72)

Then I would multiply this minus one with this minus two to get plus two.

Later, the next step, x two remains as it is.

minus two x and minus x makes minus three x, plus two.

The process is really easy, and we could do it in a fairly simple way.

But here, there are only two factors that have to be multiplied, so that we could follow this process.

But what if we had some three or four factors to multiply?

Let us say I have one more over here, like say x minus three.

What I will have to do is, I will have to put a bracket over here, and I will have to continue multiplying these corresponding things, which actually means that I will have to reach through the step, and then I will have to perform similar operations with these two.

Now, here there were only two terms in one bracket and another two terms in another bracket.

Here we are having three terms in the first bracket, and two terms in the latter.

You will see that, as we move down, as the number of factors increases, the number of terms that has to be multiplied also goes up.

This makes things really complicated.

There is an easy way to avoid this hassle.

Let us see how.

Here, let us generalize this entire process first.

We will first derive our results and then see how this pattern actually works.

First of all, your first factor is in the form of ax plus b, and another is in the form of cx plus d, and a third one is in the form of ex plus f.

But these three factors, we can derive our results, and we can expand this method, even if you are having say four or five factors, or even any number of factors.

First, I will deal with this part.

So, ax into cx is equal to acx two and ax into d is adx, plus b into cx is bcx, plus b into d.

This forms first bracket, and multiply it by ex plus f.

Fine.

Now, simplifying this further, I will get acx two plus, taking x common, ad plus bc plus bd.

Then I get ex plus f.

Now, this thing you need to remember.

I will stop over here, and this is a really quick way to obtain the simplified form of multiplication of two factors.

Let's say I have two x plus one into five x plus three.

Rather than multiplying things correspondingly, what I can do is, a into c.

Let's look at this.

What is a into c?

It is a coefficient of x, and c is also a coefficient of x.

What we want is x two.

In this general form, you can see that when we are multiplying two factors, both of them having x, the highest power will be x two.

What would be its coefficient?

Multiplying its corresponding coefficients of five into two is ten.

Fine, ten plus next lower power would be x.

Now, you can update x, ad plus bc.

What is a into this term, plus b into this term?

A is a coefficient of x, multiplied by its constant part that is the part that does not have variable along with it of the second bracket, plus the constant part of the first bracket, multiplied by the part which is the coefficient of the variable in the second bracket.

Take the coefficient of x, that is a, into d.

Let's apply it over here.

Coefficient of x is two multiplied by three, so you get six.

Then take the coefficient of x on this bracket, so it's five and multiply it with one so this is it.

Then b into c.

What is b?

A constant part over here, and...

sorry, it's b into d.

(6:18)

What is b into d?

Constant part over here, and constant part over here.

(33:84)

We just change the color, the constant part over here and the constant part over here.

That is b into d.

It does not have any coefficient...

it does not have x along with it, or I can say it is x to power of zero.

As you can see, it is power of one.

So, b into d, and it is three.

This should be the simplified form of this.

Let us do it with our usual method, two x plus one multiplied by five x plus three, the ten x two plus six x plus five x plus three, which is equal to ten x two plus six plus five is eleven x, plus this is a plus sign plus three.

As you can see, we can simplify this further as ten x two plus six plus five eleven x, plus three, and x to the zero is one.

You're getting both same answer, but this method is really efficient.

Now, you might be wondering if every time you have to write this general form.

You really don't need to.

Let us see how it works, even when you don't write the general form, or you don't go through this above mentioned generic process.

If you have a number like five x minus one and three x plus two, remember that here it is negative.

Here there are two factors, so highest power will be squared, and there will be some coefficient of it.

It will be five into three, fifteen.

Then, next power will be x.

What will be its coefficient?

five that is coefficient of x in the first bracket, and the constant part in the second is five into two is ten.

Then, constant part of first bracket, multiplied by the coefficient of x in second, it is minus three because here it's minus one.

Put addition sign over here.

Plus...

now you have to multiply the two constant parts, minus one into two.

That is minus two so what we get is one five x two ten minus three seven x, minus two.

Just verify yourself with your usual procedure and you will end up with the same answer.

What if we have one more term over here?

As we just saw earlier, we are going to expand this method, and we have this ex plus f, but rather than toiling with this general approach further, I can teach you exactly how to apply this method for three factors or four factors.

I'm not going to expand it any further because we are here to simplify things, and not to complicate it any more.

Let us understand direct approach.

Let's say I have three x plus one x plus two and two x plus one.

These are the three factors that I have, and I want to multiply them.

When we are multiplying three factors, each of them having one x, one thing is certain that the highest power you're going to get is x three.

How can you obtain x three Multiply this term into this term, and into this term.

What you will have to do is three multiplied by one is three and into two is six, so you've got the coefficient of x three.

The next is x two.

When will you get x two When you multiply two terms having x.

Here, there is three and here there is one.

So, three into one is three and then you multiply that term with this one.

Remember this.

Multiply coefficient of x of first bracket with that of coefficient of x of the second, which is one in this case, and then multiply that product with the constant part in the third bracket, so three into one is three and further you multiply it with one you get three.

Plus...

Then you multiply coefficient of x from first bracket with that of third.

That is, you get six three into two is six and then multiply that with the constant part of the second.

three into two is six, and six into two is one two.

Then you multiply the coefficient of x, in this case one in the second bracket with that of the third bracket, so that's one into two is two and then multiply that with the constant part in the first bracket, so one into two is two and two into one is two.

You get this.

We got the coefficient of x two.

Now, what we did is we multiplied coefficient of x with another coefficient of x, so that here we are multiplying this x into this x, and you got x two and then you multiply it with the constant term, which does not give any more x, so you remain with the power of two in this case.

Let us move a bit further.

The next highest power will be x.

That is a single x.

Let us see how this works.

Multiply the coefficient of x in the first bracket with the constant term of second, so three into two is six, and then that with the constant term in the third bracket three into two is six, six into one is six.

Then multiply this one that is, coefficient of x in the second bracket, with the constant term of other two brackets.

That is one into one is one and then you further multiply it with this one so one into one is again one so add one more.

Plus...

Coefficient of x is two two multiplied by this constant term will give you two.

Sorry, this multiplied by two will give you four, and multiply this further with one.

It will give you four.

Then the constant term is obtained by multiplying all the constants.

That is two into one is two into one is two, so this would be your answer...

one two thirteen, fourteen, fifteen, sixteen, seventeen eleven, plus two.

This is the expansion, I can say.

Isn't it simple, that you don't ever try and multiply things.

You simply add up a few numbers and multiply some small numbers.

This method you can expand till any power of x.

Try it for x raised to four and x raised to five for your answer, and just let me know in the comment area if you could get it.

If you can't get it, just let me know so that I can create a video to explain you in an even better way.

Thank you.

redpajama_set_name: RedPajamaGithub


text:
import time

import pytest
import requests
from settings import TEST_DATA
from suite.utils.custom_resources_utils import read_custom_resource
from suite.utils.policy_resources_utils import create_policy_from_yaml, delete_policy
from suite.utils.resources_utils import wait_before_test
from suite.utils.vs_vsr_resources_utils import patch_v_s_route_from_yaml, patch_virtual_server_from_yaml

std_vs_src = f"{TEST_DATA}/virtual-server-route/standard/virtual-server.yaml"
rl_pol_pri_src = f"{TEST_DATA}/rate-limit/policies/rate-limit-primary.yaml"
rl_vsr_pri_src = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-route-pri-subroute.yaml"
rl_pol_sec_src = f"{TEST_DATA}/rate-limit/policies/rate-limit-secondary.yaml"
rl_vsr_sec_src = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-route-sec-subroute.yaml"
rl_pol_invalid_src = f"{TEST_DATA}/rate-limit/policies/rate-limit-invalid.yaml"
rl_vsr_invalid_src = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-route-invalid-subroute.yaml"
rl_vsr_override_src = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-route-override-subroute.yaml"
rl_vsr_override_vs_spec_src = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-vsr-spec-override.yaml"
rl_vsr_override_vs_route_src = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-vsr-route-override.yaml"

@pytest.mark.policies
@pytest.mark.parametrize(
    "crd_ingress_controller, v_s_route_setup",
    [
        (
            {
                "type": "complete",
                "extra_args": [
                    f"-enable-custom-resources",
                    f"-enable-leader-election=false",
                ],
            },
            {"example": "virtual-server-route"},
        )
    ],
    indirect=True,
)
class TestRateLimitingPoliciesVsr:
    def restore_default_vsr(self, kube_apis, v_s_route_setup) -> None:
        """
        Function to revert vsr deployments to valid state
        """
        patch_src_m = f"{TEST_DATA}/virtual-server-route/route-multiple.yaml"
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            patch_src_m,
            v_s_route_setup.route_m.namespace,
        )
        wait_before_test()

    @pytest.mark.smoke
    @pytest.mark.parametrize("src", [rl_vsr_pri_src])
    def test_rl_policy_1rs_vsr(
        self,
        kube_apis,
        crd_ingress_controller,
        v_s_route_app_setup,
        v_s_route_setup,
        test_namespace,
        src,
    ):
        """
        Test if rate-limiting policy is working with ~1 rps in vsr:subroute
        """

        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        print(f"Create rl policy")
        pol_name = create_policy_from_yaml(kube_apis.custom_objects, rl_pol_pri_src, v_s_route_setup.route_m.namespace)
        print(f"Patch vsr with policy: {src}")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            src,
            v_s_route_setup.route_m.namespace,
        )

        wait_before_test()
        policy_info = read_custom_resource(
            kube_apis.custom_objects, v_s_route_setup.route_m.namespace, "policies", pol_name
        )
        occur = []
        t_end = time.perf_counter() + 1
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        print(resp.status_code)
        assert resp.status_code == 200
        while time.perf_counter() < t_end:
            resp = requests.get(
                f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                headers={"host": v_s_route_setup.vs_host},
            )
            occur.append(resp.status_code)
        delete_policy(kube_apis.custom_objects, pol_name, v_s_route_setup.route_m.namespace)
        self.restore_default_vsr(kube_apis, v_s_route_setup)
        assert (
            policy_info["status"]
            and policy_info["status"]["reason"] == "AddedOrUpdated"
            and policy_info["status"]["state"] == "Valid"
        )
        assert occur.count(200) <= 1

    @pytest.mark.parametrize("src", [rl_vsr_sec_src])
    def test_rl_policy_5rs_vsr(
        self,
        kube_apis,
        crd_ingress_controller,
        v_s_route_app_setup,
        v_s_route_setup,
        test_namespace,
        src,
    ):
        """
        Test if rate-limiting policy is working with ~5 rps in vsr:subroute
        """
        rate_sec = 5
        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        print(f"Create rl policy")
        pol_name = create_policy_from_yaml(kube_apis.custom_objects, rl_pol_sec_src, v_s_route_setup.route_m.namespace)
        print(f"Patch vsr with policy: {src}")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            src,
            v_s_route_setup.route_m.namespace,
        )

        wait_before_test()
        policy_info = read_custom_resource(
            kube_apis.custom_objects, v_s_route_setup.route_m.namespace, "policies", pol_name
        )
        occur = []
        t_end = time.perf_counter() + 1
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        print(resp.status_code)
        assert resp.status_code == 200
        while time.perf_counter() < t_end:
            resp = requests.get(
                f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                headers={"host": v_s_route_setup.vs_host},
            )
            occur.append(resp.status_code)
        delete_policy(kube_apis.custom_objects, pol_name, v_s_route_setup.route_m.namespace)
        self.restore_default_vsr(kube_apis, v_s_route_setup)
        assert (
            policy_info["status"]
            and policy_info["status"]["reason"] == "AddedOrUpdated"
            and policy_info["status"]["state"] == "Valid"
        )
        assert rate_sec >= occur.count(200) >= (rate_sec - 2)

    @pytest.mark.parametrize("src", [rl_vsr_override_src])
    def test_rl_policy_override_vsr(
        self,
        kube_apis,
        crd_ingress_controller,
        v_s_route_app_setup,
        v_s_route_setup,
        test_namespace,
        src,
    ):
        """
        Test if rate-limiting policy with lower rps is used when multiple policies are listed in vsr:subroute
        And test if the order of policies in vsr:subroute has no effect
        """

        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        print(f"Create rl policy: 1rps")
        pol_name_pri = create_policy_from_yaml(
            kube_apis.custom_objects, rl_pol_pri_src, v_s_route_setup.route_m.namespace
        )
        print(f"Create rl policy: 5rps")
        pol_name_sec = create_policy_from_yaml(
            kube_apis.custom_objects, rl_pol_sec_src, v_s_route_setup.route_m.namespace
        )
        print(f"Patch vsr with policy: {src}")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            src,
            v_s_route_setup.route_m.namespace,
        )
        wait_before_test()
        occur = []
        t_end = time.perf_counter() + 1
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        print(resp.status_code)
        assert resp.status_code == 200
        while time.perf_counter() < t_end:
            resp = requests.get(
                f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                headers={"host": v_s_route_setup.vs_host},
            )
            occur.append(resp.status_code)
        delete_policy(kube_apis.custom_objects, pol_name_pri, v_s_route_setup.route_m.namespace)
        delete_policy(kube_apis.custom_objects, pol_name_sec, v_s_route_setup.route_m.namespace)
        self.restore_default_vsr(kube_apis, v_s_route_setup)
        assert occur.count(200) <= 1

    @pytest.mark.parametrize("src", [rl_vsr_pri_src])
    def test_rl_policy_deleted_vsr(
        self,
        kube_apis,
        crd_ingress_controller,
        v_s_route_app_setup,
        v_s_route_setup,
        test_namespace,
        src,
    ):
        """
        Test if deleting a policy results in 500
        """
        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        print(f"Create rl policy")
        pol_name = create_policy_from_yaml(kube_apis.custom_objects, rl_pol_pri_src, v_s_route_setup.route_m.namespace)
        print(f"Patch vsr with policy: {src}")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            src,
            v_s_route_setup.route_m.namespace,
        )
        wait_before_test()
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        assert resp.status_code == 200
        print(resp.status_code)
        delete_policy(kube_apis.custom_objects, pol_name, v_s_route_setup.route_m.namespace)
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        self.restore_default_vsr(kube_apis, v_s_route_setup)
        assert resp.status_code == 500

    @pytest.mark.parametrize("src", [rl_vsr_invalid_src])
    def test_rl_policy_invalid_vsr(
        self,
        kube_apis,
        crd_ingress_controller,
        v_s_route_app_setup,
        v_s_route_setup,
        test_namespace,
        src,
    ):
        """
        Test if using an invalid policy in vsr:subroute results in 500
        """
        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        print(f"Create rl policy")
        invalid_pol_name = create_policy_from_yaml(
            kube_apis.custom_objects, rl_pol_invalid_src, v_s_route_setup.route_m.namespace
        )
        print(f"Patch vsr with policy: {src}")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            src,
            v_s_route_setup.route_m.namespace,
        )

        wait_before_test()
        policy_info = read_custom_resource(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.namespace,
            "policies",
            invalid_pol_name,
        )
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        print(resp.status_code)
        delete_policy(kube_apis.custom_objects, invalid_pol_name, v_s_route_setup.route_m.namespace)
        self.restore_default_vsr(kube_apis, v_s_route_setup)
        assert (
            policy_info["status"]
            and policy_info["status"]["reason"] == "Rejected"
            and policy_info["status"]["state"] == "Invalid"
        )
        assert resp.status_code == 500

    @pytest.mark.parametrize("src", [rl_vsr_override_vs_spec_src, rl_vsr_override_vs_route_src])
    def test_override_vs_vsr(
        self,
        kube_apis,
        crd_ingress_controller,
        v_s_route_app_setup,
        test_namespace,
        v_s_route_setup,
        src,
    ):
        """
        Test if vsr subroute policy overrides vs spec policy
        And vsr subroute policy overrides vs route policy
        """
        rate_sec = 5
        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"

        # policy for virtualserver
        print(f"Create rl policy: 1rps")
        pol_name_vs = create_policy_from_yaml(
            kube_apis.custom_objects, rl_pol_pri_src, v_s_route_setup.route_m.namespace
        )
        # policy for virtualserverroute
        print(f"Create rl policy: 5rps")
        pol_name_vsr = create_policy_from_yaml(
            kube_apis.custom_objects, rl_pol_sec_src, v_s_route_setup.route_m.namespace
        )

        # patch vsr with 5rps policy
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects,
            v_s_route_setup.route_m.name,
            rl_vsr_sec_src,
            v_s_route_setup.route_m.namespace,
        )
        # patch vs with 1rps policy
        patch_virtual_server_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.vs_name, src, v_s_route_setup.namespace
        )
        wait_before_test()
        occur = []
        t_end = time.perf_counter() + 1
        resp = requests.get(
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            headers={"host": v_s_route_setup.vs_host},
        )
        print(resp.status_code)
        assert resp.status_code == 200
        while time.perf_counter() < t_end:
            resp = requests.get(
                f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                headers={"host": v_s_route_setup.vs_host},
            )
            occur.append(resp.status_code)

        delete_policy(kube_apis.custom_objects, pol_name_vs, v_s_route_setup.route_m.namespace)
        delete_policy(kube_apis.custom_objects, pol_name_vsr, v_s_route_setup.route_m.namespace)
        self.restore_default_vsr(kube_apis, v_s_route_setup)
        patch_virtual_server_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.vs_name, std_vs_src, v_s_route_setup.namespace
        )
        assert rate_sec >= occur.count(200) >= (rate_sec - 2)


text:
namespace SecurePages.Entities {
    using System.Text.RegularExpressions;

    public abstract class UrlBase : IUrlBase {
        #region Public Properties

        public SecureUrlMatchType MatchType { get; set; }

        public RegexOptions RegexOptions { get; set; }

        public string Url { get; set; }

        #endregion
    }
}


text:
$(function()
{
    $(".chosen").chosen(defaultChosenOptions);
})


text:
.class public Landroid/app/DownloadManager$Query;
.super Ljava/lang/Object;
.source "DownloadManager.java"

# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Landroid/app/DownloadManager;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x9
    name = "Query"
.end annotation

# static fields
.field public static final ORDER_ASCENDING:I = 0x1

.field public static final ORDER_DESCENDING:I = 0x2

# instance fields
.field private mIds:[J

.field private mOnlyIncludeVisibleInDownloadsUi:Z

.field private mOrderByColumn:Ljava/lang/String;

.field private mOrderDirection:I

.field private mStatusFlags:Ljava/lang/Integer;

# direct methods
.method public constructor <init>()V
    .locals 1

    .prologue
    const/4 v0, 0x0

    .line 752
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 765
    iput-object v0, p0, Landroid/app/DownloadManager$Query;->mIds:[J

    .line 766
    iput-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    .line 767
    const-string v0, "lastmod"

    iput-object v0, p0, Landroid/app/DownloadManager$Query;->mOrderByColumn:Ljava/lang/String;

    .line 768
    const/4 v0, 0x2

    iput v0, p0, Landroid/app/DownloadManager$Query;->mOrderDirection:I

    .line 769
    const/4 v0, 0x0

    iput-boolean v0, p0, Landroid/app/DownloadManager$Query;->mOnlyIncludeVisibleInDownloadsUi:Z

    return-void
.end method

.method private joinStrings(Ljava/lang/String;Ljava/lang/Iterable;)Ljava/lang/String;
    .locals 5
    .parameter "joiner"
    .parameter
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            "Ljava/lang/Iterable",
            "<",
            "Ljava/lang/String;",
            ">;)",
            "Ljava/lang/String;"
        }
    .end annotation

    .prologue
    .line 886
    .local p2, parts:Ljava/lang/Iterable;,"Ljava/lang/Iterable<Ljava/lang/String;>;"
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    .line 887
    .local v0, builder:Ljava/lang/StringBuilder;
    const/4 v1, 0x1

    .line 888
    .local v1, first:Z
    invoke-interface {p2}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;

    move-result-object v2

    .local v2, i$:Ljava/util/Iterator;
    :goto_0
    invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z

    move-result v4

    if-eqz v4, :cond_1

    invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v3

    check-cast v3, Ljava/lang/String;

    .line 889
    .local v3, part:Ljava/lang/String;
    if-nez v1, :cond_0

    .line 890
    invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    .line 892
    :cond_0
    invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    .line 893
    const/4 v1, 0x0

    goto :goto_0

    .line 895
    .end local v3           #part:Ljava/lang/String;
    :cond_1
    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    return-object v4
.end method

.method private statusClause(Ljava/lang/String;I)Ljava/lang/String;
    .locals 2
    .parameter "operator"
    .parameter "value"

    .prologue
    .line 899
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string/jumbo v1, "status"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v1, "\'"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v1, "\'"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method

# virtual methods
.method public orderBy(Ljava/lang/String;I)Landroid/app/DownloadManager$Query;
    .locals 3
    .parameter "column"
    .parameter "direction"

    .prologue
    .line 814
    const/4 v0, 0x1

    if-eq p2, v0, :cond_0

    const/4 v0, 0x2

    if-eq p2, v0, :cond_0

    .line 815
    new-instance v0, Ljava/lang/IllegalArgumentException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Invalid direction: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 818
    :cond_0
    const-string v0, "last_modified_timestamp"

    invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_1

    .line 819
    const-string v0, "lastmod"

    iput-object v0, p0, Landroid/app/DownloadManager$Query;->mOrderByColumn:Ljava/lang/String;

    .line 825
    :goto_0
    iput p2, p0, Landroid/app/DownloadManager$Query;->mOrderDirection:I

    .line 826
    return-object p0

    .line 820
    :cond_1
    const-string/jumbo v0, "total_size"

    invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_2

    .line 821
    const-string/jumbo v0, "total_bytes"

    iput-object v0, p0, Landroid/app/DownloadManager$Query;->mOrderByColumn:Ljava/lang/String;

    goto :goto_0

    .line 823
    :cond_2
    new-instance v0, Ljava/lang/IllegalArgumentException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Cannot order by "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0
.end method

.method runQuery(Landroid/content/ContentResolver;[Ljava/lang/String;Landroid/net/Uri;)Landroid/database/Cursor;
    .locals 10
    .parameter "resolver"
    .parameter "projection"
    .parameter "baseUri"

    .prologue
    .line 835
    move-object v1, p3

    .line 836
    .local v1, uri:Landroid/net/Uri;
    new-instance v8, Ljava/util/ArrayList;

    invoke-direct {v8}, Ljava/util/ArrayList;-><init>()V

    .line 837
    .local v8, selectionParts:Ljava/util/List;,"Ljava/util/List<Ljava/lang/String;>;"
    const/4 v4, 0x0

    .line 839
    .local v4, selectionArgs:[Ljava/lang/String;
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mIds:[J

    if-eqz v0, :cond_0

    .line 840
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mIds:[J

    invoke-static {v0}, Landroid/app/DownloadManager;->getWhereClauseForIds([J)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v8, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 841
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mIds:[J

    invoke-static {v0}, Landroid/app/DownloadManager;->getWhereArgsForIds([J)[Ljava/lang/String;

    move-result-object v4

    .line 844
    :cond_0
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    if-eqz v0, :cond_6

    .line 845
    new-instance v7, Ljava/util/ArrayList;

    invoke-direct {v7}, Ljava/util/ArrayList;-><init>()V

    .line 846
    .local v7, parts:Ljava/util/List;,"Ljava/util/List<Ljava/lang/String;>;"
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    and-int/lit8 v0, v0, 0x1

    if-eqz v0, :cond_1

    .line 847
    const-string v0, "="

    const/16 v2, 0xbe

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 849
    :cond_1
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    and-int/lit8 v0, v0, 0x2

    if-eqz v0, :cond_2

    .line 850
    const-string v0, "="

    const/16 v2, 0xc0

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 852
    :cond_2
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    and-int/lit8 v0, v0, 0x4

    if-eqz v0, :cond_3

    .line 853
    const-string v0, "="

    const/16 v2, 0xc1

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 854
    const-string v0, "="

    const/16 v2, 0xc2

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 855
    const-string v0, "="

    const/16 v2, 0xc3

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 856
    const-string v0, "="

    const/16 v2, 0xc4

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 858
    const-string v0, "="

    const/16 v2, 0xc6

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 861
    :cond_3
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    and-int/lit8 v0, v0, 0x8

    if-eqz v0, :cond_4

    .line 862
    const-string v0, "="

    const/16 v2, 0xc8

    invoke-direct {p0, v0, v2}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 864
    :cond_4
    iget-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    and-int/lit8 v0, v0, 0x10

    if-eqz v0, :cond_5

    .line 865
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "("

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, ">="

    const/16 v9, 0x190

    invoke-direct {p0, v2, v9}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, " AND "

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, "<"

    const/16 v9, 0x258

    invoke-direct {p0, v2, v9}, Landroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, ")"

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-interface {v7, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 868
    :cond_5
    const-string v0, " OR "

    invoke-direct {p0, v0, v7}, Landroid/app/DownloadManager$Query;->joinStrings(Ljava/lang/String;Ljava/lang/Iterable;)Ljava/lang/String;

    move-result-object v0

    invoke-interface {v8, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 871
    .end local v7           #parts:Ljava/util/List;,"Ljava/util/List<Ljava/lang/String;>;"
    :cond_6
    iget-boolean v0, p0, Landroid/app/DownloadManager$Query;->mOnlyIncludeVisibleInDownloadsUi:Z

    if-eqz v0, :cond_7

    .line 872
    const-string v0, "is_visible_in_downloads_ui != \'0\'"

    invoke-interface {v8, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 876
    :cond_7
    const-string v0, "deleted != \'1\'"

    invoke-interface {v8, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 878
    const-string v0, " AND "

    invoke-direct {p0, v0, v8}, Landroid/app/DownloadManager$Query;->joinStrings(Ljava/lang/String;Ljava/lang/Iterable;)Ljava/lang/String;

    move-result-object v3

    .line 879
    .local v3, selection:Ljava/lang/String;
    iget v0, p0, Landroid/app/DownloadManager$Query;->mOrderDirection:I

    const/4 v2, 0x1

    if-ne v0, v2, :cond_8

    const-string v6, "ASC"

    .line 880
    .local v6, orderDirection:Ljava/lang/String;
    :goto_0
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    iget-object v2, p0, Landroid/app/DownloadManager$Query;->mOrderByColumn:Ljava/lang/String;

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, " "

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v5

    .local v5, orderBy:Ljava/lang/String;
    move-object v0, p1

    move-object v2, p2

    .line 882
    invoke-virtual/range {v0 .. v5}, Landroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;

    move-result-object v0

    return-object v0

    .line 879
    .end local v5           #orderBy:Ljava/lang/String;
    .end local v6           #orderDirection:Ljava/lang/String;
    :cond_8
    const-string v6, "DESC"

    goto :goto_0
.end method

.method public varargs setFilterById([J)Landroid/app/DownloadManager$Query;
    .locals 0
    .parameter "ids"

    .prologue
    .line 776
    iput-object p1, p0, Landroid/app/DownloadManager$Query;->mIds:[J

    .line 777
    return-object p0
.end method

.method public setFilterByStatus(I)Landroid/app/DownloadManager$Query;
    .locals 1
    .parameter "flags"

    .prologue
    .line 786
    invoke-static {p1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v0

    iput-object v0, p0, Landroid/app/DownloadManager$Query;->mStatusFlags:Ljava/lang/Integer;

    .line 787
    return-object p0
.end method

.method public setOnlyIncludeVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Query;
    .locals 0
    .parameter "value"

    .prologue
    .line 799
    iput-boolean p1, p0, Landroid/app/DownloadManager$Query;->mOnlyIncludeVisibleInDownloadsUi:Z

    .line 800
    return-object p0
.end method


text:
Author: Bradley Beddoes and Shaun Mangelsdorf

Copyright 2014, Australian Access Federation

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.

## Background
There exists a community of researchers that are unable to take advantage of the services provided by the
AAF because they are not a member of, or associated with, an organisation that is a subscriber to the AAF.
They are thus unable to obtain an identity and credentials that would enable their use of the federation
services and resources. These researchers can be from small research organisations, work with government
departments or commercial organisations or may be citizen researchers.

The current AAF Virtual Home Organisation (VHO) software, taken from the Federation of Switzerland,
is now legacy software. The VHO software does not support higher levels of assurance, provides little
work flow for creating and managing end users, has no end user self management features as well as
supports a limited number of end users, making it inadequate for small research organisations wanting
to use it as their indentify provider. This means that researchers without a relationship with an IdP
are unable to connect to the Federation.

The new VHR would solve this problem by allowing small research groups that are unable to, or would
rather not, deploy an IdP to subscribe to the AAF and use the VHR as their identity provider. The AAF
would offer this as an enhanced service to the sector.

## Key Benefits
* Increased functionality over that provided by the existing Virtual Home Organisation (VHO)
* Removal of technical and financial barriers to on-board research groups into the federation (eg. Bioplatforms Australia, Platforms for Collaboration)
* Improved speed at which researchers will be able to gain access to federated services (removing technical barriers faced by smaller research groups and organisations wanting to gain access to federated services)

The VHR will increase access to the following subscriber groups:

 1. Small cohorts of researchers that do not belong to organisations subscribed to the AAF (e.g. research bodies)
 2. Commercial researchers (that usually partner with AAF subscribers)
 3. Citizen researchers that are associated with an AAF subscribed organisation
 4. International researchers associated with an AAF subscribed organisation.

## Key Deliverables
1. A complete user self-service web interface to request accounts, manage passwords, reset forgotten passwords
2. A mechanism for 2 factor authentication
3. Workflow and administrative interface for subscribers to manage users
4. Workflow and administrative interfaces for supplying higher Levels of Identity Assurance to end users
5. Usage reports
6. High availability architecture
7. Full integration into the AAF Federation Registry

## Local Dependencies
As of VH 1.5.0 (March 2017) there is an extra step required to build the AAF
patched version of Groovy for dependency resolution purposes.

To build AAF Groovy:

1. Be on Java 7
1. Be in the root directory of the virtualhome project checked out from
Github
1. `git submodule init`
1. `git submodule update`
1. cd aaf-patched-groovy
1. ./gradlew clean dist

To build VH WAR file:

1. Return to ../virtualhome and use `grails war` as normal.

To develop VH code:

1. Return to ../virtualhome and use `grails Y` as normal.


text:
package com.azure.cosmos.implementation;

import com.azure.cosmos.ConnectionMode;
import com.azure.cosmos.ConsistencyLevel;
import com.azure.cosmos.CosmosDiagnostics;
import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.guava27.Strings;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public interface DiagnosticsClientContext {

    DiagnosticsClientConfig getConfig();

    CosmosDiagnostics createDiagnostics();

    static final class DiagnosticsClientConfigSerializer extends StdSerializer<DiagnosticsClientConfig> {
        private final static Logger logger = LoggerFactory.getLogger(DiagnosticsClientConfigSerializer.class);
        public final static DiagnosticsClientConfigSerializer INSTANCE = new DiagnosticsClientConfigSerializer();

        private static final Pattern SPACE_PATTERN = Pattern.compile(" ");

        private static final long serialVersionUID = 1;

        protected DiagnosticsClientConfigSerializer() {
            this(null);
        }

        protected DiagnosticsClientConfigSerializer(Class<DiagnosticsClientConfig> t) {
            super(t);
        }

        @Override
        public void serialize(DiagnosticsClientConfig clientConfig, JsonGenerator generator,
                              SerializerProvider serializerProvider) throws IOException {
            generator.writeStartObject();
            try {
                generator.writeNumberField("id", clientConfig.getClientId());
                generator.writeStringField("machineId", ClientTelemetry.getMachineId(clientConfig));
                generator.writeStringField("connectionMode", clientConfig.getConnectionMode().toString());
                generator.writeNumberField("numberOfClients", clientConfig.getActiveClientsCount());
                generator.writeObjectFieldStart("clientEndpoints");
                for (Map.Entry<String, Integer> entry: clientConfig.clientMap.entrySet()) {
                    try {
                        generator.writeNumberField(entry.getKey(), entry.getValue());
                    } catch (Exception e) {
                        logger.debug("unexpected failure", e);
                    }
                }
                generator.writeEndObject();
                generator.writeObjectFieldStart("connCfg");
                try {
                    generator.writeStringField("rntbd", clientConfig.rntbdConfig());
                    generator.writeStringField("gw", clientConfig.gwConfig());
                    generator.writeStringField("other", clientConfig.otherConnectionConfig());
                } catch (Exception e) {
                    logger.debug("unexpected failure", e);
                }
                generator.writeEndObject();
                generator.writeStringField("consistencyCfg", clientConfig.consistencyRelatedConfig());
            } catch (Exception e) {
                logger.debug("unexpected failure", e);
            }
            generator.writeEndObject();
        }
    }

    @JsonSerialize(using = DiagnosticsClientContext.DiagnosticsClientConfigSerializer.class)
    class DiagnosticsClientConfig {

        private AtomicInteger activeClientsCnt;
        private int clientId;
        private Map<String, Integer> clientMap;

        private ConsistencyLevel consistencyLevel;
        private boolean connectionSharingAcrossClientsEnabled;
        private String consistencyRelatedConfigAsString;
        private String httpConfigAsString;
        private String otherCfgAsString;
        private String preferredRegionsAsString;
        private boolean endpointDiscoveryEnabled;
        private boolean multipleWriteRegionsEnabled;

        private String rntbdConfigAsString;
        private ConnectionMode connectionMode;
        private String machineId;
        private boolean replicaValidationEnabled = Configs.isReplicaAddressValidationEnabled();

        public DiagnosticsClientConfig withMachineId(String machineId) {
            this.machineId = machineId;
            return this;
        }

        public DiagnosticsClientConfig withActiveClientCounter(AtomicInteger activeClientsCnt) {
            this.activeClientsCnt = activeClientsCnt;
            return this;
        }

        public DiagnosticsClientConfig withClientId(int clientId) {
            this.clientId = clientId;
            return this;
        }

        public DiagnosticsClientConfig withClientMap(Map<String, Integer> clientMap) {
            this.clientMap = clientMap;
            return this;
        }

        public DiagnosticsClientConfig withEndpointDiscoveryEnabled(boolean endpointDiscoveryEnabled) {
            this.endpointDiscoveryEnabled = endpointDiscoveryEnabled;
            return this;
        }

        public DiagnosticsClientConfig withMultipleWriteRegionsEnabled(boolean multipleWriteRegionsEnabled) {
            this.multipleWriteRegionsEnabled = multipleWriteRegionsEnabled;
            return this;
        }

        public DiagnosticsClientConfig withPreferredRegions(List<String> preferredRegions) {
            if (preferredRegions == null || preferredRegions.isEmpty()) {
                this.preferredRegionsAsString = "";
            } else {
                this.preferredRegionsAsString = preferredRegions
                    .stream()
                    .map(r -> DiagnosticsClientConfigSerializer.SPACE_PATTERN.matcher(r.toLowerCase(Locale.ROOT)).replaceAll(""))
                    .collect(Collectors.joining(","));
            }
            return this;
        }

        public DiagnosticsClientConfig withConnectionSharingAcrossClientsEnabled(boolean connectionSharingAcrossClientsEnabled) {
            this.connectionSharingAcrossClientsEnabled = connectionSharingAcrossClientsEnabled;
            return this;
        }

        public DiagnosticsClientConfig withConsistency(ConsistencyLevel consistencyLevel) {
            this.consistencyLevel = consistencyLevel;
            return this;
        }

        public DiagnosticsClientConfig withRntbdOptions(String rntbdConfigAsString) {
            this.rntbdConfigAsString = rntbdConfigAsString;
            return this;
        }

        public DiagnosticsClientConfig withGatewayHttpClientConfig(String httpConfigAsString) {
            this.httpConfigAsString = httpConfigAsString;
            return this;
        }

        public DiagnosticsClientConfig withConnectionMode(ConnectionMode connectionMode) {
            this.connectionMode = connectionMode;
            return this;
        }

        public ConnectionMode getConnectionMode() {
            return connectionMode;
        }

        public String consistencyRelatedConfig() {
            if (consistencyRelatedConfigAsString == null) {
                this.consistencyRelatedConfigAsString = this.consistencyRelatedConfigInternal();
            }

            return this.consistencyRelatedConfigAsString;
        }

        public String rntbdConfig() {
            return this.rntbdConfigAsString;
        }

        public String gwConfig() {
            return this.httpConfigAsString;
        }

        public String otherConnectionConfig() {
            if (this.otherCfgAsString == null) {
                this.otherCfgAsString = Strings.lenientFormat("(ed: %s, cs: %s, rv: %s)",
                    this.endpointDiscoveryEnabled,
                    this.connectionSharingAcrossClientsEnabled,
                    this.replicaValidationEnabled);
            }

            return this.otherCfgAsString;
        }

        public int getClientId() {
            return this.clientId;
        }

        public String getMachineId() { return this.machineId; }

        public int getActiveClientsCount() {
            return this.activeClientsCnt != null ? this.activeClientsCnt.get() : -1;
        }

        private String consistencyRelatedConfigInternal() {
            return Strings.lenientFormat("(consistency: %s, mm: %s, prgns: [%s])", this.consistencyLevel,
                this.multipleWriteRegionsEnabled,
                preferredRegionsAsString);
        }
    }
}


text:
import { AuthError } from "@azure/msal-common";

/**
 * BrowserAuthErrorMessage class containing string constants used by error codes and messages.
 */
export const BrowserConfigurationAuthErrorMessage = {
    redirectUriNotSet: {
        code: "redirect_uri_empty",
        desc: "A redirect URI is required for all calls, and none has been set."
    },
    postLogoutUriNotSet: {
        code: "post_logout_uri_empty",
        desc: "A post logout redirect has not been set."
    },
    storageNotSupportedError: {
        code: "storage_not_supported",
        desc: "Given storage configuration option was not supported."
    },
    noRedirectCallbacksSet: {
        code: "no_redirect_callbacks",
        desc: "No redirect callbacks have been set. Please call setRedirectCallbacks() with the appropriate function arguments before continuing. " +
            "More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics."
    },
    invalidCallbackObject: {
        code: "invalid_callback_object",
        desc: "The object passed for the callback was invalid. " +
          "More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics."
    },
    stubPcaInstanceCalled: {
        code: "stubbed_public_client_application_called",
        desc: "Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors"
    },
    inMemRedirectUnavailable: {
        code: "in_mem_redirect_unavailable",
        desc: "Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true."
    },
    entropyNotProvided: {
        code: "entropy_not_provided",
        desc: "The available browser crypto interface requires entropy set via system.cryptoOptions.entropy configuration option."
    }
};

/**
 * Browser library error class thrown by the MSAL.js library for SPAs
 */
export class BrowserConfigurationAuthError extends AuthError {

    constructor(errorCode: string, errorMessage?: string) {
        super(errorCode, errorMessage);
        this.name = "BrowserConfigurationAuthError";

        Object.setPrototypeOf(this, BrowserConfigurationAuthError.prototype);
    }

    /**
     * Creates an error thrown when the redirect uri is empty (not set by caller)
     */
    static createRedirectUriEmptyError(): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.redirectUriNotSet.code,
            BrowserConfigurationAuthErrorMessage.redirectUriNotSet.desc);
    }

    /**
     * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)
     */
    static createPostLogoutRedirectUriEmptyError(): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.code,
            BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.desc);
    }

    /**
     * Creates error thrown when given storage location is not supported.
     * @param givenStorageLocation
     */
    static createStorageNotSupportedError(givenStorageLocation: string): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.storageNotSupportedError.code, `${BrowserConfigurationAuthErrorMessage.storageNotSupportedError.desc} Given Location: ${givenStorageLocation}`);
    }

    /**
     * Creates error thrown when redirect callbacks are not set before calling loginRedirect() or acquireTokenRedirect().
     */
    static createRedirectCallbacksNotSetError(): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.code,
            BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.desc);
    }

    /**
     * Creates error thrown when the stub instance of PublicClientApplication is called.
     */
    static createStubPcaInstanceCalledError(): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.stubPcaInstanceCalled.code,
            BrowserConfigurationAuthErrorMessage.stubPcaInstanceCalled.desc);
    }

    /*
     * Create an error thrown when in-memory storage is used and storeAuthStateInCookie=false.
     */
    static createInMemoryRedirectUnavailableError(): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.inMemRedirectUnavailable.code, BrowserConfigurationAuthErrorMessage.inMemRedirectUnavailable.desc);
    }

    /**
     * Creates an error thrown when a crypto interface that requires entropy is initialized without entropy
     */
    static createEntropyNotProvided(): BrowserConfigurationAuthError {
        return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.entropyNotProvided.code, BrowserConfigurationAuthErrorMessage.entropyNotProvided.desc);
    }
}


text:
@implementation TJCFeaturedAppManager

TJC_SYNTHESIZE_SINGLETON_FOR_CLASS(TJCFeaturedAppManager)

@synthesize featuredAppModelObj = featuredAppModelObj_;
@synthesize featuredAppDisplayCount = featuredAppDisplayCount_;

- (id) init
{
	if ((self = [super init]))
	{
		featuredAppHandlerObj_ = [[TJCFeaturedAppRequestHandler alloc] initRequestWithDelegate:self andRequestTag:0];
		featuredAppDisplayCount_ = TJC_FEATURED_APP_DEFAULT_MAX_DISPLAY_COUNT;
	}
	return self;
}

- (void)getFeaturedApp
{
	[featuredAppHandlerObj_ requestFeaturedApp];
}

- (void) getFeaturedAppWithCurrencyID:(NSString*)currencyID
{
	[featuredAppHandlerObj_ requestFeaturedAppWithCurrencyID:currencyID];
}

- (void) setFeaturedAppDisplayCount:(int) displayCount
{
	if (displayCount == TJC_FEATURED_COUNT_INF)
	{
		featuredAppDisplayCount_ = TJC_FEATURED_COUNT_INF;
	}
	else
	{
		// Display count is subtracted here by one to account for counting from 0.
		featuredAppDisplayCount_ = displayCount - 1;
	}
}

// called when request succeeeds
- (void) fetchResponseSuccessWithData:(void*)dataObj withRequestTag:(int)aTag
{
	// Store all the featured app data inside the featured app model.
	[featuredAppModelObj_ release];
	featuredAppModelObj_ = [[TJCFeaturedAppModel alloc] initWithTBXML:dataObj];

	int dispCount = [[TJCFeaturedAppDBManager sharedTJCFeaturedAppDBManager] getDisplayedCountForStoreID:featuredAppModelObj_.storeID];

	// Check whether we have reached our display count so that featured app will not keep showing up.
	// Also, if the store id happens to match the app id, then we will show the featured app indefinitely.
	if ((featuredAppDisplayCount_ == TJC_FEATURED_COUNT_INF) ||
		 [[[TapjoyConnect sharedTapjoyConnect] appID] isEqualToString:featuredAppModelObj_.storeID])
	{
		// The count is set to infinity, always return the object.
		[[TJCFeaturedAppDBManager sharedTJCFeaturedAppDBManager] addApp:featuredAppModelObj_];
		[[NSNotificationCenter defaultCenter] postNotificationName:TJC_FEATURED_APP_RESPONSE_NOTIFICATION
																			 object:featuredAppModelObj_];
	}
	else if (dispCount == 0 && dispCount <= featuredAppDisplayCount_)
	{
		// On the initial request, store the featured app data.
		[[TJCFeaturedAppDBManager sharedTJCFeaturedAppDBManager] addApp:featuredAppModelObj_];
		[[NSNotificationCenter defaultCenter] postNotificationName:TJC_FEATURED_APP_RESPONSE_NOTIFICATION
																			 object:featuredAppModelObj_];
	}
	else if (dispCount <= featuredAppDisplayCount_)
	{
		// Udpate the display count each time featured app data is requested and returned.
		[[TJCFeaturedAppDBManager sharedTJCFeaturedAppDBManager] incrementDisplayedCountForStoreID:featuredAppModelObj_.storeID];
		[[NSNotificationCenter defaultCenter] postNotificationName:TJC_FEATURED_APP_RESPONSE_NOTIFICATION
																			 object:featuredAppModelObj_];
	}
	else
	{
		// After the max featured app display count has been reached, just return nil.
		[[NSNotificationCenter defaultCenter] postNotificationName:TJC_FEATURED_APP_RESPONSE_NOTIFICATION object:nil];
		[featuredAppModelObj_ release];
		featuredAppModelObj_ = nil;
	}
}

// raised when error occurs
- (void) fetchResponseError:(TJCResponseError)errorType errorDescription:(id)errorDescObj requestTag:(int) aTag
{
	[[NSNotificationCenter defaultCenter] postNotificationName:TJC_FEATURED_APP_RESPONSE_NOTIFICATION object:nil];
	//No Object is sent No Model created so just release the Handler
	[self releaseFeaturedAppHandler];
}

- (void) releaseFeaturedAppHandler
{
	if(featuredAppHandlerObj_)
	{
		[featuredAppHandlerObj_ release];
		featuredAppHandlerObj_ = nil;
	}
}

- (void) dealloc
{
	if(featuredAppHandlerObj_)
	{
		[featuredAppHandlerObj_ release];
		featuredAppHandlerObj_ = nil;
	}

	[featuredAppModelObj_ release];
	[super dealloc];
}

@end


text:
package protocol

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"golang.org/x/tools/internal/event"
	"golang.org/x/tools/internal/jsonrpc2"
	jsonrpc2_v2 "golang.org/x/tools/internal/jsonrpc2_v2"
	"golang.org/x/tools/internal/xcontext"
)

var (
	// RequestCancelledError should be used when a request is cancelled early.
	RequestCancelledError   = jsonrpc2.NewError(-32800, "JSON RPC cancelled")
	RequestCancelledErrorV2 = jsonrpc2_v2.NewError(-32800, "JSON RPC cancelled")
)

type ClientCloser interface {
	Client
	io.Closer
}

type connSender interface {
	io.Closer

	Notify(ctx context.Context, method string, params interface{}) error
	Call(ctx context.Context, method string, params, result interface{}) error
}

type clientDispatcher struct {
	sender connSender
}

func (c *clientDispatcher) Close() error {
	return c.sender.Close()
}

// ClientDispatcher returns a Client that dispatches LSP requests across the
// given jsonrpc2 connection.
func ClientDispatcher(conn jsonrpc2.Conn) ClientCloser {
	return &clientDispatcher{sender: clientConn{conn}}
}

type clientConn struct {
	conn jsonrpc2.Conn
}

func (c clientConn) Close() error {
	return c.conn.Close()
}

func (c clientConn) Notify(ctx context.Context, method string, params interface{}) error {
	return c.conn.Notify(ctx, method, params)
}

func (c clientConn) Call(ctx context.Context, method string, params interface{}, result interface{}) error {
	id, err := c.conn.Call(ctx, method, params, result)
	if ctx.Err() != nil {
		cancelCall(ctx, c, id)
	}
	return err
}

func ClientDispatcherV2(conn *jsonrpc2_v2.Connection) ClientCloser {
	return &clientDispatcher{clientConnV2{conn}}
}

type clientConnV2 struct {
	conn *jsonrpc2_v2.Connection
}

func (c clientConnV2) Close() error {
	return c.conn.Close()
}

func (c clientConnV2) Notify(ctx context.Context, method string, params interface{}) error {
	return c.conn.Notify(ctx, method, params)
}

func (c clientConnV2) Call(ctx context.Context, method string, params interface{}, result interface{}) error {
	call := c.conn.Call(ctx, method, params)
	err := call.Await(ctx, result)
	if ctx.Err() != nil {
		detached := xcontext.Detach(ctx)
		c.conn.Notify(detached, "$/cancelRequest", &CancelParams{ID: call.ID().Raw()})
	}
	return err
}

// ServerDispatcher returns a Server that dispatches LSP requests across the
// given jsonrpc2 connection.
func ServerDispatcher(conn jsonrpc2.Conn) Server {
	return &serverDispatcher{sender: clientConn{conn}}
}

func ServerDispatcherV2(conn *jsonrpc2_v2.Connection) Server {
	return &serverDispatcher{sender: clientConnV2{conn}}
}

type serverDispatcher struct {
	sender connSender
}

func ClientHandler(client Client, handler jsonrpc2.Handler) jsonrpc2.Handler {
	return func(ctx context.Context, reply jsonrpc2.Replier, req jsonrpc2.Request) error {
		if ctx.Err() != nil {
			ctx := xcontext.Detach(ctx)
			return reply(ctx, nil, RequestCancelledError)
		}
		handled, err := clientDispatch(ctx, client, reply, req)
		if handled || err != nil {
			return err
		}
		return handler(ctx, reply, req)
	}
}

func ClientHandlerV2(client Client) jsonrpc2_v2.Handler {
	return jsonrpc2_v2.HandlerFunc(func(ctx context.Context, req *jsonrpc2_v2.Request) (interface{}, error) {
		if ctx.Err() != nil {
			return nil, RequestCancelledErrorV2
		}
		req1 := req2to1(req)
		var (
			result interface{}
			resErr error
		)
		replier := func(_ context.Context, res interface{}, err error) error {
			if err != nil {
				resErr = err
				return nil
			}
			result = res
			return nil
		}
		_, err := clientDispatch(ctx, client, replier, req1)
		if err != nil {
			return nil, err
		}
		return result, resErr
	})
}

func ServerHandler(server Server, handler jsonrpc2.Handler) jsonrpc2.Handler {
	return func(ctx context.Context, reply jsonrpc2.Replier, req jsonrpc2.Request) error {
		if ctx.Err() != nil {
			ctx := xcontext.Detach(ctx)
			return reply(ctx, nil, RequestCancelledError)
		}
		handled, err := serverDispatch(ctx, server, reply, req)
		if handled || err != nil {
			return err
		}
		//TODO: This code is wrong, it ignores handler and assumes non standard
		// request handles everything
		// non standard request should just be a layered handler.
		var params interface{}
		if err := json.Unmarshal(req.Params(), &params); err != nil {
			return sendParseError(ctx, reply, err)
		}
		resp, err := server.NonstandardRequest(ctx, req.Method(), params)
		return reply(ctx, resp, err)

	}
}

func ServerHandlerV2(server Server) jsonrpc2_v2.Handler {
	return jsonrpc2_v2.HandlerFunc(func(ctx context.Context, req *jsonrpc2_v2.Request) (interface{}, error) {
		if ctx.Err() != nil {
			return nil, RequestCancelledErrorV2
		}
		req1 := req2to1(req)
		var (
			result interface{}
			resErr error
		)
		replier := func(_ context.Context, res interface{}, err error) error {
			if err != nil {
				resErr = err
				return nil
			}
			result = res
			return nil
		}
		_, err := serverDispatch(ctx, server, replier, req1)
		if err != nil {
			return nil, err
		}
		return result, resErr
	})
}

func req2to1(req2 *jsonrpc2_v2.Request) jsonrpc2.Request {
	if req2.ID.IsValid() {
		raw := req2.ID.Raw()
		var idv1 jsonrpc2.ID
		switch v := raw.(type) {
		case int64:
			idv1 = jsonrpc2.NewIntID(v)
		case string:
			idv1 = jsonrpc2.NewStringID(v)
		default:
			panic(fmt.Sprintf("unsupported ID type %T", raw))
		}
		req1, err := jsonrpc2.NewCall(idv1, req2.Method, req2.Params)
		if err != nil {
			panic(err)
		}
		return req1
	}
	req1, err := jsonrpc2.NewNotification(req2.Method, req2.Params)
	if err != nil {
		panic(err)
	}
	return req1
}

func Handlers(handler jsonrpc2.Handler) jsonrpc2.Handler {
	return CancelHandler(
		jsonrpc2.AsyncHandler(
			jsonrpc2.MustReplyHandler(handler)))
}

func CancelHandler(handler jsonrpc2.Handler) jsonrpc2.Handler {
	handler, canceller := jsonrpc2.CancelHandler(handler)
	return func(ctx context.Context, reply jsonrpc2.Replier, req jsonrpc2.Request) error {
		if req.Method() != "$/cancelRequest" {
			// TODO(iancottrell): See if we can generate a reply for the request to be cancelled
			// at the point of cancellation rather than waiting for gopls to naturally reply.
			// To do that, we need to keep track of whether a reply has been sent already and
			// be careful about racing between the two paths.
			// TODO(iancottrell): Add a test that watches the stream and verifies the response
			// for the cancelled request flows.
			replyWithDetachedContext := func(ctx context.Context, resp interface{}, err error) error {
				// https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
				if ctx.Err() != nil && err == nil {
					err = RequestCancelledError
				}
				ctx = xcontext.Detach(ctx)
				return reply(ctx, resp, err)
			}
			return handler(ctx, replyWithDetachedContext, req)
		}
		var params CancelParams
		if err := json.Unmarshal(req.Params(), &params); err != nil {
			return sendParseError(ctx, reply, err)
		}
		if n, ok := params.ID.(float64); ok {
			canceller(jsonrpc2.NewIntID(int64(n)))
		} else if s, ok := params.ID.(string); ok {
			canceller(jsonrpc2.NewStringID(s))
		} else {
			return sendParseError(ctx, reply, fmt.Errorf("request ID %v malformed", params.ID))
		}
		return reply(ctx, nil, nil)
	}
}

func Call(ctx context.Context, conn jsonrpc2.Conn, method string, params interface{}, result interface{}) error {
	id, err := conn.Call(ctx, method, params, result)
	if ctx.Err() != nil {
		cancelCall(ctx, clientConn{conn}, id)
	}
	return err
}

func cancelCall(ctx context.Context, sender connSender, id jsonrpc2.ID) {
	ctx = xcontext.Detach(ctx)
	ctx, done := event.Start(ctx, "protocol.canceller")
	defer done()
	// Note that only *jsonrpc2.ID implements json.Marshaler.
	sender.Notify(ctx, "$/cancelRequest", &CancelParams{ID: &id})
}

func sendParseError(ctx context.Context, reply jsonrpc2.Replier, err error) error {
	return reply(ctx, nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err))
}


text:
<?php
	require_once(__DIR__ . "/../model/config.php");
	//link to our config

	$username = filter_input(INPUT_POST, "username", FILTER_SANITIZE_STRING);
	//recieving the input for our email/username, filtering it

	$password = filter_input(INPUT_POST, "password", FILTER_SANITIZE_STRING);
	//same things for our password

	//encryption
	$salt = "$5$" . "rounds=5000$" . uniqid(mt_rand(), true) . "$";

	$hashedPassword = crypt($password, $salt);
	//encrypting the password/salt

	$query = $_SESSION["connection"]->query("INSERT INTO users SET "
	. "username = '$username', "
	. "password = '$hashedPassword', "
	. "salt = '$salt', "
	. "exp = 0, "
	. "exp1 = 0, "
	. "exp2 = 0, "
	. "exp3 = 0, "
	. "exp4 = 0"
	);
	//connection as we have done

	$_SESSION["name"] = $username;

	if($query){
		echo false;
	}
	else {
		echo "<p>" . $_SESSION["connection"]->error . "</p>";
	}


text:
/**
 * Utility for creating a mutation object
 * Created by Martin Koster on 2/16/15.
 */
var _ = require('lodash'),
    JSParserWrapper = require('../JSParserWrapper');

(function(module){
    'use strict';

    var createMutation = function (astNode, endOffset, original, replacement) {
        replacement = replacement || '';
        return {
            range: astNode.range,
            begin: astNode.range[0],
            end: endOffset,
            line: astNode.loc.start.line,
            col: astNode.loc.start.column,
            original: _.isObject(original) ? JSParserWrapper.stringify(original) : original,
            replacement: replacement
        };
    };

    var createUnaryOperatorMutation = function (astNode, original, replacement) {
        var mutation = createMutation(astNode, astNode.range[0]+1, original, replacement);
        return _.merge(mutation, {
            line: astNode.loc.end.line,
            col: astNode.loc.end.column
        });
    };

    var createOperatorMutation = function (astNode, original, replacement) {
        var mutation = createMutation(astNode, astNode.right.range[0], original, replacement);
        return _.merge(mutation, {
            begin: astNode.left.range[1],
            line: astNode.loc.end.line,
            col: astNode.loc.end.column
        });
    };

    module.exports.createMutation = createMutation;
    module.exports.createOperatorMutation = createOperatorMutation;
    module.exports.createUnaryOperatorMutation = createUnaryOperatorMutation;
})(module);


text:
require "spec_helper"

describe KPack do
  it "has a version number" do
    expect(KPack::VERSION).not_to be nil
  end
end


text:
/*global describe, it*/
/*eslint no-unused-expressions: off*/
const {expect} = require("chai");
const {sync: sut} = require("../index");

describe("middleware: sync", () => {
    it("should allow you to pass back a synchronous value", () => {
        sut(() => ({status: 200}))(null)
            .then(r => {
                expect(r.status).to.equal(200);
            });
    });
});


text:
"""Test attributes."""

import os

import pytest

import colorise
from colorise.attributes import Attr

@pytest.fixture
def expected_results():
    return zip(Attr, [
            '\x1b[0m\x1b[0mHello\x1b[0m' + os.linesep,
            '\x1b[0m\x1b[1m\x1b[31mHello\x1b[0m' + os.linesep,
            '\x1b[0m\x1b[2m\x1b[31mHello\x1b[0m' + os.linesep,
            '\x1b[0m\x1b[3m\x1b[31mHello\x1b[0m' + os.linesep,
            '\x1b[0m\x1b[4m\x1b[31mHello\x1b[0m' + os.linesep,
            '\x1b[0m\x1b[5m\x1b[31mHello\x1b[0m' + os.linesep,
            '\x1b[0m\x1b[7m\x1b[31mHello\x1b[0m' + os.linesep,
        ])

def test_attributes():
    colorise.cprint('Hello',                       attributes=[Attr.Bold])
    colorise.cprint('Hello', fg='red',             attributes=[Attr.Bold])
    colorise.cprint('Hello',            bg='blue', attributes=[Attr.Bold])
    colorise.cprint('Hello', fg='red',  bg='blue', attributes=[Attr.Bold])

    colorise.fprint('{bold}Hello')
    colorise.fprint('{fg=red,bold}Hello')
    colorise.fprint('{bg=blue,bold}Hello')
    colorise.fprint('{fg=red,bg=blue,bold}Hello')

def test_attribute_names():
    names = frozenset([
        'reset',
        'bold',
        'faint',
        'italic',
        'underline',
        'blink',
        'reverse'
    ])

    assert Attr.names() == names

def test_attribute_aliases():
    colorise.cprint('Hello',                       attributes=[Attr.Intense])
    colorise.cprint('Hello', fg='red',             attributes=[Attr.Intense])
    colorise.cprint('Hello',            bg='blue', attributes=[Attr.Intense])
    colorise.cprint('Hello', fg='red',  bg='blue', attributes=[Attr.Intense])

    colorise.fprint('{intense}Hello')
    colorise.fprint('{fg=red,intense}Hello')
    colorise.fprint('{bg=blue,intense}Hello')
    colorise.fprint('{fg=red,bg=blue,intense}Hello')

def test_invalid_attributes():
    attr_error_message = "Unknown color format or attribute 'overlined'"

    invalid_attributes = [
        '{overlined}Hello',
        '{fg=red,overlined}Hello',
        '{bg=blue,overlined}Hello',
        '{fg=red,bg=blue,overlined}Hello',
    ]

    for text in invalid_attributes:
        with pytest.raises(ValueError, match=attr_error_message):
            colorise.fprint(text)

@pytest.mark.skip_on_windows
def test_attribute_cprint_output(test_stdout, expected_results):
    for attribute, expected in expected_results:
        test_stdout(
            colorise.cprint,
            expected,
            'Hello',
            fg='red',
            attributes=[attribute],
        )

@pytest.mark.skip_on_windows
def test_attribute_fprint_output(test_stdout, expected_results):
    for attribute, expected in expected_results:
        test_stdout(
            colorise.fprint,
            expected,
            '{{fg=red,{0}}}Hello'.format(attribute.name.lower())
        )


text:
<?php

namespace Kebab\CaisseBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * PerissableRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PerissableRepository extends EntityRepository
{
}


text:
TABLE OF PRICES

      <input type="text" class="form-control" #title="ngModel" name="title" [(ngModel)]="table.title" placeholder="Table's title" required/>

        <button type="button" class="btn btn-primary" (click)="addColumHeader()">

        </button>

          <input type="text" class="tableInput form-control" #headText="ngModel" name="headText" [(ngModel)]="head.text" required/>
          <input type="Number" class="form-control col-row-span" placeholder="Col" #headColspan="ngModel" name="headColspan" [(ngModel)]="head.colspan" />
          <button type="button" class="btn btn-danger" (click)="deleteColumHeader(head)">

          </button>

      <button type="button" class="btn btn-primary" (click)="addRow()">

      </button>

        <button type="button" class="btn btn-primary" (click)="addColum(row)">

        </button>
        <button type="button" class="btn btn-danger" (click)="deleteRow(row)">

        </button>

          <input type="text" class="priceInput form-control" #colText="ngModel" name="colText" [(ngModel)]="col.text" required/>
          <input type="Number" class="form-control col-row-span" placeholder="Col" #colColspan="ngModel" name="colColspan" [(ngModel)]="col.colspan" />
          <input type="Number" class="form-control col-row-span" placeholder="Row" #colRowspan="ngModel" name="colRowspan" [(ngModel)]="col.rowspan" />
          <button type="button" class="btn btn-danger" (click)="deleteColum(row,col)">

          </button>

        <button type="button" class="btn btn-primary" (click)="addColumFooter()">

        </button>

          <input type="text" class="priceInput form-control" #footText="ngModel" name="footText" [(ngModel)]="foot.text" required/>
          <input type="Number" class="form-control col-row-span" placeholder="Col" #footColspan="ngModel" name="footColspan" [(ngModel)]="foot.colspan" />
          <button type="button" class="btn btn-danger" (click)="deleteColumFooter(foot)">

          </button>

  Table styles

      <input id="table-inverse" type="checkbox" (change)="cssTableChanged($event.target.checked, 'table-inverse')"> Inverse

      <input id="table-striped" type="checkbox" (change)="cssTableChanged($event.target.checked, 'table-striped')"> Striped

      <input id="table-bordered" type="checkbox" (change)="cssTableChanged($event.target.checked, 'table-bordered')"> Bordered

      <input id="table-hover" type="checkbox" (change)="cssTableChanged($event.target.checked, 'table-hover')"> Hoverable

      <input id="table-sm" type="checkbox" (change)="cssTableChanged($event.target.checked, 'table-sm')"> Small

      <input id="table-responsive" type="checkbox" (change)="cssTableChanged($event.target.checked, 'table-responsive')"> Responsive

  <button type="button" class="btn btn-success" (click)="save()">
     Save
  </button>
  <button type="button" class="btn btn-info" (click)="changePreviewVisibility()">
     Preview
  </button>

Preview

    <app-table></app-table>


text:
.flash-notice {
    background-color: #afa;
    border-color: green;
    border-style: solid;
    border-width: 1px;
    margin: 10px 0;
    padding: 10px;
    text-align: center;
}


text:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:fitsSystemWindows="true"
    android:background="@color/green"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:padding="5dp"
        android:background="@color/green"
        android:focusable="true"
        android:focusableInTouchMode="true">
        <ImageView
            android:id="@+id/register_back"
            android:layout_width="25dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"

            android:padding="8dp"
            android:src="@mipmap/android_list_idex_left" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="分类"
            android:textColor="@color/white"
            android:gravity="center"
            android:textSize="20sp"/>

    </RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:paddingTop="10dp"
        android:padding="2dp"
        android:background="#F5F5F5"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tv_zh"
            android:padding="5dp"
            android:gravity="center"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="综合"
            android:textSize="18sp"
            android:layout_height="wrap_content" />
        <View
            android:layout_width="1dp"
            android:layout_marginTop="10dp"
            android:layout_height="match_parent"
            android:background="#DCDCDC"></View>
        <TextView
            android:id="@+id/tv_jg"
            android:padding="5dp"
            android:gravity="center"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="按价格"
            android:textSize="18sp"
            android:layout_height="wrap_content" />
        <View
            android:layout_width="1dp"
            android:layout_marginTop="10dp"
            android:layout_height="match_parent"
            android:background="#DCDCDC"></View>
        <TextView
            android:id="@+id/tv_xl"
            android:padding="5dp"
            android:gravity="center"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="按出货量"
            android:textSize="18sp"
            android:layout_height="wrap_content" />

    </LinearLayout>
    <View
        android:layout_width="match_parent"

        android:layout_height="1dp"
        android:background="#DCDCDC"></View>
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/goodslist_swipeRefreshLayout"
        android:background="@color/white"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="15px"
        android:paddingLeft="15px"
        >

        <android.support.v7.widget.RecyclerView
            android:id="@+id/goodslist_recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            tools:listitem="@layout/item_goodslist"
            />

    </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>


text:
package ch.hslu.mobpro.proj.thinkquick.activities;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import ch.hslu.mobpro.proj.thinkquick.R;
import ch.hslu.mobpro.proj.thinkquick.game.handler.CountDownBackgroundHandler;
import ch.hslu.mobpro.proj.thinkquick.preferences.PreferenceSingleton;

public class CountdownActivity extends AppCompatActivity {
    private final static int DELAY = 1000;
    private CountDownBackgroundHandler countDownBackgroundHandler;
    private Handler countDown;
    private Intent gameActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_countdown);

        countDownBackgroundHandler = new CountDownBackgroundHandler(this);
        gameActivity = new Intent(this, GameActivity.class);

        resetGameModeIndex(GameActivity.GAME_MODE_EXTRA);
        setExercisePoints();
        setExerciseResult();
        startCountDown();
    }

    private void resetGameModeIndex(final String gameModeExtra) {
        final int gameModeIndex = getIntent().getIntExtra(gameModeExtra, 0);
        Log.i("mode_index_countdown", ""+gameModeIndex);
        gameActivity.putExtra(gameModeExtra, gameModeIndex);
    }

    private void setExerciseResult() {
        countDownBackgroundHandler.setCountDownBackgroundFromAnswer(
                PreferenceSingleton.getHandler(this).getExerciseResult());
    }

    private void setExercisePoints() {
        countDownBackgroundHandler.setCountDownPoints(
                PreferenceSingleton.getHandler(this).getExercisePoints());
    }

    private void startCountDown() {
        countDown = new Handler();
        countDownOneStep();
    }

    private void countDownOneStep() {
        countDown.postDelayed(new Runnable() {
            public void run() {
                startActivity(gameActivity);
            }
        }, DELAY);
    }

    private void cancelCountDown() {
        countDown.removeCallbacksAndMessages(null);
    }

    @Override
    protected void onPause() {
        super.onPause();
        cancelCountDown();
    }

    @Override
    protected void onStop() {
        super.onStop();
        cancelCountDown();
    }

    @Override
    protected void onResume() {
        super.onResume();
        countDownOneStep();
    }

    @Override
    public void onBackPressed() {
        startActivity(new Intent(this, MainActivity.class));
    }
}


text:
using System;
using System.Linq;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Sln.Internal;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Common;

namespace Microsoft.DotNet.Tools.Sln.List
{
    internal class ListProjectsInSolutionCommand : CommandBase
    {
        private readonly string _fileOrDirectory;

        public ListProjectsInSolutionCommand(
            AppliedOption appliedCommand,
            string fileOrDirectory,
            ParseResult parseResult) : base(parseResult)
        {
            if (appliedCommand == null)
            {
                throw new ArgumentNullException(nameof(appliedCommand));
            }
            _fileOrDirectory = fileOrDirectory;
        }

        public override int Execute()
        {
            SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(_fileOrDirectory);
            if (slnFile.Projects.Count == 0)
            {
                Reporter.Output.WriteLine(CommonLocalizableStrings.NoProjectsFound);
            }
            else
            {
                Reporter.Output.WriteLine($"{LocalizableStrings.ProjectsHeader}");
                Reporter.Output.WriteLine(new string('-', LocalizableStrings.ProjectsHeader.Length));
                foreach (var slnProject in slnFile.Projects.Where(p => p.TypeGuid != ProjectTypeGuids.SolutionFolderGuid))
                {
                    Reporter.Output.WriteLine(slnProject.FilePath);
                }
            }
            return 0;
        }
    }
}


text:
SocialConnect Common
====================
[![Build Status](http://img.shields.io/travis/SocialConnect/common.svg?style=flat)](https://travis-ci.org/SocialConnect/common)
[![Code Coverage](http://img.shields.io/coveralls/SocialConnect/common.svg?style=flat)](https://coveralls.io/r/SocialConnect/common)
[![License](http://img.shields.io/packagist/l/SocialConnect/common.svg?style=flat)](https://packagist.org/packages/socialconnect/common)

## Enitity

+ User
+ Friend

You can intance and setup fields for entity

```php
$user = new \SocialConnect\Common\Entity\User();
$user->id = 12345;
$user->firstname = 'Dmitry';
$user->lastname = 'Patsura';

var_dump($user);
```

## Http\Client

You can use `Curl` client

```php
  $httpClient = new SocialConnect\Common\Http\Client\Curl();
```

or `Guzzle` wrapper for GuzzleHttp library

```php
  $httpClient = new SocialConnect\Common\Http\Client\Guzzle();
```

## Build `Client` for your REST application

```php
use SocialConnect\Common\ClientAbstract;

class MySocialNetworkClient extends ClientAbstract
{
  public function requestMethod($method, $parameters)
  {
    //...
  }

  public function getUser($id)
  {
    $result = $this->requestMethod('/user/get/', $id);
    if ($result) {
      $user = new User();
      $user->id = $result->id;
      //...

      return $user;
    }

    return false;
  }
}
```

Next you can use it

```php
$client = new MySocialNetworkClient($appId, $appSecret);
$client->setHttpClient(new SocialConnect\Common\Http\Client\Curl());

$user = $client->getUser(1);

//Custom rest methods
$client->requestMethod('myTestMethod', []);
$client->requestMethod('myTest', []);
```